如何使用itextsharp在pdf中计算正确的图像大小?

问题描述 投票:11回答:2

我正在尝试使用itextsharp将图像添加到pdf,无论图像大小如何,它总是显示为映射到pdf内的不同更大的尺寸?

我添加的图像是624x500像素(DPI:72):

alt text http://www.freeimagehosting.net/uploads/727711dc70.png

这是输出pdf的屏幕:

alt text http://www.freeimagehosting.net/uploads/313d49044d.png

这是我创建文档的方式:

Document document = new Document();                
                System.IO.MemoryStream stream = new MemoryStream();
                PdfWriter writer = PdfWriter.GetInstance(document, stream);
                document.Open();


                System.Drawing.Image pngImage = System.Drawing.Image.FromFile("test.png");
                Image pdfImage = Image.GetInstance(pngImage, System.Drawing.Imaging.ImageFormat.Png);


                document.Add(pdfImage);
                document.Close();

                byte[] buffer = stream.GetBuffer();
                FileStream fs = new FileStream("test.pdf", FileMode.Create);
                fs.Write(buffer, 0, buffer.Length);
                fs.Close();

有关如何计算正确尺寸的任何想法?

我已经尝试过ScaleAbsolute,图像仍然呈现不正确的尺寸。

itextsharp dpi
2个回答
20
投票

我忘了提到我正在使用itextsharp 5.0.2。

原来,PDF DPI = 110,这意味着每英寸110像素,并且因为itextsharp使用点作为测量单位,然后:

  • n像素= n / 110英寸。
  • n英寸= n * 72分。

有一个帮助方法将像素转换为点是我需要的:

public static float PixelsToPoints(float value,int dpi)
{
   return value / dpi * 72;
}

通过使用上面的公式并传递dpi值110,它完美地工作:

注意:由于您可以创建任何所需大小的pdf文档,因此在打印文档时可能会导致缩放不正确。要解决这个问题,您需要做的就是在宽度和高度之间保持正确的纵横比[约1:1.4142](参见:Paper Size - The international standard: ISO 216)。


0
投票

将图像的高度和宽度乘以72并将它们除以dpi(ppi):points = pixels * 72 / dpi

© www.soinside.com 2019 - 2024. All rights reserved.