我正在尝试将高质量的图像放入PDF(每页一个)。但是如果我将页面大小设置为a4,我就必须调整图片的大小,因为它们太大了。然后他们就失去了自己的品质。有没有办法把大图片放到a4页面上而不影响质量?
我使用的是iTextSharp库,首先创建文档
document = new Document(PageSize.A4, 0, 0, 0, 0);
FileStream output = new FileStream(pdfPath + "document.pdf", FileMode.Create);
PdfWriter writer = PdfWriter.GetInstance(document, output);
document.Open();
然后我把每张图片加起来
document.Add(iTextSharp.text.Image.GetInstance(toSaveImage, System.Drawing.Imaging.ImageFormat.Tiff));
和关闭文档
document.Close();
首先让我澄清几个误解:
- PDF文件没有分辨率。花钱的人的评论是错误的。在PDF中没有DPI这样的东西。分辨率只有在PDF渲染时才会起作用(在屏幕上,在纸上,…),这就是为什么在PDF查看器中可能会有DPI(但这是完全不同的东西)。
- 当你在iTextSharp缩放
Image
对象时,你不会丢失任何信息:像素数量保持不变。而PDF没有分辨率,PDF中的图像有。当你缩小图像时(也就是说:你把相同数量的像素放在更小的画布上),分辨率会增加;当你按比例放大时,分辨率降低。
现在回答你的问题:你没有义务创建A4页面:
Image img =
iTextSharp.text.Image.GetInstance(toSaveImage,
System.Drawing.Imaging.ImageFormat.Tiff);
Rectangle pagesize = new Rectangle(img.ScaledWidth, img.ScaledHeight);
Document document = new Document(pagesize);
img.SetAbsolutePosition(0, 0);
document.Add(img);
我根据图像的缩放尺寸创建了Document
。不要让方法名误导您:在获取Image
的尺寸时,ScaledWidth
和ScaledHeight
是最安全的方法。它们不仅包括任何缩放操作,你可能已经在图像上做了,还考虑到旋转图像后所需的空间。
我已经将绝对位置设置为左下角。这比将页边距设置为0更安全。
EDIT:如果你不想改变页面大小,那么你必须使用ScaleToFit()
方法:
Image img =
iTextSharp.text.Image.GetInstance(toSaveImage,
System.Drawing.Imaging.ImageFormat.Tiff);
img.ScaleToFit(PageSize.A4);
注意,缩放到适合矩形对象的方法是在最新的iTextSharp版本中引入的。另一种方法是使用ScaleToFit()
方法,该方法需要矩形的宽度和高度。