iTextSharp如何将图像添加和提取到现有PDF中
本文关键字:PDF 提取 图像 添加 iTextSharp | 更新日期: 2023-09-27 18:21:24
我正在尝试将iTextSharp用于移动应用程序
所以我正在创建pdf文件,并将此pdf与图像一起附加,其中绝对位置是图像的高度/宽度
所以现在,我需要将图像(对于每个图像,我应该使用新页面)添加到我现有的pdf文件中,我也想知道如何从我的pdf文件提取这些图像!
目前,我试图通过压模:添加图像
using (System.IO.Stream inputPdfStream = new FileStream(PathOfPdf, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (System.IO.Stream inputImageStream = new FileStream(PathOfImage, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (System.IO.Stream outputPdfStream = new FileStream(PathOfPdf.Substring(0, PathOfPdf.Length - 4) + "T.pdf", FileMode.Create, FileAccess.Write, FileShare.None))
{
var reader = new PdfReader(inputPdfStream);
var stamper = new PdfStamper(reader, outputPdfStream);
var pdfContentByte = stamper.GetOverContent(1);
Image image = Image.GetInstance(inputImageStream);
image.SetAbsolutePosition(image.Width, image.Height);
pdfContentByte.AddImage(image);
stamper.Close();
}
}
}
问题是,新图像只是覆盖pdf的第一页并保存它
为什么会发生这种情况?此外,我如何从pdf文件中提取这些图像
谢谢
通常,我会将这个问题标记为重复问题,因为你的问题以前已经回答过,但你不是在问一个问题,而是在使用你的帖子问两个不同的问题时,我必须提供一个带有这两个问题答案链接的答案。我提前向SO用户道歉,他们认为之前已经回答的问题没有在SO上完成。
问题1:
问题是您的图像覆盖了现有内容,而不是出现在新页面上。
这是由于您故意在第1页上"盖章"图像造成的。您将获得一个画布,该画布使用stamper.GetOverContent(1);
表示页面1的内容,然后在现有内容之上添加内容。
事实上,你想插入一个新的页面,正如我在回答这个问题时所解释的"方法2":如何在现有的iText文档中添加封面/PDF
你想要这样的东西:
Image image = Image.GetInstance(inputImageStream);
stamper.insertPage(1, image);
PdfContentByte page1 = stamper.GetOverContent(1);
image.SetAbsolutePosition(0, 0);
page1.AddImage(image);
在第一行中,我们创建图像实例。在第二行中,我们在现有文档中插入一页。我们选择它作为第1页,并希望它具有与图像相同的大小(类Image
扩展了Rectangle
)。在第三行中,我们获取新(空白)页面1的内容。你写了"绝对位置是图像的高度/宽度!"我认为这是你的问题中的一个错误,因为这没有多大意义。我们希望在位置0添加图像,0。如果我们使用图像的宽度和高度,图像将不可见:它将被添加到页面的可见区域之外。
问题2:
如何从现有的PDF文档中提取图像?
请阅读以下内容的答案:
- 使用iTextSharp提取图像
- 使用iText从PDF坐标中提取图像
- 以PDF格式从特定页面提取图像