我使用了从Adobe 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 designer中的字段,我也总是得到零字段。我不确定我在这做什么。非常感谢任何帮助。
答案 0 :(得分: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();
如果有人需要帮助来理解这一点,请告诉我。
答案 1 :(得分:1)
下面的代码示例是我用来从I-9.pdf gov't就业表单中提取字段值的方法。此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();
}
}
}