【问题标题】:Upgrading from iTextSharp to iText7从 iTextSharp 升级到 iText7
【发布时间】:2021-08-02 18:06:24
【问题描述】:

我正在更新我们的脚本以确保它们保持正常运行,并发现 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 中读取单个表单字段。提前致谢!

【问题讨论】:

  • 我刚刚注意到有多余的代码行并将其删除。它并没有改变我的问题,但它现在比原来精简了 1 行。

标签: powershell itext itext7


【解决方案1】:

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

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

【讨论】:

  • 我期待并害怕这种回应。你是对的,它仍然很简单,我只是不期待阅读表单的代码行数加倍。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 2017-11-17
  • 2020-04-17
  • 2013-07-01
  • 2020-09-15
  • 1970-01-01
  • 2018-12-19
相关资源
最近更新 更多