6

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

1 回答 1

8

首先让我澄清几个误解:

  • 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()方法是使用需要矩形宽度和高度的方法。

于 2013-06-07T06:20:58.237 回答