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

使用PyPDF2将两个PDF合并为单个A4纵向PDF的问题排查

问题解决方法

原有代码问题

  • 混用PyPDF2和pdfrw两个独立的PDF处理库,逻辑割裂,依赖冗余
  • 调用的PdfFileMerger仅支持按顺序追加完整PDF页面,没有页面尺寸适配、排版调整逻辑,无法实现单页拼接、规格统一的需求
  • 遍历目录合并的逻辑会把目标路径下所有PDF文件全部追加,没有定向读取指定的left.pdf和right.pdf,容易出现多余页面
  • 未定义A4纵向标准尺寸,也没有对应页面缩放、坐标定位逻辑,无法输出符合要求的纵向A4合并结果

核心参数说明

标准PDF打印规格下,A4尺寸以pt为单位:

  • 纵向A4:宽595pt,高842pt
  • 横向A4:宽842pt,高595pt

如果要实现两个单页PDF拼接为单张纵向A4,只需要将两个源页面等比缩放后,分别放置在A4页面的上半区、下半区即可;如果需要将两个PDF的多页内容按顺序合并、所有页面统一为A4纵向规格,逐页做尺寸适配后追加即可。

可直接运行的实现代码

首先安装依赖:

pip install PyPDF2

以下代码实现两个单页PDF拼接为单张纵向A4文件的效果(对应之前横向拼接的纵向版本需求):

import os
from PyPDF2 import PdfReader, PdfWriter, PageObject

# 定义A4纵向尺寸
A4_PORTRAIT_WIDTH = 595
A4_PORTRAIT_HEIGHT = 842
HALF_A4_HEIGHT = A4_PORTRAIT_HEIGHT / 2

# 初始化读写器,创建空白A4纵向页面
writer = PdfWriter()
blank_page = PageObject.create_blank_page(width=A4_PORTRAIT_WIDTH, height=A4_PORTRAIT_HEIGHT)

# 读取两个待合并的PDF
left_pdf = PdfReader(os.path.join("output", "left.pdf"))
right_pdf = PdfReader(os.path.join("output", "right.pdf"))
page_top = left_pdf.pages[0]
page_bottom = right_pdf.pages[0]

# 缩放页面适配半区尺寸
page_top.scale_to(width=A4_PORTRAIT_WIDTH, height=HALF_A4_HEIGHT)
page_bottom.scale_to(width=A4_PORTRAIT_WIDTH, height=HALF_A4_HEIGHT)

# 将两个页面分别合并到空白A4页的上、下位置(PDF坐标原点在页面左下角)
blank_page.merge_translated_page(page_top, tx=0, ty=HALF_A4_HEIGHT, over=True)
blank_page.merge_page(page_bottom, over=True)

# 输出结果
writer.add_page(blank_page)
with open("merged_portrait_a4.pdf", "wb") as f:
    writer.write(f)

如果你需要的是将两个PDF的所有页面按顺序合并,所有页面统一调整为A4纵向规格,用以下代码即可:

import os
from PyPDF2 import PdfReader, PdfWriter

A4_PORTRAIT_WIDTH = 595
A4_PORTRAIT_HEIGHT = 842

writer = PdfWriter()
target_files = [os.path.join("output", "left.pdf"), os.path.join("output", "right.pdf")]

for file_path in target_files:
    reader = PdfReader(file_path)
    for page in reader.pages:
        # 缩放页面适配A4纵向尺寸,横向页面可调用page.rotate(90)调整方向
        page.scale_to(width=A4_PORTRAIT_WIDTH, height=A4_PORTRAIT_HEIGHT)
        writer.add_page(page)

with open("merged_all_pages_a4_portrait.pdf", "wb") as f:
    writer.write(f)

注意事项

  • 如果源PDF页面比例和A4比例不一致,scale_to方法会自动拉伸填满区域,如果需要保持原比例留白,可以自行计算缩放比例后调用scale_by方法
  • 不需要额外安装pdfrw库,仅用PyPDF2即可完成全部需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:06:28