如何用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()
关键说明
- 偏移量计算:通过纵向页面高度减去原横向页面的高度,得到需要向上移动的距离,确保内容刚好对齐到新页面的顶部。
- 变换矩阵:使用
PyPDF2.Transformation创建平移变换,将页面内容沿y轴正方向移动对应偏移量,不改变文本方向和内容布局。 - 同步CropBox:设置CropBox与MediaBox一致,避免新页面的裁剪区域影响内容显示。
内容的提问来源于stack exchange,提问作者JossB
相关产品推荐
相关产品推荐

