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

如何通过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()

关键修改说明

  1. 添加打印缩放配置:在ExportAsFixedFormat前加入targetDoc.PageSetup.Zoom.PagesPerSheet = 2,直接修改文档的打印规则,PDF导出时会自动应用该设置。
  2. 修正拼写错误:将原代码中的<workig_directory>改为<working_directory>,避免路径识别问题。
  3. 补充PDF后缀:导出PDF时添加.pdf后缀,避免生成无后缀的无效文件。

原理说明

Word的ExportAsFixedFormat方法默认沿用文档的打印配置生成PDF,包括缩放比例、页面排布规则等。通过修改PageSetup.Zoom.PagesPerSheet参数,我们直接指定了“单张纸打印2页文档”的规则,导出的PDF会自动按此布局生成。

内容的提问来源于stack exchange,提问作者Mir Muhammad Murtaza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:35:38