如何用PyPDF2旋转PDF页面并使坐标匹配新页面方向
PyPDF2旋转后裁剪坐标匹配常规页面方向的解决方法
PyPDF2的rotate_clockwise方法仅为页面添加旋转属性,并未真正修改底层坐标系,导致后续设置mediabox时坐标仍对应原始页面方向。想要让旋转后的页面坐标系符合常规((0,0)位于左下角),可通过transfer_rotation_to_content()方法将旋转操作固化到页面内容中,重置页面旋转角度,实现视觉方向与坐标系的对齐。
修改后的代码示例
from PyPDF2 import PdfReader, PdfWriter # 旋转页面并固化旋转效果到内容 reader = PdfReader("myfile.pdf") writer = PdfWriter() for page in reader.pages: page.rotate_clockwise(180) # 将旋转属性转移到内容流,重置页面旋转角度,坐标系同步为视觉方向 page.transfer_rotation_to_content() writer.add_page(page) with open("rotated_myfile.pdf", "wb") as pdf_out: writer.write(pdf_out) # 执行裁剪操作,此时坐标系已符合常规规则 reader = PdfReader("rotated_myfile.pdf") page = reader.pages[0] # 按常规坐标设置裁剪区域 page.mediabox.lower_left = (0, 0) page.mediabox.lower_right = (300, 0) page.mediabox.upper_left = (0, 300) page.mediabox.upper_right = (300, 300) writer = PdfWriter() writer.add_page(page) with open("tmp.pdf", "wb") as pdf_out: writer.write(pdf_out)
关键说明
transfer_rotation_to_content()会直接修改页面的内容流,将旋转效果应用到内容上,同时把页面的旋转角度重置为0,此时页面坐标系与视觉呈现方向完全一致。- 确保使用最新版本的PyPDF2,低版本可能不支持该方法,可执行
pip install --upgrade PyPDF2更新。
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

