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

使用PyPDF2将任意尺寸PDF转换为居中适配的A4尺寸PDF

将任意尺寸PDF转换为居中适配的A4尺寸PDF(PyPDF2实现)

修正后的完整代码

from pypdf import PdfReader, PdfWriter, Transformation, PageObject
from pypdf import PaperSize

# 读取输入PDF
pdf_reader = PdfReader("input.pdf")
writer = PdfWriter()

# A4纸张尺寸(单位:点,1点=1/72英寸)
A4_WIDTH = PaperSize.A4.width
A4_HEIGHT = PaperSize.A4.height

# 处理每一页(支持多页PDF)
for page in pdf_reader.pages:
    # 获取原页面的宽高
    orig_width = float(page.mediabox.width)
    orig_height = float(page.mediabox.height)
    
    # 计算缩放因子:取宽、高方向缩放比例的较小值,确保页面完全放入A4
    scale_factor = min(A4_WIDTH / orig_width, A4_HEIGHT / orig_height)
    
    # 计算缩放后的页面尺寸
    scaled_width = orig_width * scale_factor
    scaled_height = orig_height * scale_factor
    
    # 计算居中偏移量:A4尺寸减去缩放后尺寸,再除以2得到上下左右的留白
    offset_x = (A4_WIDTH - scaled_width) / 2
    offset_y = (A4_HEIGHT - scaled_height) / 2
    
    # 创建变换:先缩放,再平移到居中位置
    transform = Transformation().scale(scale_factor, scale_factor).translate(offset_x, offset_y)
    page.add_transformation(transform)
    
    # 创建空白A4页面,将缩放并居中后的页面合并进去
    a4_blank_page = PageObject.create_blank_page(width=A4_WIDTH, height=A4_HEIGHT)
    a4_blank_page.merge_page(page)
    
    # 将处理后的页面加入输出
    writer.add_page(a4_blank_page)

# 保存输出PDF
writer.write("output.pdf")

关键修正与说明

  • 支持多页PDF:原代码仅处理单页,现在循环遍历所有页面,适配多页场景。
  • 正确计算居中偏移量:替换了原代码中固定的平移值,通过(A4尺寸 - 缩放后尺寸)/2计算偏移,确保页面在A4画布中水平、垂直双居中。
  • 清晰的变量命名:使用orig_width、scaled_width这类直观变量名,降低理解门槛。
  • 完整保留内容:通过merge_page将缩放后的页面叠加到空白A4页上,确保原PDF内容完整呈现。

注意事项

  • 输入PDF如果是通过ImageMagick的convert image.png input.pdf生成的,代码完全兼容,无需额外调整。
  • 运行前确认已安装PyPDF2:执行pip install pypdf即可完成安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:20:32