java - PDF、barcode4j用java压缩

标签 java pdf barcode apache-fop

我正在使用 Apache Fop 1.0 创建 PDF 文档。默认情况下,它使用 FlateFilter 来压缩内容。 FOP 在底层使用 DeflaterOutputStream DEFAULT_COMPRESSION。我还没有找到将其设置为 BEST_COMPRESSION 的任何可能性。

pdf 包含一些由 Barcode4j 2.1 生成的条形码。如我所见,生成的图像非常大,我还没有找到任何关于如何压缩它的信息:

<fo:instream-foreign-object height="25pt" width="101pt">
   <barcode:barcode xmlns:barcode="http://barcode4j.krysalis.org/ns" message="xxxxxxxx">
     <barcode:code128>
       <barcode:height>37pt</barcode:height>
       <barcode:module-width>0.9pt</barcode:module-width>
       <barcode:human-readable>
         <barcode:placement>none</barcode:placement>
       </barcode:human-readable>
     </barcode:code128>
   </barcode:barcode>
</fo:instream-foreign-object>

如果我生成 PDF(在 fop 中使用 flate 并使用上面编写的条形码注入(inject)),那么我可以使用简单的 winzip 将 pdf 大小减小 30%。

我的进程有没有办法使用更好的压缩算法? pdf 应该可以在 Acrobat Reader 中打开,因此不能选择在服务器端压缩并在客户端解压缩。

我认为 barcode4j 生成的图像可以压缩,但我不知道该怎么做。

更新一: 生成的条形码似乎太大了。 pdf 包含 3 页和 3 个条形码。 3 条形码大约占整个 pdf 大小的 50%。

谢谢

佐尔坦

最佳答案

默认压缩设置和最大值之间没有太大区别。如果你知道 ZLib,你可以写一些测试代码看看——可能比你预期的要少得多。大小减小 30% 的原因是对整个文件应用了压缩——在 PDF 中只有流被压缩。

您可以通过使用压缩对象流显着减小大小。 FOP 不支持它,但许多工具都支持。参见 here如果您需要更多信息。

关于java - PDF、barcode4j用java压缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5139835/

相关文章:

php - Zend PDF - 有没有一种很好的方法来实现 MVC 模式?

delphi - 使用 StretchDIBits 使用 Delphi 6 处理条形码图像 - 输出中缺少条形线

barcode - 二维条码与一维条码 - 速度、准确性、尺寸

java - 如何从 JPA 中的父实体检索子数据

java - 我已经安装了 Gecko 驱动程序,但仍然出现错误

java - 将字节数组写入txt文件并将其读回

ios - 将多边形拟合在一起

java - 如何在java中获取数组中的某些String值

google-chrome - 单击目标在同一 PDF 文档上的超链接后,Google Chrome 的后退按钮

barcode - QR 码 - 我在哪里可以找到(免费)代码来在网页上嵌入我自己的生成器?