我正在使用iText将图像输出到PDF文件.图像总是看起来比它们应该的大.根据这本书(iText in Action),这是因为iText总是以72 dpi的分辨率显示图像,而不管图像的实际dpi属性是什么.本书建议使用image.getDpiX()来查找图像的dpi,然后使用image.scalePercent(72/actualDpi*100)正确显示图像.到目前为止,我所有图像的getDpiX()属性都返回0(我已经尝试了2个GIF和1个jpg).有没有其他方法可以找出实际的DPI,以便我的图像正确缩放?
com.lowagie.text.Image graphic = com.lowagie.text.Image.getInstance(imgPath);
float actualDpi = graphic.getDpiX();
if (actualDpi > 0)
//Never gets here
graphic.scalePercent(72f / actualDpi * 100);
Run Code Online (Sandbox Code Playgroud)
对于 GIF,文件中没有地方可以存储“DPI”信息,因此“actualDpi”在这种情况下没有任何意义。对于JPEG,“DPI”信息可以存储在文件中,但不是强制性的,如果不设置:“actualDPI”也没有意义。真正的答案是:不存在“实际 DPI”这样的东西,要么提供了信息(即“在该图像中,我希望使用该特定的物理宽度(或高度)渲染 1 个像素”),要么没有提供信息。你的句子中的另一个元素是:“总是显得比应有的大”;“应该”是图像中存储的 DPI 信息。因此,如果缺少此信息,并且您觉得当您打开图像时,它看起来就在屏幕上,那么您必须计算屏幕的密度(像素数宽度除以屏幕宽度(英寸)),并将其用作您的“actualDPI”变量。