12

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

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

替代文字 http://www.freeimagehosting.net/uploads/727711dc70.png

这是输出pdf的屏幕:

替代文字 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 并且图像仍然以不正确的尺寸呈现。

4

2 回答 2

22

我忘了提到我正在使用 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)。

于 2010-05-04T09:34:54.400 回答
0

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

于 2018-03-21T11:19:08.840 回答