所以我有一个相当基本的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();
答案 0 :(得分:1)
请阅读chapter 6 of my book,您会注意到使用PdfWriter
连接(或合并)PDF文档是错误的。使用PdfCopy
完成连接PDF。
如果要合并的文档包含AcroForm表单,则本书建议使用PdfCopyFields
。在更新版本的iTextSharp中,不推荐PdfCopyFields
使用此处所述的方法:copy pdf form with PdfCopy not working in itextsharp 5.4.5.0
没有例子,没有人能够给你更好的答案。您需要共享一些导致问题的PDF。