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
相关产品推荐
相关产品推荐

