如何通过Python修改邮件合并生成PDF的Page Setup为2 Pages Per Sheet?
解决方案:邮件合并生成PDF时设置每页包含2页文档
你当前的代码通过Word邮件合并批量生成Word和PDF文件,但需要将PDF的页面布局从“每页1页文档”改为“每页2页文档”。核心解决思路是在导出PDF前修改Word文档的打印缩放设置——因为Word的PDF导出会遵循文档的打印布局配置。
修改后的完整代码
import os import win32com.client as win32 working_directory = '<working_directory>' # 修正原代码拼写错误 source_name = os.path.join(working_directory, 'test.xlsx') destination_folder = os.path.join(working_directory, 'Destination') # 创建Word应用实例 wordApp = win32.Dispatch('Word.Application') wordApp.Visible = True # 打开Word模板 sourceDoc = wordApp.Documents.Open(os.path.join(working_directory, 'test_doc.docx')) mail_merge = sourceDoc.MailMerge mail_merge.OpenDataSource(Name:=os.path.join(working_directory, source_name), sqlstatement:="SELECT * FROM [Sheet1$]") record_count = mail_merge.DataSource.RecordCount # 定义每批处理的记录数 batch_size = 3000 # 计算总批次数 num_batches = (record_count + batch_size - 1) // batch_size file_counter = 1 try: # 批量执行邮件合并 for batch_index in range(num_batches): start_record = batch_index * batch_size + 1 end_record = min((batch_index + 1) * batch_size, record_count) # 设置当前批次的记录范围 mail_merge.DataSource.FirstRecord = start_record mail_merge.DataSource.LastRecord = end_record # 执行邮件合并 mail_merge.Execute(False) base_name = f'output_file_{start_record}-{end_record}' targetDoc = wordApp.ActiveDocument # 保存Word文档 targetDoc.SaveAs2(os.path.join(destination_folder, base_name + '.docx'), 16) # 关键设置:将打印缩放改为每页包含2页文档 targetDoc.PageSetup.Zoom.PagesPerSheet = 2 # 导出PDF,自动遵循上述打印设置 targetDoc.ExportAsFixedFormat(os.path.join(destination_folder, base_name + '.pdf'), ExportFormat=17) targetDoc.Close(False) targetDoc = None file_counter += 1 finally: sourceDoc.Close(False) wordApp.Quit()
关键修改说明
- 添加打印缩放配置:在
ExportAsFixedFormat前加入targetDoc.PageSetup.Zoom.PagesPerSheet = 2,直接修改文档的打印规则,PDF导出时会自动应用该设置。 - 修正拼写错误:将原代码中的
<workig_directory>改为<working_directory>,避免路径识别问题。 - 补充PDF后缀:导出PDF时添加
.pdf后缀,避免生成无后缀的无效文件。
原理说明
Word的ExportAsFixedFormat方法默认沿用文档的打印配置生成PDF,包括缩放比例、页面排布规则等。通过修改PageSetup.Zoom.PagesPerSheet参数,我们直接指定了“单张纸打印2页文档”的规则,导出的PDF会自动按此布局生成。
内容的提问来源于stack exchange,提问作者Mir Muhammad Murtaza
相关产品推荐
相关产品推荐

