merge 2 pdf with itextsharp stamper

本文关键字:itextsharp stamper with pdf merge | 更新日期: 2023-09-27 18:06:59

我想把2个pdf文件合并在一起。

每个文件是一页长。合并它们的原因是一个文件只是一个页脚。页脚需要附加到现有文件。

我正在使用stamper来尝试合并两个文件。

我成功地创建了输出文件,但是它没有页脚。它只是原始输入文件的副本。知道它们为什么不合并吗?

using (Stream inputPdfStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream inputPdfFooterStream = new FileStream(footerPdf, FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream outputPdfStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
    var reader = new PdfReader(inputPdfStream);
    var stamper = new PdfStamper(reader, outputPdfStream);
    var pdfContentByte = stamper.GetOverContent(1);
    stamper.FormFlattening = true;
    stamper.Close();
}

merge 2 pdf with itextsharp stamper

你的问题有不同的问题。

问题1:为什么添加stamper.FormFlattening = true;行?您正在使用表单吗?我没见过你对表单做什么,为什么要把文档弄平呢?

问题#2:你说你想PdfStamper合并两个文档。这是一种误导。合并文档由PdfCopy完成。从你的解释中,我推断你是想要叠加两个文档。你是对的,你需要PdfStamper这样做。

问题#3:您希望使用包含页脚的特定文档作为公司文具。在这种情况下,您希望将文具的内容添加到的实际内容之下。那你为什么要用stamper.GetOverContent(1); ?用stamper.GetUnderContent(1);代替。

问题#4:您正在创建一个inputPdfFooterStream来读取带有页脚的文档,但我没有看到您在任何地方使用该流。你想要什么?

问题#5:没有阅读文档。这是你的主要问题。下载我的书的第6章(它是免费的,我已经在StackOverflow上的几十个答案中引用了它)。翻到176页,上面写着"将公司文具添加到现有文件中"。这个例子完全符合您的要求!

// Create readers
PdfReader reader = new PdfReader(src);
PdfReader s_reader = new PdfReader(stationery);
using (MemoryStream ms = new MemoryStream()) {
  // Create the stamper
  using (PdfStamper stamper = new PdfStamper(reader, ms)) {
    // Add the stationery to each page
    PdfImportedPage page = stamper.GetImportedPage(s_reader, 1);
    int n = reader.NumberOfPages;
    PdfContentByte background;
    for (int i = 1; i <= n; i++) {
      background = stamper.GetUnderContent(i);
      background.AddTemplate(page, 0, 0);
    }
  } 
  return ms.ToArray();   
}

在你的代码中,你只有一个阅读器。在我的代码中,我还有一个名为s_reader的对象,它接受footerPdf文档,并允许您创建PdfImportedPage:

PdfImportedPage page = stamper.GetImportedPage(s_reader, 1);

然后将该页添加到实际文档的现有内容下面:

background = stamper.GetUnderContent(i);
background.AddTemplate(page, 0, 0);

注意,这个示例假设两个文档具有相同的页面大小,并且文档与实际内容的坐标系统的原点与左下角一致。如果您的pdf不是这种情况,您可能会遇到页脚不可见或仅部分可见的情况。另外:如果文档的实际内容是不透明的,它也会使页脚不可见。