繁体   English   中英

将2 pdf与itextsharp压模合并

[英]merge 2 pdf with itextsharp stamper

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

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

我正在使用一个压模尝试合并两个文件。

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

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

您的问题有不同的问题。

问题#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并非如此,则可能会出现页脚不可见或仅部分可见的情况。 另外:如果具有实际内容的文档是不透明的,也会使页脚不可见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM