我正在尝试使用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时图像仍然呈现不正确的尺寸。
答案 0 :(得分:20)
我忘记提到我正在使用itextsharp 5.0.2。
原来,PDF DPI = 110,这意味着每英寸110像素,并且因为itextsharp使用点作为测量单位,所以:
我需要一个将像素转换为点的辅助方法:
public static float PixelsToPoints(float value,int dpi)
{
return value / dpi * 72;
}
通过使用上面的公式并传递dpi值为110,它完美地运作:
注意:由于您可以创建任何所需尺寸的pdf文档,因此在打印文档时可能会导致缩放比例不正确。要解决这个问题,您需要做的就是在宽度和高度之间保持正确的纵横比[大约1:1.4142](参见:Paper Size - The international standard: ISO 216)。
答案 1 :(得分:0)
将图像的高度和宽度乘以72,然后除以dpi(ppi):points = pixels * 72 / dpi
。