首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个PDF页面重叠合并

将两个PDF页面重叠合并
EN

Stack Overflow用户
提问于 2013-07-11 16:57:37
回答 1查看 2.1K关注 0票数 2

我正在寻找一种方法来合并两个pdf页面的内容。它可能是一个水印,一张图片或者其他什么。

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

但是用户不能访问该模板,因此这必须通过编程来完成。

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

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

我忘了提一下,在Word-template中创建了一条白线用于存档,因此这部分可能不会作为图像添加,或者必须在输出文档中添加。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-11 17:45:07

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

核心方法是:

代码语言:javascript
复制
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[].返回。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17589177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档