C#如何在PDF中插入高分辨率的图片

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();

1
提高您的PDF文件的DPI? - spender
但我该如何做到这一点呢? - Com Piler
我不知道,因为你的问题只是稍微不够好,可能会被踩。你是如何制作PDF的?你是如何“放置”你的图片的?你使用了哪些库?编辑你的问题,提供一些代码,也许有人能够帮助你。 - spender
好的,我已经按照您所说的修改了我的问题。 - Com Piler
1个回答

9

首先,让我澄清一些误解:

  • PDF文档没有分辨率。spender的评论是错误的。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中引入的。另一种方法是使用ScaleToFit()方法,该方法需要矩形的宽度和高度作为参数。

好的,但我正在使用A4纸张,因为如果不这样做,我的打印机只会打印部分页面。我知道我可以在打印机设置中更改它,但由我的程序创建的PDF文档将在许多打印机上打印,我不希望每个打印我的文档的人都必须更改打印机设置...我该如何实现它? - Com Piler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接