我正在寻找合并两个pdf页面内容的方法。 它可能是水印,图像或其他任何东西。
方案如下: 我有一个Word-addin,允许用户根据几个模板表单为不同的客户创建不同的模板。对于每个新客户,用户可以提供包含标题图像/徽标和页脚的新信纸。这应该在运行时以任何方式应用。可能是直接加载到模板标题中的图像(然后我需要将pdf渲染到图像,因为信纸将主要以pdf文件形式提供)或导出文档时(合并信纸作为背景)
但用户无法访问该模板,因此必须以编程方式完成。
到目前为止,我尝试了Pdfsharp库,它既不支持我提供的背景版本,也不支持在Word 2007中创建的文档版本。 iTextSharp似乎非常有前途,但到目前为止我无法合并内容。 我也尝试了pdftk.exe,但即使我从命令行手动运行它,我也收到错误:“完成。输入错误,因此没有创建输出。”
如何处理并不重要,但输出很重要。
我忘了提及,在Word模板中创建了一条用于存档的白线,因此这部分可能不会被添加为图像,或者必须在文字之后添加到输出文档中。
提前致谢!
答案 0 :(得分:2)
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[].