我正在寻找有关使用 Excel 或 Access 编写 vba 程序以查找文本并从 pdf 文件中提取文本字符串的信息。我不能使用 Adobe,因为它需要许可证,而我的公司不会购买任何许可证。因此,我搜索了其他软件来执行此操作,我发现 Nuance Power PDF 可能是一个不错的选择。它有可以使用的库。
问题是我无法在互联网上找到有关此接口的足够信息。
在此处超级用户这个问题以及这个 stackoverflow 问题,@Shodan @HackSlash @DaniRecFR31 讨论了一个名为“Power PDF 2 Automation interface.doc”的文档[电子邮件保护]
由于我在互联网上找不到有关 Power PDF 的更多信息,我想知道是否有人可以告诉我在哪里可以找到该文档。
此外,如果有人知道其他可以使用 pdf 和 vba 的软件,我们将不胜感激
答案1
首先我要感谢@ComputerVersteher 建议我使用 Xpdf。不幸的是,我也不能使用它,因为我的公司电脑不允许安装新软件。
我在网上找不到那个文档,我不知道原因。我继续搜索,发现 Nuance Power PDF 和 Adobe 有一个非常相似的库。我对 Adobe 工具和 javascript 一窍不通,但我可以从 pdf 中提取全文,开头是Adobe 解决方案在网上找到的。
使用 Adobe 的解决方案,我修改了参数,使其与 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
现在有了这个函数的输出,我可以搜索特定的文本并提取其他字符串,所以我最初的需求就解决了。