使用 PDFBox 压缩 PDF 的最佳解决方案是什么?
What is the best solution to compress PDF with PDFBox?
我有一个 PDF 文件要保存,但首先我必须以尽可能好的质量压缩它,而且我必须使用开源库(如 Apache PDFBox®)。
所以,我到现在都是把所有的图片类型的资源都拿来,压缩后放回PDF,但是压缩率太低了。这只是我分配压缩参数的代码片段:
PDImageXObject imageXObject = (PDImageXObject) pdxObject;
ImageWriter imageWriter = ImageIO
.getImageWritersByFormatName(FileType.JPEG.name().toLowerCase()).next();
ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
imageWriteParam.setCompressionQuality(COMPRESSION_FACTOR);
还有一些其他机制可以优化 PDF,目前只压缩图像显示效果稍差。
关于压缩。事实上,图像可能是最大的罪魁祸首。
图像:图像大小,宽度和高度,也会影响文件大小,不仅图像质量有损(您的COMPRESSION_FACTOR)。一般来说,我会从压缩 JPEG 文件 outside PDF 开始。然后你可以找到最好的压缩,它仍然可以充分显示和打印(!)。照片 JPEG、矢量图形(如图表)最好用 Encapsulated PostScript 完成。
页面徽标等重复图像不应重复存储。这里的优化是网络流媒体。
字体:默认字体不需要space,完整字体最需要space(例如带有表格的PDF)。嵌入字体是第三种可能性,只加载需要的符号。
PDF 拥有二进制数据: 文本和其他部分可以解压缩,仅使用 7 位 ASCII 压缩,并使用所有字节进一步压缩。 ASCII 选项有点过时了。
目前我没有使用 pdfbox,所以我把它留给你。
我有一个 PDF 文件要保存,但首先我必须以尽可能好的质量压缩它,而且我必须使用开源库(如 Apache PDFBox®)。
所以,我到现在都是把所有的图片类型的资源都拿来,压缩后放回PDF,但是压缩率太低了。这只是我分配压缩参数的代码片段:
PDImageXObject imageXObject = (PDImageXObject) pdxObject;
ImageWriter imageWriter = ImageIO
.getImageWritersByFormatName(FileType.JPEG.name().toLowerCase()).next();
ImageWriteParam imageWriteParam = imageWriter.getDefaultWriteParam();
imageWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
imageWriteParam.setCompressionQuality(COMPRESSION_FACTOR);
还有一些其他机制可以优化 PDF,目前只压缩图像显示效果稍差。
关于压缩。事实上,图像可能是最大的罪魁祸首。
图像:图像大小,宽度和高度,也会影响文件大小,不仅图像质量有损(您的COMPRESSION_FACTOR)。一般来说,我会从压缩 JPEG 文件 outside PDF 开始。然后你可以找到最好的压缩,它仍然可以充分显示和打印(!)。照片 JPEG、矢量图形(如图表)最好用 Encapsulated PostScript 完成。
页面徽标等重复图像不应重复存储。这里的优化是网络流媒体。
字体:默认字体不需要space,完整字体最需要space(例如带有表格的PDF)。嵌入字体是第三种可能性,只加载需要的符号。
PDF 拥有二进制数据: 文本和其他部分可以解压缩,仅使用 7 位 ASCII 压缩,并使用所有字节进一步压缩。 ASCII 选项有点过时了。
目前我没有使用 pdfbox,所以我把它留给你。