c#PDF格式的高分辨率图像

时间:2013-06-06 19:01:17

标签: c# image pdf itextsharp

我正在尝试将高质量的图像放入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();

1 个答案:

答案 0 :(得分:6)

首先让我澄清一些误解:

  • 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。不要让方法名称误导您:ScaledWidthScaledHeight是获取Image维度时最安全的方法。它们不仅包括您在图像上完成的任何缩放操作,还会在旋转图像后考虑图像所需的空间。

我将绝对位置设置在左下角。这比将页边距设置为0更安全。

编辑:如果您不想更改页面大小,则必须使用ScaleToFit()方法:

Image img =
    iTextSharp.text.Image.GetInstance(toSaveImage,
        System.Drawing.Imaging.ImageFormat.Tiff);
img.ScaleToFit(PageSize.A4);

请注意,在最新的iTextSharp版本中引入了缩放以适合Rectangle对象的方法。另一种方法是使用需要矩形宽度和高度的ScaleToFit()方法。