如何用Python将PDF两页并排合并?代码遇页面消失问题求助
问题分析与修复方案
你的代码中右侧页面消失的核心原因是平移距离设置错误,同时缺少对原页面对象的克隆操作(可能导致意外的状态修改)。以下是具体修复步骤和完整代码:
错误点说明
- 平移参数错误:你设置的
tx=page_width/2只将右侧页面移动了半页宽度,导致页面内容部分/完全超出目标合并页面的可视区域(或与左侧页面重叠后被覆盖)。正确的平移距离应该是page_width,这样右侧页面会完全放置在左侧页面的右侧。 - 未克隆页面对象:直接对
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
相关产品推荐
相关产品推荐

