iText7 在 VB.Net 中可用还是仅在 C# 中可用

Is iText7 available in VB.Net or only C#

我想从 pdf 文件中提取文本字段内容,这些文件具有我需要引入我的 Winforms 项目的文本字段。通过搜索,我找到了对 iTextSharp 的引用,但随后发现它已被 iText7 取代,但我阅读的所有内容都仅涉及它在 C# 中的使用。我的 winforms 项目是 vb。 非常感谢任何关于将数据导入我的项目的最佳选择的指示

如果它适用于 .NET,那么它适用于所有 .NET 语言。这是 .NET Framework 工作方式的有用之处之一 - 特定库或项目是用哪种编程语言编写的并不重要。一旦它被编译为 .NET 程序集 DLL,它就可以从任何其他 .NET 使用语言无关。

例如,如果 iTextSharp 或 iText7 可作为 Nuget 包使用(我相信它们是),那么它特别简单 - 您只需将包安装到您的 VB.NET 项目中并使用它。

您可能经常会发现使用示例是用一种特定语言编写的,但这并不意味着您不能使用不同的语言制作完全相同的 class 实例、方法调用等。如果您难以将代码示例从一种语言翻译成另一种语言,可以在线使用免费的自动代码转换器(尤其是在 C# 和 VB.NET 之间,反之亦然),它们通常可以为您完成 90-100% 的转换工作。

要使用 itext7 从 PDF 文件中提取文本,请尝试以下操作:

先决条件:Download/install NuGet 包itext7

添加以下导入语句:

Imports iText.Kernel.Pdf
Imports iText.Kernel.Pdf.Canvas.Parser.Listener
Imports iText.Kernel.Pdf.Canvas.Parser.PdfTextExtractor

GetTextFromPdf:

Public Function GetTextFromPdf(filename As String) As String
    Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder()

    Using doc As PdfDocument = New PdfDocument(New PdfReader(filename))
        'Dim strategy As LocationTextExtractionStrategy = New LocationTextExtractionStrategy()

        For i As Integer = 1 To doc.GetNumberOfPages() Step 1
            Dim page = doc.GetPage(i)
            'Dim text = iText.Kernel.Pdf.Canvas.Parser.PdfTextExtractor.GetTextFromPage(page, strategy)
            Dim text = GetTextFromPage(page)
            sb.AppendLine(text)
        Next
    End Using

    Return sb.ToString()
End Function

GetTextFromPdf 的代码改编自here

更新:

下面的代码显示了如何从 Pdf 文档中的 AcroForm 读取字段名称和字段值:

添加以下导入语句:

Imports iText.Forms
Imports iText.Kernel.Pdf

GetTextFromPdfFields

Public Function GetTextFromPdfFields(filename As String) As String
    Dim sb As System.Text.StringBuilder = New System.Text.StringBuilder()

    'create new instance
    Using doc As PdfDocument = New PdfDocument(New PdfReader(filename))

        'get AcroForm from document
        Dim form As PdfAcroForm = PdfAcroForm.GetAcroForm(doc, True)

        'get form fields
        Dim fieldDict As IDictionary(Of String, Fields.PdfFormField) = form.GetFormFields()

        'loop through form fields
        For Each kvp As KeyValuePair(Of String, Fields.PdfFormField) In fieldDict
            Dim type As PdfName = form.GetField(kvp.Key).GetFormType()
            Dim fieldName As PdfString = form.GetField(kvp.Key).GetFieldName()
            Dim fieldValue As String = form.GetField(kvp.Key).GetValueAsString()

            If fieldName IsNot Nothing Then
                'append data to instance of StringBuilder
                sb.AppendLine("Type: " & type.ToString() & " FieldName: " & fieldName.ToString() & " Value: " & fieldValue)
            End If
        Next
    End Using

    Return sb.ToString()
End Function

**注意:GetTextFromPdfFields 的代码改编自