2011-02-28 106 views
2

我使用Apache Fop 1.0创建PDF文档。默认情况下,它使用FlateFilter压缩内容。 FOP使用封面下的DeflaterOutputStream DEFAULT_COMPRESSION。我还没有找到将其设置为BEST_COMPRESSION的可能性。PDF,使用java进行barcode4j压缩

该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和使用上面写的条形码注射),那么我可以降低简单的winzip的pdf大小减少30%。

有没有办法在我的过程中使用更好的压缩算法? PDF应该可以在Acrobat Reader中打开,所以它不是在服务器端压缩并在客户端解压它的选项。

我认为barcode4j生成的图像可以压缩,但我看不出如何去做。

更新1: 生成的条形码似乎太大。该pdf包含3页和3个条形码。 3条码约为整个pdf尺寸的50%。

感谢

佐尔坦

+1

PDF中的条码应该很小,因为它们可以作为矢量图形呈现。 Barcode4j能够产生EPS,也许有一种方法可以将其转换为PDF。这应该可以节省大量的空间。 – 2011-02-28 10:19:21

+0

谢谢。这个问题可能与barcode4j有关。 3个条码是15千字节。 – HamoriZ 2011-02-28 13:15:26

回答

1

有默认的压缩设置和max之间没有大的区别。如果您知道ZLib,您可以编写一些测试代码来查看 - 可能远远低于您的预期。您将尺寸减小30%的原因是压缩应用于整个文件 - 在PDF中,只有流被压缩。

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