【发布时间】:2018-02-14 09:19:43
【问题描述】:
我在客户站点有以下代码:
private void writeBufferedImage2Pdf(PdfContentByte cb, BufferedImage img)
{
com.itextpdf.text.Image BWImage = com.itextpdf.text.Image.getInstance(img, null, false);
BWImage.setAbsolutePosition(0, 0); // from the lower left
BWImage.scaleToFit(612,792); // 8.5x11 (72 per inch)
cb.addImage(BWImage, false);
}
我注意到生成的 .pdf 文件的大小比我预期的要大。例如,如果 .pdf 包含 8 个 .jpg 图像,总计 3.3MB,当使用这 8 个 jpg 生成 .pdf 时,文件大小会爆炸到 28MB。
如何对添加到 .pdf 的图像应用压缩方案?
我想使用无损压缩算法来存储图像,即使原始图像是 .jpg。
图像是文本,所以我们也在考虑转换为黑白,但这是一个单独的问题,可以让我们进一步压缩。
[编辑] 虽然图像最初是 .jpg 图像,但它被读入缓冲图像,因为它是在应用程序中操作的。像裁剪、分割和调整大小这样的想法已经完成。也可以添加水印时间戳。
[编辑] 我希望在将图像写入 .pdf 时可以应用无损压缩方案。例如,.png 使用的任何方案可能不会像 .jpg 那样压缩,但它仍然应该压缩。还是我假设它没有被压缩并且 28MB 是压缩大小?
【问题讨论】:
-
“虽然图像最初是 .jpg 图像,但它被读入缓冲图像,因为...” - 然后 这样做 使大小从 3.3MB 扩展到 28MB,而不是将它们添加到 PDF。而且当您“想要使用无损压缩算法来存储图像” 时,尺寸不会再次内爆(即直到您减少颜色等)。