【发布时间】:2013-12-31 21:32:04
【问题描述】:
所以我有一个相当基本的 iTextSharp 实现来创建 PDF。作为其中的一部分,需要读取任何“附加文档”并将其合并到生成的文档中。这很好用,只是我刚刚遇到了某人附加的文件,该文件破坏了所有内容。 PDF 仍会生成,但输出的文档仅显示第一页,并且 Adobe Reader 尝试查看第 2 - 7 页时会吐出错误(如果对任何人都有意义,则为 18)。
在第 8 页上是另一个在问题文档之前合并的文档,并且显示正常。然后导致问题的合并文档是下一个(25 页)并且 IT 显示正常。
但是合并该文档会破坏之前的页面。这真的很奇怪,因为我希望它会破坏在它之前合并的文档,以及第 1 页等......
我可以在文档中看到的唯一不同之处是正在合并的问题文档的第 2 页上有一张填写好的表格。我正在尝试让这里的一位比我更了解 PDF 的人给我一个没有该表格的人,以确保这是问题所在,但它似乎是我现在最好的候选人......
我尝试了以下方法(添加“删除任何表单”部分),但我仍然遇到问题。有什么想法吗?
var reader = new PdfReader(filePath);
// Remove any forms
if (reader.AcroForm != null)
{
var memStream = new MemoryStream();
var stamper = new PdfStamper(reader, memStream) { FormFlattening = true };
stamper.Close();
reader = new PdfReader(memStream.ToArray());
}
var numberOfPages = reader.NumberOfPages;
var cb = writer.DirectContent;
var i = 0;
while (i < numberOfPages)
{
i++;
document.SetPageSize(reader.GetPageSizeWithRotation(i));
document.NewPage();
var page = writer.GetImportedPage(reader, i);
var rotation = reader.GetPageRotation(i);
if (rotation == 90 || rotation == 270)
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
}
else
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
reader.Close();
【问题讨论】:
-
请提供相关文件。
标签: c# itextsharp