2

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

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

但是用户不能访问模板,因此必须以编程方式完成。

到目前为止,我尝试了 Pdfsharp 库,它既不支持我提供的背景文件的版本,也不支持我在 Word 2007 中创建的文档的版本。iTextSharp 看起来很有希望,但我无法设法合并内容。我也尝试了 pdftk.exe,但即使我从命令行手动运行它,我也收到错误:“完成。输入错误,所以没有创建输出。”

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

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

提前致谢!

4

1 回答 1

2

StampStationery.cs是Webified iTextSharp 示例中的一个示例,它本质上是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[].

于 2013-07-11T09:45:07.457 回答