我需要读取包含16页的PDF文件中的值。我没有创建PDF文件。表单从第3页开始,两个第一页只是文本。
我的iTextSharp DLL的版本是:5.5.10.0
当我运行这行代码(vb.net)时:
Try
Dim pdfTemplate As String = "D:\myFile.pdf"
Dim pdfReader As New PdfReader(pdfTemplate)
Dim pdfFields As AcroFields = pdfReader.AcroFields
Dim pdfVal As String = ""
For Each pdfField As KeyValuePair(Of String, AcroFields.Item) In pdfReader.AcroFields.Fields
pdfVal = pdfFields.GetField(pdfField.Key)
ShowMessage("KEY=[" & pdfField.Key & "]...VALUE=[" & pdfVal & "]", mINFO)
Next
Catch ex As Exception
ShowMessage(ex.ToString, mERROR)
End Try
pdfReader.NumberOfPages返回1.
所以我无法读取表格的价值。任何人都知道我为什么会这样做?
我用其他PDF文件测试了我的代码及其工作原理。我可以阅读所有页面和字段。这是我用于测试的完整代码段。它只是打开PDF并循环遍历字段。
Try
Dim pdfTemplate As String = "D:\myFile.pdf"
Dim pdfReader As New PdfReader(pdfTemplate)
Dim pdfFields As AcroFields = pdfReader.AcroFields
If pdfFields.Xfa.XfaPresent = True Then
Dim xmlDoc As New XmlDocument
xmlDoc.LoadXml(pdfFields.Xfa.DatasetsNode.OuterXml)
//Your code here to parse through xmlDoc
Else
MessageBox.Show("The file is not valid.")
End If
pdfReader.Close()
pdfReader.Dispose()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
有什么可以解释iText只读取第1页而不是PDF文件的其他15页?
有一点我注意到我能正确解析的PDF文件是版本6.虽然我遇到问题的PDF是版本7.这可能是原因吗?
iTextSharp是否可以将PDF保存为较低版本,然后重试读取?
感谢您的帮助。
正如KenS所说,我的PDF是XFA表格。这是我在XML Document对象中获取表单的代码
<scale
android:drawable="@drawable/shape_round"
android:scaleHeight="100%"
android:scaleGravity="bottom"/>