将两个PDF页面合并在一起

时间:2013-07-11 08:57:37

标签: c# pdf itextsharp

我正在寻找合并两个pdf页面内容的方法。 它可能是水印,图像或其他任何东西。

方案如下: 我有一个Word-addin,允许用户根据几个模板表单为不同的客户创建不同的模板。对于每个新客户,用户可以提供包含标题图像/徽标和页脚的新信纸。这应该在运行时以任何方式应用。可能是直接加载到模板标题中的图像(然后我需要将pdf渲染到图像,因为信纸将主要以pdf文件形式提供)或导出文档时(合并信纸作为背景)

但用户无法访问该模板,因此必须以编程方式完成。

到目前为止,我尝试了Pdfsharp库,它既不支持我提供的背景版本,也不支持在Word 2007中创建的文档版本。 iTextSharp似乎非常有前途,但到目前为止我无法合并内容。 我也尝试了pdftk.exe,但即使我从命令行手动运行它,我也收到错误:“完成。输入错误,因此没有创建输出。”

如何处理并不重要,但输出很重要。

我忘了提及,在Word模板中创建了一条用于存档的白线,因此这部分可能不会被添加为图像,或者必须在文字之后添加到输出文档中。

提前致谢!

1 个答案:

答案 0 :(得分:2)

StampStationery.csWebified iTextSharp Examples中的一个样本,它本质上是书籍iText in Action — 2nd Edition中Java / iText样本的C#/ iTextSharp版本,确实显示了如何添加内容来自一个PDF文档的页面作为另一个PDF的每个页面内容背后的信息。

中心方法是:

public byte[] ManipulatePdf(byte[] src, byte[] stationery)
{
  // 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();   
  }
}  

此方法将操纵的PDF作为byte[].

返回