早上好.我希望有人可以在这个主题上为我提供帮助.去年,我使用iTextSharp设置了VB.NET程序,用户可以在其中输入信息以填充I9,然后该信息将填充PDF并进行打印.有了新的I9,我遇到了无法确定的困难.
首先,代码不会出错,也不会出错.我得到的结果很差,因为没有填写表格,而是得到一个PDF,其中显示“您要加载的文档需要Adobe Reader 8或更高版本.您可能未安装Adobe Reader …”等.因此,我确保我拥有最新的Reader版本,再试一次,结果相同.
考虑到字段名称结构可能有所变化,我尝试第一次阅读格式/字段. (下面的代码).但是,现在它告诉我没有要读取的字段(AcroFields.Fields.Count = 0).
Private Sub ListFieldNames(pdfTemplate As String)
Dim pdfTemplate As String = "c:/Temp/PDF/fw4.pdf"
Dim pdfReader As PdfReader = New PdfReader(pdfTemplate)
Dim de As KeyValuePair(Of String, iTextSharp.text.pdf.AcroFields.Item)
For Each de In pdfReader.AcroFields.Fields
Console.WriteLine(de.Key.ToString())
Next
End Sub
因此,我开始进行一些搜索,并找到了他们可能已经切换到的另一种PDF结构的参考; XFA.老实说,我仍然没有找到令人满意的文档/样本,但是我确实找到了一些似乎可以在XFA PDF的结构中读取的代码. (下面的代码).我尝试过实际上有2种不同的方法.第一个本质上表明xfaFields中没有xmlNodes.第二个确实找到了一个名为“数据”的节点(这是它找到的唯一一个节点),但是没有找到任何子节点.
Private Sub ReadXfa(pdfTemplate As String)
pdfReader.unethicalreading = True
Dim readerPDF As New PdfReader(pdfTemplate)
Dim xfaFields = readerPDF.AcroFields.Xfa.DatasetsSom.Name2Node
For Each xmlNode In xfaFields
Console.WriteLine(xmlNode.Value.Name + ":" + xmlNode.Value.InnerText)
Next
'Example of how to get a field value
' Dim lastName = xfaFields.First(Function(a) a.Value.Name = "textFieldLastNameGlobal").Value.InnerText
Dim reader As New PdfReader(pdfTemplate)
Dim xfa As New XfaForm(reader)
Dim node As XmlNode = xfa.DatasetsNode()
Dim list As XmlNodeList = node.ChildNodes()
For i As Integer = 0 To list.Count - 1
Console.WriteLine(list.Item(i).LocalName())
If "data".Equals(list.Item(i).LocalName()) Then
node = list.Item(i)
Exit For
End If
Next
list = node.ChildNodes()
For i As Integer = 0 To list.Count - 1
Console.WriteLine(list.Item(i).LocalName())
Next
reader.Close()
End Sub
https://www.uscis.gov/system/files_force/files/form/i-9.pdf?download=1
上面的链接转到了政府提供的i9 PDF.
所以…我想我有多个问题.最简单的是是否有人完成了此过程/他们是否可以帮助我.除非有人能为我指出有关如何从这个新的PDF文件读取/写入的正确方向,否则那将是惊人的.坦率地说,我什至不确定如何确定他们使用的表单的“类型”-AcroField,XFA,还有其他功能吗?
非常感谢您的时间/帮助!