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

如何使用pdfrw合并两个PDF文件避免内容重叠,实现垂直拼接

问题原因

现有代码逻辑是将两个PDF对应页面的内容直接叠加在同一画布的相同坐标区域,因此会出现内容重叠,而非预期的垂直拼接效果。

修复方案

要实现垂直堆叠,需要先计算两个待拼接页面的总高度,创建对应尺寸的新画布,再将两个页面内容分别渲染到新画布的上下对应位置。

可运行代码

import os
import pdfrw

dirPATH = r'c:\users\<username>\projects\concat_pdfs'
pdf1 = os.path.join(dirPATH, 'PDF1.pdf')
pdf2 = os.path.join(dirPATH, 'PDF2.pdf')

def concat_pdfs(pdf1, pdf2, output):
    reader1 = pdfrw.PdfReader(pdf1)
    reader2 = pdfrw.PdfReader(pdf2)
    writer = pdfrw.PdfWriter()
    
    # 逐页垂直拼接,假设两个PDF页数一致,页数不同可自行调整遍历逻辑
    for page1, page2 in zip(reader1.pages, reader2.pages):
        # 获取两个页面的宽高
        w1 = float(page1.MediaBox[2])
        h1 = float(page1.MediaBox[3])
        w2 = float(page2.MediaBox[2])
        h2 = float(page2.MediaBox[3])
        
        # 新页面宽度取最大值,高度为两个页面高度之和
        new_w = max(w1, w2)
        new_h = h1 + h2
        
        # 创建新页面,先添加上半部分的page1内容
        merge = pdfrw.PageMerge()
        # PDF坐标原点在左下角,page1向上偏移h2即可放在上半区
        merge.add(page1, offset=(0, h2))
        # 添加下半部分的page2内容
        merge.add(page2, offset=(0, 0))
        new_page = merge.render()
        
        # 设置新页面的尺寸
        new_page.MediaBox = [0, 0, new_w, new_h]
        writer.addpage(new_page)
    
    writer.write(output)

# 注意参数对应你定义的路径变量,原代码此处参数名存在错误
concat_pdfs(pdf1, pdf2, 'result.pdf')

说明

如果拼接后上下顺序不符合预期,调整add方法的offset参数第二个值即可;如果需要将多个页面拼接到同一页,只需累加高度依次设置偏移量即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:06:02