【发布时间】:2012-01-04 13:54:06
【问题描述】:
可以使用 Itext 生成 PDF 文档,其中包含分辨率为 150 dpi 的图像。
(似乎是 Itext 正在将图像质量降低到 72 dpi。)
谢谢
【问题讨论】:
标签: pdf itext image-quality
可以使用 Itext 生成 PDF 文档,其中包含分辨率为 150 dpi 的图像。
(似乎是 Itext 正在将图像质量降低到 72 dpi。)
谢谢
【问题讨论】:
标签: pdf itext image-quality
请参阅 thread,特别是 this post,它解释了 PDF 没有 DPI 的概念。 This thread 也不错。
基本上(这在技术上并不准确,但足够接近)默认情况下,当您使用 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 的图像质量较差。您可以执行以下操作:
这解决了我的问题。
【讨论】: