如何通过VBA Access读取PDF文件内容并存储到变量中?
用VBA Access读取PDF内容并存入变量的正确方法
你当前的代码直接把PDF当作纯文本文件读取,这是行不通的——PDF本质是二进制容器格式,包含压缩、加密的文本和资源,用FileSystemObject读取只会得到乱码或无效内容。下面提供几种可行的解决方案:
方案1:使用Adobe Acrobat的VBA库(需安装Acrobat)
这是最可靠的方法,直接调用Acrobat官方API提取文本:
Sub ReadPDFWithAcrobat() Dim acroApp As Object Dim acroAVDoc As Object Dim acroPDDoc As Object Dim pdfText As String Dim form_filename As String form_filename = "你的PDF文件路径" '替换为实际文件路径 '初始化Acrobat对象 Set acroApp = CreateObject("AcroExch.App") Set acroAVDoc = CreateObject("AcroExch.AVDoc") '打开目标PDF If acroAVDoc.Open(form_filename, "") Then Set acroPDDoc = acroAVDoc.GetPDDoc() '提取PDF全部文本内容 pdfText = acroPDDoc.GetText() '可将文本存入变量按需处理,这里示例显示前500字符 MsgBox "提取的PDF文本:" & vbCrLf & Left(pdfText, 500) Else MsgBox "无法打开指定PDF文件" End If '清理对象释放资源 acroAVDoc.Close True acroApp.Exit Set acroPDDoc = Nothing Set acroAVDoc = Nothing Set acroApp = Nothing End Sub
方案2:使用免费第三方工具(无需Acrobat)
如果不想依赖Acrobat,可以借助Xpdf工具集里的pdftotext.exe,通过Shell命令调用提取文本:
Sub ReadPDFWithPdftotext() Dim pdfPath As String, txtPath As String Dim shellCmd As String Dim fso As Object, tStream As Object Dim pdfText As String pdfPath = "你的PDF文件路径" txtPath = Environ("TEMP") & "\temp_pdf_content.txt" '生成临时文本文件 '构造调用命令(确保pdftotext.exe在系统路径中,或指定完整路径) shellCmd = "pdftotext.exe """ & pdfPath & """ """ & txtPath & """" Shell shellCmd, vbHide '等待命令执行完成(可根据文件大小调整延时时长) Application.Wait Now + TimeValue("00:00:02") '读取临时文件中的文本内容 Set fso = CreateObject("Scripting.FileSystemObject") Set tStream = fso.OpenTextFile(txtPath, 1, False) pdfText = tStream.ReadAll() tStream.Close '删除临时文件 fso.DeleteFile txtPath '使用提取到的文本 MsgBox "提取的PDF文本:" & vbCrLf & Left(pdfText, 500) Set tStream = Nothing Set fso = Nothing End Sub
注意事项
- 方案1需要安装Adobe Acrobat(Reader版本不行,必须是Acrobat Pro或Standard),可在VBA中添加
Adobe Acrobat xx.x Type Library引用,或用示例中的后期绑定方式。 - 方案2需提前下载Xpdf工具集,将
pdftotext.exe放置在系统路径下,或在命令中指定其完整路径。 - 若PDF是加密文件或扫描生成的图片PDF,需要额外处理:加密PDF需先解密,图片PDF则要搭配OCR工具(如Tesseract)提取文本。
内容的提问来源于stack exchange,提问作者me ke
相关产品推荐
相关产品推荐

