我正在更新我们的脚本,以确保它们仍然有效,并发现iText7已经取代了iTextSharp。我的需求很简单:读取表单字段。相反,我知道如何读取表单字段,我只是检查一下是否有更简单的方法,因为它似乎在iTextSharp中更容易。
下面是我们在iTextSharp中使用的旧代码( $form通过一个foreach循环提供给$reader ):
#create pdf reader object and load form
$reader = New-Object iTextSharp.text.pdf.PdfReader -ArgumentList $form.PSPath.Replace("Microsoft.PowerShell.Core\FileSystem::","")
#Get the data I need
$First = $reader.AcroFields.GetField("FirstName")很简单。然而,当使用iText7时,它似乎失去了它的简单性。以下是我为iText7准备的内容:
#Create pdf reader and load form
$Reader = [iText.Kernel.Pdf.PdfReader]::new("C:\temp\TestForm.pdf")
#Create PDFDoc object?
$PdfDoc = [iText.Kernel.Pdf.PdfDocument]::new($Reader)
#What? Why?
$Form = [iText.Forms.PdfAcroForm]::getAcroForm($PdfDoc, $True)
#Get the data I need. Oh wait, I am unable to read it.
$fName = $Form.GetField("FirstName")
#Finally...
$First = $fName.GetValue()恐怕我没有任何机会研究简单的代码;每个人似乎都在即时创建web表单,或者解析数千个PDF以进行数据分析。我也只是个低级的SysAdmin,不是开发人员。请告诉我有一种更简单的方法来读取iText7中的单个表单域。提前感谢!
发布于 2021-08-05 18:09:29
简单性不一定是通过代码行数来衡量的。您在iText 7中读取表单域的方式是正确的。您需要更多行的原因是,iText 7在模块之间对代码的不同部分进行了更清晰的分离。与iText 5相比,这有很大的优势,并为用户代码的灵活性提供了更大的空间。
顺便说一句,无法调用$Form.GetField("FirstName").GetValue()是PowerShell的一个限制,与iText无关--您可以在C#或Java中使用这种链接。
https://stackoverflow.com/questions/68626161
复制相似问题