3

我使用了从 Adob​​e LiveCycle 设计器生成的简单动态 pdf 表单,并尝试使用以下代码使用 iTextSharp 5.0/5.5 版本读取该字段。

            string pdfTemplate = @"c:\ExpandingTextBox.pdf";
            PdfReader pdfReader = null;
            pdfReader = new PdfReader(pdfTemplate);                

            StringBuilder sb = new StringBuilder();
            foreach (var de in pdfReader.AcroFields.Fields)
            {
                sb.Append(de.Key.ToString() + Environment.NewLine);
            }               
            pdfReader.Close();

示例 PDF 可从以下链接下载:https ://forums.adobe.com/servlet/JiveServlet/download/2051245-11361/ExpandingTextBox.pdf

但是,即使我在 adobe live cycle 设计器中看到该字段,我总是得到零字段。我不确定我在这里做什么。非常感谢任何帮助。

4

2 回答 2

1

我使用 FillXfaForm 方法来填充动态 pdf 表单,如下所示。在执行此操作之前,您需要确保在 adobe live cycle 中创建动态 pdf 表单。

        string pdfTemplate = @"c:\test.pdf";
        string newFile = @"c:\new_test.pdf";
        string xmlForm = @"C:\fill_test.xml";

            PdfReader pdfReader = new PdfReader(pdfTemplate);
            PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(
                newFile, FileMode.Create));                
            pdfStamper.AcroFields.Xfa.FillXfaForm(xmlForm);
            pdfStamper.FormFlattening = false;

            pdfStamper.Close();
            pdfReader.Close();

如果有人需要帮助来理解这一点,请告诉我。

于 2014-08-12T12:05:46.650 回答
1

下面的代码示例是我用来从 I-9.pdf 政府就业表格中提取字段值的。这个 pdf 格式是 xfa 类似于上面接受的答案和评论。使用传统的 AcroFields.Fields 不适用于这种类型的 pdf 表单。

using System.Linq;
using iTextSharp.text.pdf;

namespace PdfFormReader
{
    class Program
    {
        static void Main(string[] args)
        {
            string pdfTemplate = @"C:\\forms\\i-9.pdf";
            PdfReader pdfReader = new PdfReader(pdfTemplate);
            var xfaFields = pdfReader.AcroFields.Xfa.DatasetsSom.Name2Node;

            foreach (var xmlNode in xfaFields)
            {
                Console.WriteLine(xmlNode.Value.Name+":"+xmlNode.Value.InnerText);
            }

            /*Example of how to get a field value*/
            var lastName = xfaFields.First(a => a.Value.Name == "textFieldLastNameGlobal").Value.InnerText;
            Console.ReadLine();
        }
    }
}
于 2016-12-02T16:34:53.267 回答