You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MS Access中自动合并PDF?Access2010适配64位Win10的替代方案

免费替代方案解决Access 2010在64位Win10下合并PDF的问题

我之前也踩过64位Windows系统下Access调用32位第三方DLL的坑,给你几个不用掏钱包的可行方案:

方案1:使用开源免费的Ghostscript命令行工具

Ghostscript是完全免费的开源工具,原生支持PDF合并,步骤很简单:

  • 下载匹配你64位Win10的Ghostscript版本安装(如果你的Access是32位,就选32位Ghostscript,避免位数不兼容)
  • 在Access VBA里用Shell函数调用其命令行命令完成合并,示例代码:
Sub MergePDFsWithGhostscript()
    Dim gsPath As String
    Dim inputFiles As String
    Dim outputFile As String
    
    ' 替换为你的Ghostscript实际安装路径
    gsPath = "C:\Program Files\gs\gs10.02.0\bin\gswin64c.exe"
    ' 要合并的PDF列表,路径带空格的话用双引号包裹
    inputFiles = """C:\我的PDF\文件1.pdf"" ""C:\我的PDF\文件2.pdf"""
    ' 合并后的输出文件路径
    outputFile = """C:\我的PDF\合并完成.pdf"""
    
    ' 构建Ghostscript命令参数:-dBATCH -dNOPAUSE 执行后自动退出,-sDEVICE=pdfwrite 指定输出为PDF
    Dim cmd As String
    cmd = gsPath & " -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=" & outputFile & " " & inputFiles
    
    ' 后台执行命令,不显示命令行窗口
    Shell cmd, vbHide
End Sub

方案2:利用Office自身的Word对象模型(无需额外软件)

如果你电脑装了Word 2010或更高版本,可以直接通过VBA调用Word来合并PDF,不用额外装工具:

  • 思路是让Word逐个打开PDF文件,把内容复制到一个新文档,最后导出成PDF
  • 示例代码:
Sub MergePDFsWithWord()
    Dim wordApp As Object
    Dim newDoc As Object
    Dim file As Variant
    Dim filesToMerge As Variant
    
    ' 要合并的PDF文件数组,可根据自己需求修改
    filesToMerge = Array("C:\我的PDF\文件1.pdf", "C:\我的PDF\文件2.pdf")
    
    Set wordApp = CreateObject("Word.Application")
    wordApp.Visible = False ' 后台运行,不弹出Word窗口
    Set newDoc = wordApp.Documents.Add
    
    For Each file In filesToMerge
        ' 打开PDF文件(Word 2010及以后支持直接打开PDF)
        Dim tempDoc As Object
        Set tempDoc = wordApp.Documents.Open(file, ReadOnly:=True)
        
        ' 复制当前PDF的所有内容到新文档
        tempDoc.Content.Copy
        newDoc.Content.Paste
        
        tempDoc.Close SaveChanges:=False
        Set tempDoc = Nothing
    Next file
    
    ' 导出合并后的文档为PDF(17对应Word的wdExportFormatPDF常量)
    newDoc.ExportAsFixedFormat OutputFileName:="C:\我的PDF\合并完成.pdf", _
        ExportFormat:=17
    
    newDoc.Close SaveChanges:=False
    wordApp.Quit
    Set newDoc = Nothing
    Set wordApp = Nothing
    
    MsgBox "PDF合并完成!"
End Sub

注:这个方法对复杂格式的PDF(比如带大量矢量图、特殊字体)可能有轻微格式偏差,但常规文档完全够用。

方案3:适配64位环境的DynaPDF.dll调用

如果你还是想用Leban的原思路,问题大概率是原DynaPDF.dll是32位,和64位系统/64位Access不兼容:

  • 找64位版本的DynaPDF.dll(注意确认许可,部分非商用版本是免费的)
  • 调整VBA代码中的API声明,适配64位环境:在Declare语句前加PtrSafe,用LongPtr替代原来的Long类型,示例:
#If VBA7 Then
    Declare PtrSafe Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As LongPtr
#Else
    Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
#End If

这样修改后就能兼容32位和64位Access环境了。

这些方案都是免费可用的,不用付费就能解决问题,你可以根据自己的需求选最合适的一种。

内容的提问来源于stack exchange,提问作者user525966

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:37:18