【问题标题】:Is iText7 available in VB.Net or only C#iText7 在 VB.Net 中可用还是仅在 C# 中可用
【发布时间】:2021-08-26 15:44:50
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过在您的 VB 项目中安装相应的 nuget 包?
  • .net 库不依赖于语言。如果它是一个 .net 库,您可以使用 c# 或 vb.net。也许您只找到了 c# 中的示例代码,因为它更流行,并且作者不想费力地提供每种支持的语言的示例代码。
  • 没有“C# 库”,只有“.NET 库”,它们适用于编译到 .NET Framework(或 .NET Core)的任何语言。尽管示例和文档可能在 C# 上,但它在 VB.NET(或 F#、IronPython 或任何其他 .NET 语言)中的工作方式完全相同。

标签: c# .net vb.net itext itext7


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    先决条件:下载/安装 NuGet 包itext7

    添加以下 Imports 语句:

    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 语句:

    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 代码改编自here

    【讨论】:

    • 嗨@user9938,我已经完成了通过Nuget加载iText7的过程,但没有找到任何有效的代码。谢谢你的代码对我来说是一个很好的开始,但是当我需要的是 pdf 字段中的文本时,我现在可以从 pdf 中获取文本。请问你能帮忙吗?
    • 谢谢我的新英雄。关于字段的最后一个问题。当字段为多行时,是否有一种简单的方法来确定换行符?
    • 我发现以下似乎工作正常。尚未对多种场景进行广泛测试,但现在它可以工作 txtAbouMe.Text = Replace(AboutMe, Chr(13), vbCrLf)
    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多