使用 vba 通过 Naunce Power PDF 从 PDF 中提取文本

使用 vba 通过 Naunce Power PDF 从 PDF 中提取文本

我正在寻找有关使用 Excel 或 Access 编写 vba 程序以查找文本并从 pdf 文件中提取文本字符串的信息。我不能使用 Adob​​e,因为它需要许可证,而我的公司不会购买任何许可证。因此,我搜索了其他软件来执行此操作,我发现 Nuance Power PDF 可能是一个不错的选择。它有可以使用的库。

问题是我无法在互联网上找到有关此接口的足够信息。

在此处超级用户这个问题以及这个 stackoverflow 问题,@Shodan @HackSlash @DaniRecFR31 讨论了一个名为“Power PDF 2 Automation interface.doc”的文档[电子邮件保护]

由于我在互联网上找不到有关 Power PDF 的更多信息,我想知道是否有人可以告诉我在哪里可以找到该文档。

此外,如果有人知道其他可以使用 pdf 和 vba 的软件,我们将不胜感激

答案1

首先我要感谢@ComputerVersteher 建议我使用 Xpdf。不幸的是,我也不能使用它,因为我的公司电脑不允许安装新软件。

我在网上找不到那个文档,我不知道原因。我继续搜索,发现 Nuance Power PDF 和 Adob​​e 有一个非常相似的库。我对 Adob​​e 工具和 javascript 一窍不通,但我可以从 pdf 中提取全文,开头是Adobe 解决方案在网上找到的。

使用 Adob​​e 的解决方案,我修改了参数,使其与 Nuance Power PDF 配合使用,并获取一个数组,其中每个索引包含每页的文本。我唯一不喜欢的是每个段落的回车符没有导出,但对于我最初的目的来说,这样就足够了。

Sub test()
    Dim Path As String
    Path = "C:\Users\unername\Desktop\doc.pdf"
    TextInArray = ExtractTextFromPDF_WithNuancePowerPDF(Path)
End Sub

Function ExtractTextFromPDF_WithNuancePowerPDF(FullPath As String)
    Dim PowerApp As app
    Dim PowerDVDoc As DVDoc
    Dim PowerDDDoc As DDDoc
    Dim jso As Object

    Dim nPalabra As Integer
    Dim iPalabra As Integer
    Dim nPagina As Integer
    Dim iPagina As Integer
    Dim Palabra As String
    Dim TextoPagina() As String

    Set PowerApp = CreateObject("NuancePDF.App")
    Set PowerDVDoc = CreateObject("NuancePDF.DVDoc")
    PowerApp.Show

    If PowerDVDoc.Open(FullPath) = True Then
        PowerDVDoc.BringToFront
        Set PowerDDDoc = PowerDVDoc.GetDDDoc
        Set jso = PowerDDDoc.GetJSObject
        nPagina = PowerDDDoc.GetNumPages
        ReDim TextoPagina(nPagina)
        For iPagina = 0 To nPagina - 1
            nPalabra = jso.getPageNumWords(iPagina)
            For iPalabra = 0 To nPalabra - 1
                Palabra = jso.getPageNthWord(iPagina, iPalabra, False) ' if the last parameter is set to True, it avoids certain characters like dash os blank spaces etc
                TextoPagina(iPagina) = TextoPagina(iPagina) & Palabra
            Next
            Debug.Print TextoPagina(iPagina)
        Next
    End If
    Set PowerDVDoc = Nothing
    PowerApp.Exit
    Set PowerApp = Nothing
    ExtractTextFromPDF_WithNuancePowerPDF = TextoPagina
End Function

现在有了这个函数的输出,我可以搜索特定的文本并提取其他字符串,所以我最初的需求就解决了。

相关内容