如何使用itextsharp阅读marge可填写的pdf数据

时间:2018-04-13 14:21:44

标签: c# itext

我有两个可填写的pdf文件并完成了将这些pdf合并为一个pdf的代码。以下是我的代码。

public void PDFSplit()
{
    List<string> files=new List<string>();
    files.Add(Server.MapPath("~/Template/sample_pdf.pdf"));
    files.Add(Server.MapPath("~/Template/temp/sample_pdf.pdf"));
    //call method
    Merge(files, Server.MapPath("~/Template/sample_pdf_123.pdf"));
}

//Merge pdf
public  void Merge(List<String> InFiles, String OutFile)
{
    using (FileStream stream = new FileStream(OutFile, FileMode.Create))
    using (iTextSharp.text.Document doc = new iTextSharp.text.Document())
    using (PdfCopy pdf = new PdfCopy(doc, stream))
    {
        doc.Open();

        PdfReader reader = null;
        PdfImportedPage page = null;

        InFiles.ForEach(file =>
        {
            reader = new PdfReader(file);

            for (int i = 0; i < reader.NumberOfPages; i++)
            {
                page = pdf.GetImportedPage(reader, i + 1);
                pdf.AddPage(page);
            }

            pdf.FreeReader(reader);
            reader.Close();
        });
    }
}

代码工作正常,但问题是当我尝试读取新生成的合并文件时,它没有使用AcroFields显示字段。

//To read pdf data
PdfReader reader = null;

reader = new PdfReader(Server.MapPath("~/Template/sample_pdf_123.pdf"));

AcroFields pdfFormFields = reader.AcroFields;

1 个答案:

答案 0 :(得分:0)

您无法 marge易错 PDF文件,因为您使用的是旧版iText。请升级到iText 7 for .NET并阅读iText 7 jump-start tutorial,更具体地说,请chapter 6说明:

合并表格

这就是它的完成方式:

PdfDocument destPdfDocument = new PdfDocument(new PdfWriter(dest));
PdfDocument[] sources = new PdfDocument[] {
    new PdfDocument(new PdfReader(SRC1)),
    new PdfDocument(new PdfReader(SRC2)) };
PdfPageFormCopier formCopier = new PdfPageFormCopier();
foreach (PdfDocument sourcePdfDocument in sources) {
    sourcePdfDocument.CopyPagesTo(1,
        sourcePdfDocument.GetNumberOfPages(), destPdfDocument, formCopier);
    sourcePdfDocument.Close();
}
destPdfDocument.Close();