如何合并2个PDF并保持生成的文件可编辑?

时间:2014-09-12 17:08:00

标签: c# itextsharp

我们正在使用iText以预先存在的(可编辑的)PDF格式填充数据。在将数据标记到表单中之后,我们将第二个PDF文档(通常是平面扫描的PDF)与表单合并,并希望生成的文档保持可编辑状态。邮票&如果我们展平生成的文件,合并过程工作正常。我们认为它就像删除.FormFlattening = true一样简单,但是在生成的文件中,数据现在不会在表单中标记,并且生成的文档也不可编辑。

我们是否需要在合并之前将表单字段添加到第二个文档或以某种方式(以编程方式)将其更改为可编辑文档?

using (var fs = new FileStream(filePathOfPDF, FileMode.Open, FileAccess.Read))
{
    var a = new List<byte[]>();
    a.Add(ReadFully(workingStream));
    a.Add(ReadFully(fs));
    var test = PdfManager.MergePdfForms(a);
    var asdf = test.DuplicateStream();
    return asdf;
}

public static MemoryStream MergePdfForms(List<byte[]> files)
{
    if (files.Count > 1)
    {
        PdfReader pdfFile;
        Document doc;
        PdfWriter pCopy;
        MemoryStream msOutput = new MemoryStream();

        pdfFile = new PdfReader(files[0]);

        doc = new Document();
        pCopy = new PdfSmartCopy(doc, msOutput);
        doc.Open();

        for (int k = 0; k < files.Count; k++)
        {
            pdfFile = new PdfReader(files[k]);


            for (int i = 1; i < pdfFile.NumberOfPages + 1; i++)
            {
                ((PdfSmartCopy)pCopy).AddPage(pCopy.GetImportedPage(pdfFile, i));
            }
            pCopy.FreeReader(pdfFile);
        }

        pdfFile.Close();
        pCopy.Close();
        doc.Close();

        return msOutput;
    }
    else if (files.Count == 1)
    {
        return new MemoryStream(files[0]);
    }

    return null;
}

0 个答案:

没有答案