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

如何用PyPDF2将横向PDF转为纵向且内容居顶

调整PyPDF2修改PDF页面方向后内容的位置至顶部

修改MediaBox将横向PDF转为纵向后,内容居中的原因是原页面内容的坐标基于原横向MediaBox,新的纵向页面高度更大,导致内容自然落在中间区域。要让内容置顶,需要通过平移页面内容来调整位置,具体实现如下:

修改后的代码

# -*- coding: utf-8 -*-
import PyPDF2

pdf_in = open('test.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_in, strict=False)
pdf_writer = PyPDF2.PdfFileWriter()

page = pdf_reader.getPage(0)
# 获取原页面的尺寸(横向页面的宽高)
original_width = page.mediaBox.getWidth()
original_height = page.mediaBox.getHeight()

# 设置纵向A4的MediaBox(标准A4纵向:宽595.3pt,高841.9pt)
page.mediaBox.setLowerLeft((0, 0))
page.mediaBox.setLowerRight((595.3, 0))
page.mediaBox.setUpperLeft((0, 841.9))
page.mediaBox.setUpperRight((595.3, 841.9))
# 同步CropBox与MediaBox,避免内容被意外裁剪
page.cropBox = page.mediaBox

# 计算向上偏移量:纵向页面高度 - 原横向页面高度,将内容从原位置移至顶部
offset_y = 841.9 - original_height
# 添加平移变换,沿y轴向上移动对应距离
transformation = PyPDF2.Transformation().translate(tx=0, ty=offset_y)
page.add_transformation(transformation)

pdf_writer.addPage(page)

pdf_out = open('test2.pdf', 'wb')
pdf_writer.write(pdf_out)
pdf_out.close()
pdf_in.close()

关键说明

  1. 偏移量计算:通过纵向页面高度减去原横向页面的高度,得到需要向上移动的距离,确保内容刚好对齐到新页面的顶部。
  2. 变换矩阵:使用PyPDF2.Transformation创建平移变换,将页面内容沿y轴正方向移动对应偏移量,不改变文本方向和内容布局。
  3. 同步CropBox:设置CropBox与MediaBox一致,避免新页面的裁剪区域影响内容显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:25:28