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

使用Python旋转扫描PDF后第三方仍识别为90度,如何解决?

彻底解决扫描版PDF旋转后第三方显示异常的问题

你的问题出在仅修改了PDF的旋转属性,而非真正调整页面内容的方向。PyPDF2的rotate()方法只是给页面添加了一个旋转标记,部分PDF阅读器会优先读取原始内容的方向,忽略这个标记,导致对方看到的还是旋转状态。另外你代码里的文档级元数据设置完全无效,还写错了类型(/Rotate应该是整数而非字符串)。

解决方案1:修正PyPDF2的用法(规范设置页面旋转属性)

如果坚持用PyPDF2,需要正确设置每页的旋转属性,而非依赖文档元数据:

import PyPDF2

with open('input.pdf', 'rb') as file:
    reader = PyPDF2.PdfReader(file)
    writer = PyPDF2.PdfWriter()

    for page in reader.pages:
        # 根据原页面的旋转方向调整度数:原页面逆时针90度就传90,顺时针90度传-90
        rotated_page = page.rotate(-90)
        # 强制清除页面的旋转标记
        rotated_page['/Rotate'] = 0
        writer.add_page(rotated_page)

    with open('output.pdf', 'wb') as output_file:
        writer.write(output_file)

这种方法优化了属性设置逻辑,多数阅读器能正确识别,但仍可能存在个别兼容性问题。

解决方案2:用PyMuPDF(fitz)重绘页面内容(彻底解决)

扫描版PDF本质是图片,最可靠的方式是直接旋转图片内容并重新生成页面,完全消除旋转属性依赖。PyMuPDF是处理PDF内容的高效库,能彻底解决这个问题:

先安装库:

pip install pymupdf

运行以下代码(简洁版):

import fitz  # PyMuPDF

doc = fitz.open('input.pdf')
for page in doc:
    # 根据需要调整度数:顺时针90传90、逆时针90传270、180度传180
    page.rotate(90)  # 直接修改页面图片内容的方向

doc.save('output.pdf')
doc.close()

这个方法会直接把页面的图片内容旋转后重新写入,生成的PDF没有任何旋转标记,任何阅读器打开都会显示正确的方向。

关键说明

  • 扫描版PDF的核心是图片,只有修改图片本身的方向,才能彻底避免阅读器的兼容性问题。
  • PyPDF2更适合处理文本型PDF的属性修改,对扫描版的图片内容处理能力有限,推荐用PyMuPDF做扫描版PDF的旋转操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:20:18