可以使用Itext生成PDF文档,其中包含分辨率为150 dpi的imgages。
(似乎Itext正在将图像质量降低到72 dpi。)
由于
答案 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中的图像质量较差。你可以这样做:
这解决了我的问题。