可以使用包含分辨率为 150 dpi 的图像的 Itext 生成 PDF 文档。
(似乎是 Itext 正在将图像质量降低到 72 dpi。)
谢谢
可以使用包含分辨率为 150 dpi 的图像的 Itext 生成 PDF 文档。
(似乎是 Itext 正在将图像质量降低到 72 dpi。)
谢谢
请参阅这个线程,特别是这篇解释 PDF 没有 DPI 概念的帖子。这个线程也很好读。
本质上(这在技术上并不准确但足够接近)默认情况下,当您使用 iText 放置图像时,假设每 72 个像素将使用 1 英寸的打印空间。如果要更改此规则,则需要更改图像的matrix
. 您可以直接执行此操作(这很难)或使用缩放方法(更容易),例如scaleAbsolute()
、scaleAbsoluteWidth()
、和
。scaleAbsoluteHeight()
scalePercentage()
scaleToFit()
更改矩阵不会以任何方式更改图像,它只会(本质上)更改将多少像素塞入一英寸的定义,在打印时称为 DPI。(您实际上是在更改图像像素和文档用户单位之间的关系,但您实际上并不需要知道这一点。)因此,默认情况下,iText 放置的 200x200 像素图像应以大约 2 3/4 英寸的尺寸打印出来。如果您调用scaleAbsolute(100,100)
它,它将把这 200 个像素塞进 100 个“用户单位”中,从而为您提供 144 的有效 DPI 并以大约 1 3/8" 的速度打印。
所有这些都会让您头疼,尤其是如果您习惯于使用 Adobe Photoshop 等允许您为某些图像类型设置“分辨率”的成像程序。不幸的是,这更像是一个“打印提示”,并没有真正改变文件。72DPI 的 100x100 像素图像与 300DPI 的 100x100 像素完全相同,打印时除外。iText 完全忽略了这个打印提示,要么是因为仅此而已,要么是因为并非所有图像格式都支持它。(不直接相关,但一个常见的神话是“保存为 Web”使图像成为 72DPI,而实际上它完全从文件中去除了分辨率信息。)
忽略实际发生的情况,要使图像成为您认为的 150 DPI,将源图像的宽度和高度(以像素为单位)乘以0.48
(72 除以 150)并将这些新数字传递给scaleAbsolute()
.
Image
类上有一个方法,setDPI
但据我所知,它实际上对图像的位置没有任何影响,而且更多的是信息性的东西。
如果 PDF 的图像质量很差。您可以执行以下操作:
这解决了我的问题。