讲师中心 微信公众号
AI工具推荐 视频效率加速

使用 PyPDF 合并多份 PDF 的页面为单页网格布局

浅杰酱_8400

浅杰酱_8400

发布时间:2026-03-13 14:30:22

|

642人浏览过

|

来源于php中文网

原创

使用 PyPDF 合并多份 PDF 的页面为单页网格布局

本文介绍如何利用 pypdf 的页面变换功能,将多个同尺寸 pdf 文件的每页内容按行排列(如第1行放第1个pdf的10页、第2行放第2个pdf的10页),合并为一张高分辨率单页 pdf。全程纯 python 实现,无需外部依赖。

本文介绍如何利用 pypdf 的页面变换功能,将多个同尺寸 pdf 文件的每页内容按行排列(如第1行放第1个pdf的10页、第2行放第2个pdf的10页),合并为一张高分辨率单页 pdf。全程纯 python 实现,无需外部依赖。

在生成报告摘要、教学材料或批量预览场景中,常需将多个结构一致的 PDF(例如每份含 10 页 A4 截图)紧凑整合为一张可打印/查看的“网格总览页”。PyPDF(v3.0+)原生支持精细的页面坐标变换,无需借助图像渲染或第三方绘图库,即可通过 merge_transformed_page() + Transformation().translate() 实现精准布局。

核心思路

  • 创建一张空白目标页,宽度 = 单页宽 × 列数(如 10),高度 = 单页高 × 行数(如 PDF 文件数 n);
  • 遍历每个源 PDF(1.pdf, 2.pdf, …),再遍历其每一页;
  • 将当前页按行列索引计算偏移量(x = 列索引 × 单页宽,y = (n − 行索引 − 1) × 单页高),平移后合并至目标页左下角为原点的坐标系中;
  • 注意:PyPDF 坐标系原点在左下角,因此行序需倒置(即第 i 个 PDF 放在从上往下数第 i 行 → y 坐标应为 (n - i - 1) * height)。

完整可运行代码示例

from pypdf import PdfReader, PdfWriter, Transformation

# 配置参数
n = 3  # PDF 文件总数:1.pdf, 2.pdf, ..., n.pdf
pages_per_pdf = 10  # 每个 PDF 的页数(即网格列数)
page_width = 415     # 单页宽度(单位:PDF 默认用户单位,约 1/72 英寸)
page_height = 321    # 单页高度

# 创建输出器与单页画布
writer = PdfWriter()
summary_page = writer.add_blank_page(
    width=page_width * pages_per_pdf,
    height=page_height * n
)

# 逐个读取 PDF 并布局
for pdf_idx in range(n):
    filename = f"{pdf_idx + 1}.pdf"
    reader = PdfReader(filename)

    # 验证页数一致性(可选但推荐)
    if len(reader.pages) != pages_per_pdf:
        raise ValueError(f"{filename} 页数不匹配:期望 {pages_per_pdf} 页,实际 {len(reader.pages)} 页")

    for page_idx, src_page in enumerate(reader.pages):
        # 计算目标位置:第 pdf_idx 行(从顶向下)、第 page_idx 列(从左向右)
        # y 坐标需翻转:PyPDF 原点在左下,所以第0行(顶部)对应 y = (n-1)*h
        tx = page_idx * page_width
        ty = (n - pdf_idx - 1) * page_height

        # 应用平移变换并合并
        summary_page.merge_transformed_page(
            src_page,
            Transformation().translate(tx, ty)
        )

# 写入结果
with open("summary.pdf", "wb") as f:
    writer.write(f)

print("✅ 网格摘要 PDF 已生成:summary.pdf")

关键注意事项

  • 单位与尺寸适配:page_width/page_height 需根据实际 PDF 页面尺寸设定。可通过 reader.pages[0].mediabox.width 和 .height 动态获取(推荐用于通用脚本):
    w = float(reader.pages[0].mediabox.width)
    h = float(reader.pages[0].mediabox.height)
  • 缩放与裁剪:若源页尺寸不一致,可在 merge_transformed_page 前添加 .scale() 或 .cropbox 调整;
  • 内存效率:对大量 PDF 或大页面,建议逐文件处理后显式删除 reader 对象,避免内存累积;
  • 字体与矢量保真:此方法直接复用原始 PDF 内容流,完全保留文字、矢量图形及超链接(如有),优于截图拼接方案。

通过上述方式,你不仅能高效构建结构化 PDF 摘要页,还能灵活扩展为 m×n 动态网格、带边框/标题的复合布局,真正发挥 PyPDF 在 PDF 文档级合成中的强大能力。

极轻PDF
极轻PDF

专业的在线PDF工具,支持PDF编辑、转换、合并、压缩等多种功能,操作简单,处理高效,满足日常办公与学习中的PDF处理需求。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

讯飞智文

一款面向学习和办公场景的AI文档创作工具,可辅助生成PPT与Word文档,提高资料整理和内容制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1891

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

5184

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1829

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

31297

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3707

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3727

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1243

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn