itextsharp pdf合并表单数据丢失

时间:2014-12-07 21:57:14

标签: pdf pdf-generation itextsharp itext

我有两个Adobe生命周期设计表格" F1_0.pdf"和" F1_1.pdf"。两种形式都有一些表格数据。

我正在使用下面的代码(itextsharp v5.1.2)合并它们。它将它们合并到结果文件" Merged_Final.pdf"以良好的方式。我的问题是:Merged_Final.pdf文件只有第二个pdf的数据,即F1_1.pdf。 F1_0.pdf文件的数据消失了。 这是pdf file attachment. 那么,我怎么能摆脱这个问题呢。

public void CombineMultiplePDFs(string[] fileNames, string outFile)
    {
        // step 1: creation of a document-object
        Document document = new Document();

        // step 2: we create a writer that listens to the document
        PdfCopy writer = new PdfCopy(document, new FileStream(outFile, FileMode.Create));
        if (writer == null)
        {
            return;
        }

        // step 3: we open the document
        document.Open();

        foreach (string fileName in fileNames)
        {
            // we create a reader for a certain document
            PdfReader reader = new PdfReader(fileName);
            reader.ConsolidateNamedDestinations();

            // step 4: we add content
            for (int i = 1; i <= reader.NumberOfPages; i++)
            {
                PdfImportedPage page = writer.GetImportedPage(reader, i);
                writer.AddPage(page);
            }

            PRAcroForm form = reader.AcroForm;
            if (form != null)
            {
                writer.CopyAcroForm(reader);
            }

            reader.Close();
        }

        // step 5: we close the document and writer
        writer.Close();
        document.Close();
    }

1 个答案:

答案 0 :(得分:1)

也许您正在尝试做一些不可能的事情:

如果您的表单是纯XFA表单(如:动态,而不是混合,只包含XML),那么您正在尝试做一些不可能的事情:两种表单可能都有不同的数据描述(不同的{{ 1}})并且没有软件程序(甚至不是Adobe LiveCycle Designer)可以合并两种不兼容的XML类型。

如果您的表单是纯XFA表单,则唯一的选项是:

  • 首先填充它们,展平它们(=删除所有交互性)然后合并它们。
  • 创建一个新的XSD,它结合了两种表单的数据描述,并使用新的XSD作为数据源在Adobe LiveCycle Designer中手动创建新表单。

也许您正在尝试做一些可能的事情:

如果您的表单是混合表单(如:它们还包含基于.xsd技术的表单的说明),则应删除XFA部分并将PDF合并为纯AcroForm文档。如何做到这一点,在我对以下问题的回答中进行了解释:Whats the alternative to copyAcroForm?