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

时间:2010-05-02 07:43:39

标签: itextsharp dpi

我正在尝试使用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时图像仍然呈现不正确的尺寸。

2 个答案:

答案 0 :(得分:20)

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

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

  • n像素= n / 110英寸。
  • n inches = 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)。

答案 1 :(得分:0)

将图像的高度和宽度乘以72,然后除以dpi(ppi):points = pixels * 72 / dpi