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

发布于 2024-08-30 21:24:26 字数 1230 浏览 7 评论 0 原文

我正在尝试使用 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,但图像仍然以不正确的尺寸渲染。

I' am trying to add an image to a pdf using itextsharp, regardless of the image size it always appears to be mapped to a different greater size inside the pdf ?

The image I add is 624x500 pixel (DPI:72):

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

And here is a screen of the output pdf:

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

And here is how I created the document:

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();

Any idea on how to calculate the correct size ?

I alreay tried ScaleAbsolute and the image still renders with incorrect dimensions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

阿楠 2024-09-06 21:24:26

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

I forget to mention that I' am using itextsharp 5.0.2.

It turned out that PDF DPI = 110, which means 110 pixels per inch, and since itextsharp uses points as measurment unit then :

  • n pixels = n/110 inches.
  • n inches = n * 72 points.

Having a helper method to convert pixels to points is all I needed:

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

By using the above formula and passing a dpi value of 110 it worked perfectly:

Note: Since you can create pdf documents in any size you want, this may lead to incorrect scaling when printing out your documents. To overcome this issue all you need to do is to have the correct aspect ratio between width and height [approximately 1:1.4142] (see : Paper Size - The international standard: ISO 216 ).

oО清风挽发oО 2024-09-06 21:24:26

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

Multiply the image's height and width by 72 and divide them by the dpi(ppi): points = pixels * 72 / dpi.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文