itextsharp 5.4.4 CopyAcroForm不再存在

时间:2013-11-23 12:24:17

标签: itextsharp

在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或其他任何地方 - 有什么替代方案?

3 个答案:

答案 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 });
        }
    }
}