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

MK.*_*MK. 12 dpi itextsharp

我正在尝试使用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();
Run Code Online (Sandbox Code Playgroud)

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

我试过ScaleAbsolute,图像仍然呈现不正确的尺寸.

MK.*_*MK. 21

我忘了提到我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

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

alt text http://www.freeimagehosting.net/uploads/1c8287b8d9.png

注意:由于您可以创建任何所需尺寸的pdf文档,因此在打印文档时可能会导致缩放不正确.要解决这个问题,您需要做的就是在宽度和高度之间保持正确的纵横比[约1:1.4142](参见:纸张尺寸 - 国际标准:ISO 216).