【问题标题】:Automate Adobe PDF Form Import/Export data functions自动化 Adob​​e PDF 表单导入/导出数据功能
【发布时间】:2013-12-25 00:56:04
【问题描述】:

在Adobe Acrobat XI中,编辑PDF表单时,有以下功能

工具 -> 表单 -> 更多表单选项 -> 导入数据
工具 -> 表单 -> 更多表单选项 -> 导出数据

导入数据采用 XML 文件并将数据导入 PDF。 Export 显然会根据输入到当前表单的数据创建一个 XML 文件。

我需要在 .Net 应用程序中模拟此功能。 (最好是基于网络的)。

是否有任何第三方库(iTextSharp?)可以获取 PDF 文件和 XML 文件并输出已从 XML 导入数据的 PDF?还是使用 Acrobat 本机库最适合自动执行此操作?

有没有人有使用 3rd 方库或 Adob​​e 组件执行类似操作的示例?

注意:我需要从中导入/导出的 PDF 表单不是在内部创建的。具体来说,我需要使用专利局创建的 PDF 表单来执行此操作。 (SB08a 信息披露声明)

http://www.uspto.gov/patents/process/file/efs/guidance/updated_IDS.pdf

谢谢!

【问题讨论】:

标签: .net xml pdf pdf-generation itextsharp


【解决方案1】:

我发现我可以从 ITextSharp 库中获得所需的行为。

    /// <summary>
    /// Exports XFA data from a PDF File.
    /// </summary>
    /// <param name="populatedPDFForm">a readable stream of the PDF with a populated form</param>
    /// <returns>A stream containing the exported XML form data</returns>
    public static System.IO.MemoryStream Export(System.IO.Stream populatedPDFForm)
    {
        System.IO.MemoryStream outputStream = new System.IO.MemoryStream();
        using (iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(populatedPDFForm))
        {
            var settings = new System.Xml.XmlWriterSettings { Indent = true };
            using (var writer = System.Xml.XmlWriter.Create(outputStream, settings))
            {
                reader.AcroFields.Xfa.DatasetsNode.WriteTo(writer);
            }
        }
        return outputStream;
    }

    /// <summary>
    /// Imports XFA Data into a new PDF file.
    /// </summary>
    /// <param name="pdfTemplate">A PDF File with an unpopulated form.</param>
    /// <param name="xmlFormData">XFA form data in XML format.</param>
    /// <returns>a memorystream containing the new PDF file.</returns>
    public static System.IO.MemoryStream Import(System.IO.Stream pdfTemplate, System.IO.Stream xmlFormData)
    {
        System.IO.MemoryStream outputSteam = new System.IO.MemoryStream();
        using (iTextSharp.text.pdf.PdfReader reader = new iTextSharp.text.pdf.PdfReader(pdfTemplate))
        {
            using (iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, outputSteam))
            {
                stamper.Writer.CloseStream = false;
                stamper.AcroFields.Xfa.FillXfaForm(xmlFormData);
            }
        }
        return outputSteam;
    }

【讨论】:

  • 我尝试了这两个函数,Export() 工作正常,但在 Import() 中存在一个问题。我有相当复杂的 pdf 表格,在导入数据后,我试图打开它,但 Adob​​e Reader 宣布的文件已损坏。解决方案是通过在此行上扩展参数来允许压模附加到现有 pdf:using (iTextSharp.text.pdf.PdfStamper stamper = new iTextSharp.text.pdf.PdfStamper(reader, outputSteam, '\0', true))
猜你喜欢
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-21
相关资源
最近更新 更多