使用Itext的图像质量

Lui*_*ixv 17 pdf itext image-quality

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

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

谢谢

Chr*_*aas 45

请参阅此主题,特别是这篇文章解释了PDF没有DPI的概念.这个帖子也很好读.

基本上(并且这在技术上并不准确但足够接近)默认情况下,当您使用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但据我所知,它实际上对图像的位置没有任何影响,更像是一个信息性的东西.