如何使用 itextsharp 计算 pdf 中正确的图像大小?
我正在尝试使用 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,但图像仍然以不正确的尺寸渲染。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我忘了提及我正在使用 itextsharp 5.0.2。
事实证明,PDF DPI = 110,这意味着每英寸有 110 个像素,并且由于 itextsharp 使用点作为测量单位,因此:
我只需要一个将像素转换为点的辅助方法:
通过使用上述公式并传递 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 :
Having a helper method to convert pixels to points is all I needed:
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 ).
将图像的高度和宽度乘以 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
.