使用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
相关产品推荐
相关产品推荐

