如何用Python检测并旋转180度倒置的PDF页面?
检测并自动旋转PDF中180度倒置页面
核心思路
180度倒置的PDF页面分两种情况处理:
- 原生可编辑PDF:通常会自带旋转属性,直接读取页面旋转标记即可判断
- 扫描件PDF(图片转PDF):需通过OCR识别文本方向,或分析图像像素分布来判定内容是否倒置
PyMuPDF(fitz)是处理这类需求的最优选择——它既支持直接操作PDF页面属性,也能快速将页面转为图像用于后续分析。
实现脚本
方案1:处理原生可编辑PDF
直接读取页面旋转属性,自动修正180度倒置页面:
import fitz # PyMuPDF def fix_rotated_pages(input_path, output_path): doc = fitz.open(input_path) for idx in range(len(doc)): page = doc[idx] if page.rotation == 180: page.set_rotation(0) print(f"页面 {idx+1} 已从180度旋转回正常方向") doc.save(output_path) doc.close() print(f"处理完成,结果文件:{output_path}") # 调用示例 if __name__ == "__main__": fix_rotated_pages("input.pdf", "fixed_output.pdf")
方案2:兼容扫描件PDF
结合Tesseract OCR检测图像文本方向,自动修正扫描类倒置页面:
import fitz import pytesseract from PIL import Image def get_text_rotation(image): # 用Tesseract检测文本旋转角度 osd_data = pytesseract.image_to_osd(image) return int(osd_data.split('Rotate: ')[1].split('\n')[0]) def fix_scanned_rotated_pages(input_path, output_path): doc = fitz.open(input_path) for idx in range(len(doc)): page = doc[idx] # 先检查页面自带旋转属性 if page.rotation == 180: page.set_rotation(0) print(f"页面 {idx+1} 已修正180度旋转") continue # 处理扫描件:转图像检测文本方向 pix = page.get_pixmap() img = Image.frombytes("RGB", [pix.width, pix.height], pix.samples) rotation_angle = get_text_rotation(img) if rotation_angle == 180: page.set_rotation((page.rotation - 180) % 360) print(f"扫描页面 {idx+1} 已修正180度旋转") doc.save(output_path) doc.close() print(f"处理完成,结果文件:{output_path}") # 调用示例 if __name__ == "__main__": fix_scanned_rotated_pages("scanned_input.pdf", "scanned_fixed.pdf")
依赖安装
- 基础依赖:
pip install pymupdf - 扫描件处理额外依赖:
- 安装Tesseract OCR引擎(需对应系统版本)
- 安装Python库:
pip install pytesseract pillow
内容的提问来源于stack exchange,提问作者Ryen DeGan
相关产品推荐
相关产品推荐

