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

如何在Python中读取横向PDF?解决PyPDF2提取横版文本乱码问题

解决竖版PDF中横版页面文本提取乱码的问题

我之前也碰到过一模一样的情况——当PDF里混了旋转过的横版页面时,PyPDF2直接提取文本会因为排版方向不匹配,把文本顺序彻底打乱,看起来就像乱码。核心原因是PyPDF2默认不会自动处理页面的旋转状态,文本读取逻辑跟着旋转后的坐标走,自然就输出了看不懂的内容。下面给你两种实用的解决方法:


方法一:用PyPDF2手动修正页面旋转

首先,你需要先检查每个页面的旋转角度,把旋转的页面转回正常方向后再提取文本。PyPDF2的Page对象自带rotation属性,可以直接获取页面的旋转角度(通常是90、180、270这几个值)。

示例代码:

from PyPDF2 import PdfReader

# 读取目标PDF文件
pdf_reader = PdfReader("your_portrait_with_landscape.pdf")

for page_num, page in enumerate(pdf_reader.pages):
    # 获取当前页面的旋转角度
    page_rotation = page.rotation
    print(f"第{page_num+1}页旋转角度: {page_rotation}")
    
    # 如果页面有旋转,先转回0度(正常竖版方向)
    if page_rotation != 0:
        # rotate方法参数为旋转角度,负号表示反向旋转(比如原页面顺时针转90,这里就逆时针转90)
        corrected_page = page.rotate(-page_rotation)
        extracted_text = corrected_page.extract_text()
    else:
        extracted_text = page.extract_text()
    
    # 输出提取的文本(或者做后续业务处理)
    print(f"第{page_num+1}页提取文本:\n{extracted_text}\n")

这种方法能解决大部分因页面旋转导致的乱码问题,但如果你的PDF使用了特殊嵌入字体或非标准排版,PyPDF2可能还是会有提取不准确的情况。


方法二:换用PyMuPDF(fitz)处理复杂排版

如果PyPDF2的效果不理想,我强烈推荐用PyMuPDF——这个库对各种PDF排版的兼容性极好,不管是旋转页面、原生横向页面还是复杂布局,它都能自动识别并正确提取文本,几乎不需要额外处理旋转逻辑。

首先安装库:

pip install pymupdf

示例代码:

import fitz  # PyMuPDF的常用别名

# 打开PDF文件
pdf_doc = fitz.open("your_portrait_with_landscape.pdf")

for page_num, page in enumerate(pdf_doc):
    # 直接调用get_text(),库会自动处理所有排版问题
    extracted_text = page.get_text()
    print(f"第{page_num+1}页提取文本:\n{extracted_text}\n")

我自己处理各种复杂PDF时,PyMuPDF的提取准确率比PyPDF2高很多,尤其是这种混排场景,基本不会出现乱码问题。


补充说明

你遇到的“乱码”本质上不是真的编码错误,而是文本的读取顺序因为页面旋转被彻底打乱了——比如横版页面的文本是横向排列的,PyPDF2按竖版的坐标顺序读取,就会把一行文字拆成零散的混乱片段。只要把页面转回正确方向,或者用能自动识别排版的库,就能解决这个问题。

内容的提问来源于stack exchange,提问作者Daniel Micoski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:21:25