我想把2个pdf文件合并在一起 .
每个文件长一页 . 合并它们的原因是一个文件只是一个页脚 . 页脚需要附加到现有文件 .
我正在使用压模尝试合并2个文件 .
我成功创建了输出文件,但它没有页脚 . 它只是原始输入文件的副本 . 知道为什么他们不合并吗?
using (Stream inputPdfStream = new FileStream(inputFile, FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream inputPdfFooterStream = new FileStream(footerPdf, FileMode.Open, FileAccess.Read, FileShare.Read))
using (Stream outputPdfStream = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
{
var reader = new PdfReader(inputPdfStream);
var stamper = new PdfStamper(reader, outputPdfStream);
var pdfContentByte = stamper.GetOverContent(1);
stamper.FormFlattening = true;
stamper.Close();
}
1 回答
你的问题有不同的问题 .
Problem #1: 为什么要添加
stamper.FormFlattening = true;
行?你在使用表格吗?我没有看到你对表格做任何事情,那你为什么要压扁文件呢?Problem #2: 您说要将两个文档与
PdfStamper
合并 . 这是误导 . 合并文档是使用PdfCopy
完成的 . 根据您的解释,我认为您想要叠加两个文档 . 你是对的,你需要PdfStamper
才能这样做 .Problem #3: 您想使用包含页脚的特定文档作为公司信纸 . 在这种情况下,您希望在实际内容下添加信纸的内容 . 那你为什么要用
stamper.GetOverContent(1);
?请改用stamper.GetUnderContent(1);
.Problem #4: 您正在创建
inputPdfFooterStream
以使用页脚读取文档,但我没有看到您在任何地方使用该流 . 你能指望什么?Problem #5: 您没有阅读文档 . 这是你的主要问题 . 下载chapter 6 of my book(它已经在StackOverflow上的几十个答案中引用了它) . 转到第176页,其中显示"Adding company stationery to an existing document" . 该示例完全符合您的要求!
在您的代码中,您只有一个阅读器 . 在我的代码中,我还有一个名为
s_reader
的对象,该对象采用footerPdf
文档并允许您创建PdfImportedPage
:然后在实际文档的现有内容下添加此页面:
请注意,此示例假定两个文档具有相同的页面大小,并且具有实际内容的文档的坐标系的原点与左下角一致 . 如果您的PDF不是这种情况,则可能会出现页脚不可见或仅部分可见的情况 . 另外:如果具有实际内容的文档是不透明的,它也会使页脚不可见 .