You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

修改PowerShell脚本:将2个docx合并为单个PDF文件

嘿,我来帮你搞定这个需求!虽然你熟悉Linux批处理但对PowerShell不太了解,没关系,我给你写个简单易懂的脚本,还会一步步讲清楚逻辑~

实现两个DOCX合并为单个PDF的PowerShell脚本

这个方案会用到Microsoft Word的COM对象,所以你的电脑得安装Office或独立的Word组件哦(就像Linux里用工具需要对应依赖一样)。

完整脚本示例

# 定义要合并的两个DOCX文件路径,按你需要的先后顺序排列
$docxFiles = @(
    "C:\your\path\first.docx",
    "C:\your\path\second.docx"
)
# 定义最终输出的PDF文件路径
$outputPdf = "C:\your\path\merged_result.pdf"

# 创建Word应用对象,设置为后台运行(不弹出Word窗口)
$word = New-Object -ComObject Word.Application
$word.Visible = $false

try {
    # 创建一个空白文档,用来存放合并后的内容
    $mergedDoc = $word.Documents.Add()

    # 逐个处理每个DOCX文件,把内容复制到空白文档中
    foreach ($file in $docxFiles) {
        # 打开当前DOCX文件
        $currentDoc = $word.Documents.Open($file)
        # 复制当前文档的全部内容
        $currentDoc.Content.Copy()
        # 将光标移到合并文档末尾,粘贴内容
        $mergedDoc.Content.Paste()
        # 可选:添加分页符,让两个文档的内容分开在不同页面
        $mergedDoc.Content.InsertParagraphAfter()
        $mergedDoc.Content.InsertBreak([Microsoft.Office.Interop.Word.WdBreakType]::wdPageBreak)
        # 关闭当前DOCX文件,不保存修改(我们只是复制内容)
        $currentDoc.Close($false)
    }

    # 将合并后的文档导出为PDF格式
    $mergedDoc.SaveAs([ref]$outputPdf, [ref]17) # 17是Word内置的PDF格式枚举值
    Write-Host "合并完成!PDF已保存到: $outputPdf"
}
catch {
    Write-Host "执行出错啦: $_"
}
finally {
    # 关闭合并后的文档,不保存临时内容
    $mergedDoc.Close($false)
    # 退出Word应用,释放后台进程(避免残留)
    $word.Quit()
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($word) | Out-Null
    [System.GC]::Collect()
    [System.GC]::WaitForPendingFinalizers()
}

脚本逻辑说明(对应你熟悉的批处理思路)

  • 开头的$docxFiles就像批处理里的变量,用来存储两个要合并的文件路径,顺序直接决定PDF里内容的先后
  • $word = New-Object -ComObject Word.Application相当于调用Word程序,Visible = $false让它在后台静默运行,不会弹出窗口干扰你
  • 循环部分和批处理的for逻辑一致,逐个读取DOCX文件,把内容复制到新建的空白文档中
  • 那个InsertBreak是添加分页符的代码,如果你不想两个文档的内容连在同一页,就保留;如果需要连续显示,删掉那两行即可
  • SaveAs里的17是Word内置的PDF格式编号,类似批处理里指定输出格式的参数
  • finally块是不管脚本执行成功还是失败,都会关闭Word并释放进程,避免后台残留无用的Word进程

使用方法

  1. 把脚本里的文件路径改成你自己的实际路径(PowerShell里支持反斜杠\或正斜杠/
  2. 保存成.ps1格式的文件,比如MergeDocxToPdf.ps1
  3. 打开PowerShell,导航到脚本所在文件夹,运行命令:.\MergeDocxToPdf.ps1

如果遇到执行权限问题(类似Linux里的chmod +x),可以先在PowerShell里运行:Set-ExecutionPolicy RemoteSigned,按提示选择Y即可临时放开本地脚本的执行权限。

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

火山引擎 最新活动