【发布时间】:2011-07-12 19:07:40
【问题描述】:
我正在尝试优化我们基于 Java 的系统生成的 PDF 文件大小。我的第一个想法是通过将它们转换为灰度来减小图像的大小。你知道其他任何工具,最好是java库或组件,可以用于PDF文档缩小尺寸吗?
【问题讨论】:
标签: java image pdf compression itext
我正在尝试优化我们基于 Java 的系统生成的 PDF 文件大小。我的第一个想法是通过将它们转换为灰度来减小图像的大小。你知道其他任何工具,最好是java库或组件,可以用于PDF文档缩小尺寸吗?
【问题讨论】:
标签: java image pdf compression itext
如果您的输入图像尺寸较大,我建议您在将它们添加到 pdf 文件之前先缩小它们。 在纯 Java 中,您可以实现类似
Image image; // Say you have loaded the larger image
image = image.getScaledInstance(width, height, 0); // where width and height is something like 640x480
// Now save the image to some temporary file and use the shrunk version in your pdf file.
注意保持纵横比。检查 ImageIO API 找到 con Java 1.4.2+ 以保存 jpeg 文件。
【讨论】:
您可以在 PdfStamper 上使用 setFullCompression 来压缩 PDF。
【讨论】:
Acrobat Pro 9 和 X 都具有“空间审核”功能,可以告诉您 PDF 的哪些部分占用的空间最多,这样您就不会浪费时间修复未损坏的内容。
例如,如果您不小心,可能会不小心包含给定字体或图像的多个副本。静态页眉和页脚可以放置在单个 PdfTemplate 中,以便在适当的页面上重复使用。
PdfSmartCopy 将在导入不同页面时合并相同的流。它不会 合并字体子集。我不知道 Adobe 之外的任何 PDF 软件。
【讨论】:
您要压缩的 PDF 文件是否已压缩?如果没有,您可以使用iText 阅读PDF并编写压缩PDF。
【讨论】:
您可以使用称为“对象流”的功能来减小 PDF 文件的大小。 iText 不支持对象流,但您可以对使用 PDFLeo 等工具生成的 PDF 进行后处理。请参阅http://mdn.morovia.com/manuals/pdfleo-1/PDF-Optimization-Size-Reduction.php 了解更多信息。
如果您减少图像颜色深度,您可能希望在 iText 中创建 PDF 之前这样做。在某些场景下,使用 JPEG 格式或将颜色深度降低到 256 色会节省大量空间。
【讨论】:
如果您的图像由矢量组成,也就是说,如果您使用 Graphics2D 来绘制图像,例如JFreeChart 图形,您可以将它们添加为 iText 图像,它们将在 PDF 中绘制为矢量。与二值图像相比,这大大减小了尺寸。
此外,您可以通过读写 pdf 或在生成时使用 Java 的 ImageIO API 缩放图像。
【讨论】: