在itextsharp的5.4.2版中,我能够使用:( VB中的片段)
Dim pdfWriter As iTextSharp.text.pdf.PdfCopy
pdfwriter = New iTextSharp.text.pdf.PdfCopy(outputPDFDocument, New FileStream(destfname, FileMode.Create))
pdfWriter.CopyAcroForm(reader)
将表单从一个文档复制到另一个文档。
在5.4.4中CopyAcroForm
不再出现在PdfCopy
或其他任何地方 - 有什么替代方案?
答案 0 :(得分:14)
请阅读iText 5.4.4的发行说明。现在可以使用PdfCopy
使用addDocument()
方法合并包含AcroForm表单的PDF。此方法比copyAcroForm()
方法好得多,因为它还保留了结构化树根。如果您的表格可以访问,这一点很重要(参见第508节或PDF / UA标准)。
答案 1 :(得分:1)
AddDocument()方法很酷。这是我的代码,从asp.net中的SQL服务器读取和合并多个PDF。 document.Close()是将内容刷新到内存流所必需的。
enter code here
Document document = new Document();
MemoryStream output = new MemoryStream();
PdfCopy writer = new PdfCopy(document, output); // Initialize pdf writer
writer.SetMergeFields();
document.Open();
SqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
PdfReader reader = new PdfReader((Byte[])dr["ImageFile"]);
writer.AddDocument(reader);
}
dr.Close();
document.Close();
答案 2 :(得分:-1)
看起来您还需要调用.SetMergeFields(),否则它将无效:
reader = new PdfReader(path);
using (var document = new Document(reader.GetPageSizeWithRotation(1))) {
using (var outputStream = new FileStream(...)) {
using (var writer = new PdfCopy(document, outputStream)) {
writer.SetMergeFields();
document.Open();
//all pages:
writer.AddDocument(reader);
//Particular Pages:
//writer.AddDocument(reader, new List<int> { pageNumber });
}
}
}