使用Itext的图像质量

时间:2011-11-23 08:53:38

标签: pdf itext image-quality

可以使用Itext生成PDF文档,其中包含分辨率为150 dpi的imgages。

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

由于

2 个答案:

答案 0 :(得分:45)

请参阅此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个”用户单位“,给你一个有效的DPI为144,打印大约为1 3/8”。

所有这些都会让你的头部受到伤害,特别是如果你习惯于像Adobe Photoshop这样的程序,可以为某些图像类型设置“分辨率”。不幸的是,这更像是一个“打印提示”,并没有真正改变文件。 72DPI的100x100像素图像与300DPI的100x100像素完全相同,除非打印时。 iText完全忽略了这个打印提示,要么就是全部,要么是因为并非所有图像格式都支持它。 (没有直接相关,但一个常见的误解是“Save for Web”使图像72DPI在现实时它完全剥离了文件中的分辨率信息。)

忽略实际发生的事情,将图像视为150 DPI,将源图像的宽度和高度(以像素为单位)乘以0.48(72除以150)的多个,并传递新的数字为scaleAbsolute()

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

答案 1 :(得分:0)

如果PDF中的图像质量较差。你可以这样做:

  1. 以高分辨率创建更大尺寸的图像。
  2. 在导出PDF文件时缩小图像。
  3. 这解决了我的问题。