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

12

我正在尝试使用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个回答

23

我忘记提到我正在使用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;
}

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

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接