告别大体积PDF!基于PDFBox的Java压缩工具
告别大体积PDF!基于PDFBox的Java压缩工具,轻松瘦身不损效
日常工作中,动辄几兆、几十兆的PDF文件不仅传输慢,还占存储空间?今天给大家分享一款基于Apache PDFBox开发的Java PDF压缩工具,几行代码就能实现PDF文件轻量化,兼顾压缩效率与使用体验!
一、核心依赖
使用该工具首先要引入PDFBox依赖,Maven配置如下:
<dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version></dependency>
二、核心压缩参数说明
这款工具的压缩逻辑围绕「质量」「分辨率」两大核心维度,同时内置了智能阈值判断,以下是关键参数及注释:
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
三、工具使用示例代码
工具类封装了简洁的调用方法,支持「默认参数压缩」和「自定义参数压缩」两种方式,直接复用即可:
1. 基础使用(默认参数)
import com.keyway.business.core.util.PdfCompressUtil;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;publicclassPdfCompressDemo{publicstaticvoidmain(String[] args){// 1. 读取待压缩的PDF文件为字节数组 File inputFile = new File("D:/test/原始文件.pdf");byte[] pdfData = newbyte[(int) inputFile.length()];try (FileInputStream fis = new FileInputStream(inputFile)) { fis.read(pdfData);// 2. 使用默认参数压缩PDF(质量0.3,DPI72)byte[] compressedData = PdfCompressUtil.compressPdf(pdfData);// 3. 将压缩后的字节数组写入新文件 File outputFile = new File("D:/test/压缩后文件.pdf");try (FileOutputStream fos = new FileOutputStream(outputFile)) { fos.write(compressedData); System.out.println("PDF压缩完成,已保存至:" + outputFile.getAbsolutePath()); } } catch (IOException e) { e.printStackTrace(); } }}
2. 自定义参数压缩(按需调整质量和DPI)
如果对压缩质量/分辨率有特殊需求,可自定义参数:
import com.keyway.business.core.util.PdfCompressUtil;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;publicclassCustomPdfCompressDemo{publicstaticvoidmain(String[] args){ File inputFile = new File("D:/test/高清PDF.pdf");byte[] pdfData = newbyte[(int) inputFile.length()];try (FileInputStream fis = new FileInputStream(inputFile)) { fis.read(pdfData);// 自定义压缩参数:质量0.2(更高压缩率)、DPI50(更低分辨率)float customQuality = 0.2f;int customDpi = 50;byte[] compressedData = PdfCompressUtil.compressPdf(pdfData, customQuality, customDpi); File outputFile = new File("D:/test/自定义压缩后文件.pdf");try (FileOutputStream fos = new FileOutputStream(outputFile)) { fos.write(compressedData); System.out.println("自定义参数PDF压缩完成!"); } } catch (IOException e) { e.printStackTrace(); } }}
3. 额外工具方法:判断是否为PDF文件
工具类还内置了文件名校验方法,避免传入非PDF文件导致异常:
// 校验文件名是否为PDFString fileName = "报表.pdf";boolean isPdf = PdfCompressUtil.isPdfFile(fileName);System.out.println("是否为PDF文件:" + isPdf); // 输出true
四、工具核心特性
-
智能兜底:压缩率低于5%时自动返回原始文件,避免无效操作; -
自动适配:压缩后页面自动适配A4尺寸,居中渲染,保证排版; -
异常处理:完善的异常捕获与日志输出,便于排查压缩失败原因; -
资源安全:通过finally块确保PDF文档、流资源正常关闭,避免内存泄漏。
五、使用小贴士
-
压缩质量建议在0.2-0.5之间,兼顾体积和画质; -
办公场景推荐DPI72,纯文本PDF可降至50,高清图文建议96; -
该工具基于「将PDF页面转为图片再重绘」逻辑,适合以图片为主的PDF,纯文本PDF压缩收益可能较低。
夜雨聆风