我正在寻找一种方法来合并两个pdf页面的内容。它可能是一个水印,一张图片或者其他什么。
场景如下:我有一个Word插件,它允许用户基于几个模板表单为不同的客户创建不同的模板。对于每个新客户,用户可以提供包含标题图像/徽标和页脚的新信纸。这将在运行时以任何方式应用。可以是直接加载到模板标题中的图像(然后我需要将pdf渲染为图像,因为信纸大部分将作为pdf文件提供),或者在导出文档时(合并信纸作为背景)。
但是用户不能访问该模板,因此这必须通过编程来完成。
到目前为止,我尝试了Pdfsharp库,它既不支持我提供的背景文件的版本,也不支持我在Word 2007中创建的文档的版本。iTextSharp看起来很有前途,但到目前为止我还不能合并内容。我也尝试过pdftk.exe,但是即使当我从命令行手动运行它时,我也得到了错误:“完成。输入错误,所以没有创建输出。”
如何处理它并不重要,但输出很重要。
我忘了提一下,在Word-template中创建了一条白线用于存档,因此这部分可能不会作为图像添加,或者必须在输出文档中添加。
提前感谢!
发布于 2013-07-11 17:45:07
StampStationery.cs是一个来自Webified 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[].返回。
https://stackoverflow.com/questions/17589177
复制相似问题