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

Word转PDF后合并生成空PDF文件问题求助

问题分析与修复方案

核心错误原因

你生成空PDF的直接原因是合并逻辑的判断条件错误:代码中用path.endswith(".pdf")来筛选文件,但path是你的目标目录路径(C:\Mytest\trials),它永远不会以.pdf结尾,导致循环中没有任何PDF文件被添加到合并器,最终输出空文件。

除此之外还有两个潜在问题:

  • 转PDF时用os.walk遍历了所有子目录,但合并阶段仅用os.scandir扫描根目录,子目录里的PDF会被遗漏
  • os.scandir返回的是DirEntry对象,直接传给合并器存在潜在兼容性问题

修复后的完整代码

import os
import win32com.client
from PyPDF2 import PdfMerger

path = r'C:\Mytest\trials'
word = win32com.client.Dispatch('Word.Application')

# 遍历所有目录转换Word为PDF
for dirpath, _, filenames in os.walk(path):
    for f in filenames:
        # 统一处理.doc和.docx格式
        if f.lower().endswith((".docx", ".doc")):
            # 生成对应PDF文件名,用os.path.splitext避免替换错误
            pdf_name = os.path.splitext(f)[0] + ".pdf"
            # 用os.path.join拼接路径,避免字符串拼接的路径错误
            in_file = os.path.join(dirpath, f)
            new_file = os.path.join(dirpath, pdf_name)
            
            doc = word.Documents.Open(in_file)
            doc.SaveAs(new_file, FileFormat=17)
            doc.Close()
word.Quit()

# 合并所有目录下的PDF文件
merger = PdfMerger()

for dirpath, _, filenames in os.walk(path):
    for f in filenames:
        if f.lower().endswith(".pdf"):
            pdf_full_path = os.path.join(dirpath, f)
            merger.append(pdf_full_path)

# 将合并后的PDF保存到目标目录
merger.write(os.path.join(path, "merged.pdf"))
merger.close()

关键优化点

  • 合并阶段改用os.walk遍历所有子目录,确保所有生成的PDF都被纳入合并
  • 修正PDF筛选条件,检查每个文件名是否以.pdf结尾
  • 用os.path.join替代字符串拼接路径,避免跨平台兼容问题和路径拼写错误
  • 统一处理.doc和.docx文件,减少重复代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:15:44