iTextSharp 如何向现有 PDF 添加和提取图像

iTextSharp how to Add and Extract image to existing PDF

我正在尝试将 iTextSharp 用于移动应用程序。
所以我正在创建 pdf 文件并将此 pdf 附加图像,其中绝对位置是图像的 Height/Width!
所以现在,我需要将图像(对于每个图像我应该使用新页面)添加到我现有的 pdf 文件中,我也想知道如何从我的 PDF 文件中提取这些图像!

目前我尝试通过 stamper 添加图像:

 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 文件中提取这些图像!?
谢谢!!

通常,我会把这个问题标记为重复,因为你的问题之前已经回答过,但你不是在问一个问题,而是用你的post问两个不同的问题,我有提供带有这两个问题答案链接的答案。我提前向考虑回答之前已回答的问题的 SO 用户表示歉意。

问题 #1:

问题是您的图片覆盖了现有内容,而不是出现在新页面上。

这是因为您故意 "stamp" 第 1 页上的图像。您使用 stamper.GetOverContent(1); 得到代表第 1 页内容的 canvas 然后添加现有内容之上的内容。

实际上,您想要插入一个新页面,正如我在 "approach 2" 回答这个问题时所解释的那样:

你想要这样的东西:

Image image = Image.GetInstance(inputImageStream);
stamper.insertPage(1, image);
PdfContentByte page1 = stamper.GetOverContent(1);
image.SetAbsolutePosition(0, 0);
page1.AddImage(image);

在第一行,我们创建图像实例。在第二行中,我们向现有文档插入一个页面。我们选择它作为第 1 页,我们希望它具有与图像相同的大小 (class Image extends Rectangle)。在第三行中,我们获取新(空白)页面 1 的内容。您写了 "where absolution position is Height/Width of image!" 我认为这是您问题中的一个错误,因为这没有多大意义。我们想在位置 0, 0 添加图像。如果我们使用图像的宽度和高度,图像将不可见:它会被添加到页面的可见区域之外。

问题 #2:

如何从现有的 PDF 文档中提取图像?

请阅读以下问题的答案:

  • Extract images using iTextSharp
  • Extract Images from PDF coordinates using iText
  • Extract Image from a particular page in PDF
  • ...