c#高分辨率图像的PDF



我正在尝试将高质量的图像放入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的尺寸时,ScaledWidthScaledHeight是最安全的方法。它们不仅包括任何缩放操作,你可能已经在图像上做了,还考虑到旋转图像后所需的空间。

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

EDIT:如果你不想改变页面大小,那么你必须使用ScaleToFit()方法:

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

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

相关内容

  • 没有找到相关文章

最新更新