19

可以使用包含分辨率为 150 dpi 的图像的 Itext 生成 PDF 文档。

(似乎是 Itext 正在将图像质量降低到 72 dpi。)

谢谢

4

2 回答 2

50

请参阅这个线程,特别是这篇解释 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" 的速度打印。

所有这些都会让您头疼,尤其是如果您习惯于使用 Adob​​e Photoshop 等允许您为某些图像类型设置“分辨率”的成像程序。不幸的是,这更像是一个“打印提示”,并没有真正改变文件。72DPI 的 100x100 像素图像与 300DPI 的 100x100 像素完全相同,打印时除外。iText 完全忽略了这个打印提示,要么是因为仅此而已,要么是因为并非所有图像格式都支持它。(不直接相关,但一个常见的神话是“保存为 Web”使图像成为 72DPI,而实际上它完全从文件中去除了分辨率信息。)

忽略实际发生的情况,要使图像成为您认为的 150 DPI,将源图像的宽度和高度(以像素为单位)乘以0.48(72 除以 150)并将这些新数字传递给scaleAbsolute().

Image类上有一个方法,setDPI但据我所知,它实际上对图像的位置没有任何影响,而且更多的是信息性的东西。

于 2011-11-23T16:13:05.403 回答
0

如果 PDF 的图像质量很差。您可以执行以下操作:

  1. 以高分辨率创建更大尺寸的图像。
  2. 以 PDF 文件导出时缩小图像。

这解决了我的问题。

于 2012-07-12T10:24:22.817 回答