【发布时间】:2014-08-18 07:23:21
【问题描述】:
我已经看到了使用 PDFBox 根据图像 DPI 提取图像的代码,如下所示
PDDocument document = PDDocument.load(path);
PDFImageWriter writer = new PDFImageWriter();
boolean success = writer.writeImage(document, "jpg", "", 1, 1,
"C:\\Image Quality\\150", BufferedImage.TYPE_INT_RGB, 150);
return document;
在上面的代码中,我可以在从 pdf 中提取图像时指定图像分辨率(150)。作为回报,分辨率越高,图像越大。
现在我想要反转它的意思是在将图像写入 PDF 时指定图像的分辨率/dpi,但是下面的代码没有提供这样的选项来指定 DPI?谁能指导我我想念的地方
PDPageContentStream contentStream = null;
contentStream = new PDPageContentStream(document, userPage);
contentStream.drawImage(img, 60, 60);
contentStream.close();
在将图像写入 PDF 时,请指导我在哪里可以传递分辨率/DPI 参数(因为图像大于 pdf 页面大小)?
谢谢,
【问题讨论】:
-
在回答您之前的问题时,您被告知 dpi 在 PDF 的上下文中几乎没有意义。据说您可以使用重载 drawXObject(PDXObject xobject, float x, float y, float width, float height) 来实现您的目标。
-
是的,我明白这一点,但我看到一些在线网站在将图像转换为 PDF 时也需要online2pdf.com/convert-images-to-pdf 分辨率,所以这给我造成了混乱。现在我假设调整图像大小以适应 PDF 不会改变质量,是吗?我认为调整大小然后使用drawImage等于drawXObject方法,如果这不是这两者之间的区别,请纠正我。
-
我认为调整大小然后使用 drawImage 等于 drawXObject 方法,如果这不是这两者之间的区别,请纠正我。 - 调整图像大小(即下采样)其原始形式,然后使用
drawImage嵌入下采样图像。另一方面,drawXObject嵌入原始图像并对其进行缩放。因此,在高分辨率打印输出时,前者仅提供下采样、分辨率较低的图像,而后者允许输出分辨率较高的图像。 -
非常感谢您解决了我的问题。现在我得到了高质量的 PDF,之前我正在调整大小并且它失去了质量,但现在它可以与 drawXObject 完美配合。
-
好的,我让我的 cmets 成为一个实际的答案。