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

如何使用pypdf将PDF页面调整为Letter尺寸?

用pypdf将PDF页面标准化缩放至Letter尺寸

完全可以实现,虽然pypdf的PaperSize枚举里没有Letter选项,但我们可以直接定义Letter尺寸的数值(8.5×11英寸,对应PDF用户单位612×792,1英寸=72用户单位),再通过页面变换完成缩放和标准化。

核心思路:

  • 遍历PDF的每个页面,获取原始尺寸
  • 根据Letter尺寸计算缩放比例,确保页面完整适配且居中
  • 应用缩放和平移变换,将页面调整到Letter画布上
  • 重置页面的mediabox为Letter尺寸

以下是完整实现代码:

from pypdf import PdfReader, PdfWriter
from pypdf.generic import RectangleObject

# 定义Letter尺寸的PDF用户单位值
LETTER_WIDTH = 612
LETTER_HEIGHT = 792

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

for page in reader.pages:
    # 获取页面原始宽高,处理旋转页面的宽高互换
    page_width = page.mediabox.width
    page_height = page.mediabox.height
    if page.get('/Rotate') in [90, 270]:
        page_width, page_height = page_height, page_width
    
    # 计算缩放因子:取宽高缩放比例的最小值,避免内容超出Letter边界
    scale_x = LETTER_WIDTH / page_width
    scale_y = LETTER_HEIGHT / page_height
    scale_factor = min(scale_x, scale_y)
    
    # 计算缩放后的尺寸和居中偏移量
    new_width = page_width * scale_factor
    new_height = page_height * scale_factor
    offset_x = (LETTER_WIDTH - new_width) / 2
    offset_y = (LETTER_HEIGHT - new_height) / 2
    
    # 应用缩放+平移变换
    page.add_transformation([scale_factor, 0, 0, scale_factor, offset_x, offset_y])
    
    # 将页面的媒体框设置为Letter尺寸
    page.mediabox = RectangleObject([0, 0, LETTER_WIDTH, LETTER_HEIGHT])
    
    # 可选:重置页面旋转角度,统一为竖向
    if page.get('/Rotate') is not None:
        page.Rotate = 0
    
    writer.add_page(page)

# 保存处理后的PDF
with open("output_letter.pdf", "wb") as output_file:
    writer.write(output_file)

代码说明:

  • 处理旋转页面:如果页面是90/270度旋转,先互换宽高再计算缩放比例,避免方向错误
  • 居中适配:通过偏移量让缩放后的页面在Letter画布中居中显示
  • 重置媒体框:确保输出页面的尺寸严格为Letter标准

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:37:39