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

如何用Python将PDF两页并排合并?代码遇页面消失问题求助

问题分析与修复方案

你的代码中右侧页面消失的核心原因是平移距离设置错误,同时缺少对原页面对象的克隆操作(可能导致意外的状态修改)。以下是具体修复步骤和完整代码:

错误点说明

  1. 平移参数错误:你设置的tx=page_width/2只将右侧页面移动了半页宽度,导致页面内容部分/完全超出目标合并页面的可视区域(或与左侧页面重叠后被覆盖)。正确的平移距离应该是page_width,这样右侧页面会完全放置在左侧页面的右侧。
  2. 未克隆页面对象:直接对page_right应用变换会修改原PDF reader中的页面对象,可能引发后续操作的意外问题,建议先克隆页面再处理。

修复后的完整代码

import PyPDF2
from PyPDF2 import PdfWriter, PdfReader, PageObject, Transformation

def process_pdf(input_pdf_path, output_pdf_path):
    pdf_reader = PdfReader(input_pdf_path)
    pdf_writer = PdfWriter()

    num_pages = len(pdf_reader.pages)
    page1 = pdf_reader.pages[0]
    page2 = pdf_reader.pages[1]

    merged_page = merge_pages(page1, page2)
    pdf_writer.add_page(merged_page)

    with open(output_pdf_path, 'wb') as output_pdf_file:
        pdf_writer.write(output_pdf_file)

def merge_pages(page_left, page_right):
    page_width = page_left.mediabox.width
    page_height = page_left.mediabox.height
    
    # 创建宽度为两倍原页面的空白页
    merged_page = PageObject.create_blank_page(width=page_width*2, height=page_height)

    # 合并左侧页面到空白页左侧
    merged_page.merge_page(page_left)

    # 克隆右侧页面,避免修改原对象
    page_right_clone = page_right.clone()
    # 平移到左侧页面的右侧(tx=page_width)
    translation = Transformation().translate(tx=page_width, ty=0)
    page_right_clone.add_transformation(translation)

    # 合并右侧页面到空白页右侧
    merged_page.merge_page(page_right_clone)

    return merged_page

# 测试
input_pdf = 'input.pdf'
output_pdf = 'output.pdf'
process_pdf(input_pdf, output_pdf)

额外说明

如果你的目标是制作双面小册子(比如A4对折后是A5页面),通常还需要对偶数页进行翻转操作(因为打印后对折,右侧页面需要倒置)。如果需要这个功能,可以在平移后添加翻转变换:

# 平移后添加翻转(以页面中心为轴)
flip = Transformation().rotate(180).translate(tx=page_width, ty=page_height)
page_right_clone.add_transformation(flip)

同时确保输入PDF的所有页面尺寸一致,否则需要额外处理尺寸适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:53:15