我正在尝试将高质量的图像放入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();
答案 0 :(得分:6)
首先让我澄清一些误解:
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
。不要让方法名称误导您:ScaledWidth
和ScaledHeight
是获取Image
维度时最安全的方法。它们不仅包括您在图像上完成的任何缩放操作,还会在旋转图像后考虑图像所需的空间。
我将绝对位置设置在左下角。这比将页边距设置为0更安全。
编辑:如果您不想更改页面大小,则必须使用ScaleToFit()
方法:
Image img =
iTextSharp.text.Image.GetInstance(toSaveImage,
System.Drawing.Imaging.ImageFormat.Tiff);
img.ScaleToFit(PageSize.A4);
请注意,在最新的iTextSharp版本中引入了缩放以适合Rectangle对象的方法。另一种方法是使用需要矩形宽度和高度的ScaleToFit()
方法。