从 iTextSharp 升级到 iText7

Upgrading from iTextSharp to iText7

我正在更新我们的脚本以确保它们保持功能,并发现 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 以进行数据分析。我也只是一个低级的系统管理员,而不是开发人员。请告诉我在 iText7 中阅读单个表单字段有更简单的方法。提前致谢!

简单不一定用代码行数来衡量。您在 iText 7 中阅读表单字段的方式是正确的。您需要多几行的原因是 iText 7 对跨模块的代码的不同部分进行了更清晰的分离。这与iText 5相比有很大的优势,为用户代码提供了更大的灵活性空间。

顺便说一句,无法调用 $Form.GetField("FirstName").GetValue() 是 PowerShell 的限制,与 iText 无关 - 您可以在 C# 或 Java.[=11= 中使用这种链接]