我需要创建带有图像的pdf以便进行打印。我正在使用iText将高分辨率图像添加到pdf。它将质量降低到72 DPI。
导致打印后图像质量差。
原始图像分辨率为2549 * 3304和DPI(300)。
我尝试了以下选项
image.scaleAbsolute(2549*.24 ,3304*.24 );
image.setDpi(300,300);
image.scaleToFit(2549*.24 ,3304*.24 );
当前代码看起来像这样
Document document = new Document(PageSize.LETTER);
document.open();
Image image = Image.getInstance("C:/Project/bg.png");
image.setAbsolutePosition(0,0);
image.scalePercent(24);
document.add(image);
document.close();
我经历了一些线程(Adding an image to a PDF using iTextSharp and scale it properly)仍然无法解决问题
有人可以帮我解决这个问题,以便在打印时获得更好的图像质量吗?
最佳答案
setDpi()
方法与您的代码无关,原始图像的DPI也无关。像素在iText中被视为点。这意味着按原样添加图像将导致每英寸72个像素。
您将图像缩放到原始大小的24%。这意味着您可以提高分辨率:仅使用24%的空间即可显示相同数量的像素。在这种情况下,您将显示2549个像素,分布在611.76点上。这大约是8.5英寸,这意味着您确实具有300 DPI的分辨率。
我认为问题不是由PDF内图片的分辨率引起的(但是很难分辨,因为我们无法检查PDF)。我认为问题是由使用与PDF分辨率不同的分辨率来打印文档的打印过程引起的。
无论如何:如果使用方法scalePercent()
,scaleAbsolute()
或scaleToFit()
,则iText不会减少像素数。
根据评论的额外信息:
向PDF询问其“分辨率”是没有意义的,因为PDF没有任何分辨率(尽管PDF内的图像可能只有一个)。我不知道为什么Photoshop告诉您分辨率为72 DPI。可能这是默认值,因为PDF中的测量单位对应一个点,并且一英寸有72个点。
我已经检查了您共享的PDF。在屏幕上查看时,看不到任何分辨率下降。我可以看到文件尺寸为8.5 x 11英寸。至于图片,请看一下Acrobat生成的报告:
它表示宽度/高度:2550/3300像素。
2550 / 8.5 = 300
3300/11 = 300
因此,分辨率为每英寸300像素。或者:完全按照您想要的方式创建PDF。
但是:您说打印文档时分辨率较差。这可能是由许多不同的原因引起的:也许您在大于8.5 x 11英寸的页面上进行打印,也许打印机无法以该分辨率进行打印,也许PDF查看器只能使用“降级打印”进行打印, ...
我的建议是,您使用不同的查看器在不同的打印机上测试此PDF,以找到罪魁祸首。