PDF压缩java

PDF压缩java,java,image,pdf,compression,itext,Java,Image,Pdf,Compression,Itext,我试图优化我们基于Java的系统生成的PDF文件大小。我的第一个想法是通过将图像转换为灰度来减小图像的大小。您是否知道其他工具,最好是java库或组件,可以用于PDF文档缩小大小?如果您的输入图像尺寸较大,我建议您在将其添加到PDF文件之前先缩小它们。 在纯Java中,您可以执行以下操作 Image image; // Say you have loaded the larger image image = image.getScaledInstance(width, height, 0);

我试图优化我们基于Java的系统生成的PDF文件大小。我的第一个想法是通过将图像转换为灰度来减小图像的大小。您是否知道其他工具,最好是java库或组件,可以用于PDF文档缩小大小?

如果您的输入图像尺寸较大,我建议您在将其添加到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.

注意保持纵横比。检查找到的con Java 1.4.2+以保存jpeg文件。

如果您的输入图像尺寸较大,我建议您在将其添加到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.

注意保持纵横比。检查找到的con Java 1.4.2+以保存jpeg文件。

您要压缩的PDF文件是吗?如果没有,您可以使用来读取PDF并编写压缩的PDF。

您正在压缩的PDF是吗?如果没有,您可以使用来读取PDF并编写压缩的PDF。

您可以使用称为“对象流”的功能来减小PDF文件的大小。iText不支持对象流,但您可以使用诸如PDFLeo之类的工具对生成的PDF进行后处理。有关更多信息,请参阅


如果减少图像颜色深度,则可能需要在iText中创建PDF之前进行此操作。在某些情况下,使用JPEG格式或将颜色深度减少到256色将节省大量空间。

您可以使用称为“对象流”的功能来减小PDF文件的大小。iText不支持对象流,但您可以使用诸如PDFLeo之类的工具对生成的PDF进行后处理。有关更多信息,请参阅


如果减少图像颜色深度,则可能需要在iText中创建PDF之前进行此操作。在某些情况下,使用JPEG格式或将颜色深度减少到256色将节省大量空间。

您可以在PdfStamper上使用setFullCompression来压缩PDF

您可以在PdfStamper上使用setFullCompression来为PDF放气

Acrobat Pro 9&X都有一个“空间审核”功能,可以告诉您PDF中哪些部分占用了最多的空间,这样您就不会浪费时间修复未损坏的东西

例如,如果不小心,可能会意外地包含给定字体或图像的多个副本。静态页眉和页脚可以放在一个PdfTemplate中,该PdfTemplate可以在适当的页面上重用


PdfSmartCopy将在导入不同页面时合并相同的流。它不会合并字体子集。我不知道Adobe之外还有哪种PDF软件能做到这一点。

Acrobat Pro 9&X都有一个“空间审核”功能,可以告诉你PDF的哪些部分占用了最多的空间,这样你就不会浪费时间修复没有损坏的东西

例如,如果不小心,可能会意外地包含给定字体或图像的多个副本。静态页眉和页脚可以放在一个PdfTemplate中,该PdfTemplate可以在适当的页面上重用


PdfSmartCopy将在导入不同页面时合并相同的流。它不会合并字体子集。我不知道Adobe以外的任何PDF软件会这样做。

如果您的图像由矢量组成,也就是说,如果您使用Graphics2D绘制图像,例如JFreeChart图形,您可以将其添加为iText图像,并将其作为矢量绘制在PDF中。与二进制图像相比,这大大减小了图像的大小


此外,您可以通过读取和写入pdf,也可以在生成时使用Java的ImageIO API缩放图像。

如果图像由矢量组成,也就是说,如果您使用Graphics2D绘制图像(如JFreeChart图形),您可以将其添加为iText图像,并将其作为矢量绘制在pdf中。与二进制图像相比,这大大减小了图像的大小


此外,您可以通过读写pdf,也可以在生成时使用Java的ImageIO API缩放图像。

我正在使用iText生成pdf。iText是否有能力将生成的PDF作为压缩文件写入?@Ajith是的,实际上,Zoltan Hamori有正确的调用来实现这一点。压缩级别专门用于扁平(zip)压缩IIRC。@马克·阿赫,是的,你和佐尔坦是对的。我只使用iText读取PDF。我正在使用iText生成PDF。iText是否有能力将生成的PDF作为压缩文件写入?@Ajith是的,实际上,Zoltan Hamori有正确的调用来实现这一点。压缩级别专门用于扁平(zip)压缩IIRC。@马克·阿赫,是的,你和佐尔坦是对的。我只使用iText阅读PDF