Python 读取pdf文件

Python读取PDF示例,涉及PDFMiner库的安装与使用,注意中文处理和文件格式问题。

Python 实现读取pdf文件简单示例。

安装命令

需要安装操作pdf的三方类库,命令如下:

pip install pdfminer3K

安装过程如下:

引入类库

需要引入很多的类库。

示例如下:

import sys
import importlib
importlib.reload(sys)

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import  PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed

 

读取pdf实现

实现步骤为:先通过二进制方式打开测试pdf文档,创建pdf文档解析测试文档内容,

最后读取文件内容,保存到另一个文件中。

示例如下:

import sys
import importlib

importlib.reload(sys)

from pdfminer.pdfparser import PDFParser, PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LTTextBoxHorizontal, LAParams
from pdfminer.pdfinterp import PDFTextExtractionNotAllowed
import os



def read_pdf(path, toPath):
    # 以二进制方式打开pdf文件
    f = open(path, 'rb')

    # 创建一个pdf文档分析器
    parser = PDFParser(f)
    # 创建pdf文档
    pdfFile = PDFDocument()
    # 链接分析器与文档对象
    parser.set_document(pdfFile)
    pdfFile.set_parser(parser)
    # 提供初始化密码
    pdfFile.initialize()

    # 检测文档是否提供txt转换
    if not pdfFile.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        # 解析数据
        # 数据管理器
        manager = PDFResourceManager()
        # 创建一个PDF设备对象
        laparams = LAParams()
        device = PDFPageAggregator(manager, laparams=laparams)
        # 解释器对象
        interpreter = PDFPageInterpreter(manager, device)
        for page in pdfFile.get_pages():
            interpreter.process_page(page)
            layout = device.get_result()
            for x in layout:
                if isinstance(x, LTTextBoxHorizontal):
                    with open(toPath, 'a', encoding='utf-8') as f:
                        print(x.get_text())
                        f.write(x.get_text() + "\n")


path = os.path.join(os.getcwd(), 'test_1.pdf')
toPath = os.path.join(os.getcwd(), 'test_2.txt')
read_pdf(path, toPath)

注意:无法读取中文,貌似需要加载中文字体。还有就是在写入pdf文件,格式不对无法打开暂时没找到原因。

总结

本篇只是使用Python 实现读取pdf文件简单示例,因为时间关系没有做深入的扩展,等之后有时间再做补充。

<think>我们正在处理用户的问题:“我想使用Python读取PDF文件的内容 请问Python 如何读取 PDF 文件内容” 根据用户的问题,我们需要提供使用Python读取PDF文件内容的方法。 根据之前提供的引用,有两种方法: 引用[1]:使用PyPDF2库,并给出了读取第1-100页内容的示例代码。 引用[2]:使用Spire.PDF for Python库,并提到它可以提取文本和图片,还支持格式转换。 因此,我们可以介绍两种方法,并给出示例代码。 注意:用户要求使用中文回答,并且按照系统级指令,数学公式使用$...$或$$...$$格式(但本问题可能不涉及数学公式,所以不需要)。 另外,根据指令,我们需要在回答末尾生成相关问题。 回答结构: 1. 介绍两种常用的方法(两个库) 2. 分别给出安装命令和示例代码 3. 说明两种方法的优缺点或适用场景 4. 生成相关问题 注意:引用标识的使用。在引用到之前提供的参考内容时,在末尾添加引用标识,例如[^1]或[^2]。 但是,我们提供的引用是来自用户给出的参考,所以我们可以这样引用。 然而,用户提供的两个引用都是关于读取PDF的,我们可以直接使用。 但是请注意,用户提供的引用内容中,引用[1]使用的是PyPDF2,引用[2]使用的是Spire.PDF for Python。 我们还需要注意,Spire.PDF for Python是一个商业库,有免费版但可能有限制。 因此,我们在回答中应该说明这一点。 另外,我们还可以提到其他库,如pdfplumber(它也是常用的,并且提取文本效果更好),但用户没有提供引用,我们可以根据我们的知识补充,但要注意指令要求“尽量保证回答真实可靠”,所以如果我们知道的话可以补充,但如果没有把握,可以只根据用户提供的引用。 但是,用户的问题只是要求读取内容,并没有指定是文本还是图片,所以我们可以分别介绍。 考虑到用户提供的引用中,引用[2]提到了提取文本和图片,而引用[1]只提取文本(并且可能效果一般),我们可以这样组织: 步骤: 1. 使用PyPDF2(免费,但文本提取效果可能不佳,特别是对于复杂格式) 2. 使用Spire.PDF for Python(商业库,免费版有限制,但功能强大) 3. 另外,也可以提一下pdfplumber(因为它是免费的,并且在提取文本方面表现较好),但注意用户没有提供这个引用,我们可以简单提一下,作为补充。 注意:根据指令,我们应尽可能参考用户上一次的问题和回答。但这是第一次回答,所以主要根据用户提供的引用。 因此,回答如下:</think>### Python 读取 PDF 文件内容的方法 Python 提供了多种库来读取 PDF 文件内容,以下是三种常用方法及其实现步骤: --- #### 方法 1:使用 **PyPDF2**(基础文本提取) ```python import PyPDF2 # 打开 PDF 文件 with open('your_file.pdf', 'rb') as pdf_file: pdf_reader = PyPDF2.PdfFileReader(pdf_file) # 获取总页数 print(f"总页数: {pdf_reader.numPages}") # 逐页提取文本 for page_num in range(pdf_reader.numPages): page = pdf_reader.getPage(page_num) text = page.extractText() print(f"第 {page_num+1} 页内容:\n{text}\n") ``` **特点**: - 纯 Python 实现,轻量级 - 对简单文本提取有效,但复杂格式可能丢失排版信息[^1] - 不支持图片提取 --- #### 方法 2:使用 **Spire.PDF**(高级文本/图片提取) ```python from spire.pdf import PdfDocument # 加载 PDF doc = PdfDocument() doc.LoadFromFile("your_file.pdf") # 提取所有文本 all_text = [] for page in doc.Pages: text = page.ExtractText() # 提取文本 all_text.append(text) # 提取图片(需额外处理) images = page.ExtractImages() for img in images: img.Save(f"page{page.PageIndex}_img.png") print("".join(all_text)) doc.Close() ``` **特点**: - 支持文本、图片、表格提取 - 可处理加密文档 - 需安装:`pip install Spire.PDF`(免费版有水印和页数限制)[^2] --- #### 方法 3:使用 **pdfplumber**(精准文本定位) ```python import pdfplumber with pdfplumber.open('your_file.pdf') as pdf: for page in pdf.pages: # 提取完整文本 print(page.extract_text()) # 提取表格数据(示例) tables = page.extract_tables() for table in tables: print("检测到表格:", table) ``` **特点**: - 精准保持文本位置和表格结构 - 支持可视化调试(`page.to_image().debug_tablefinder()`) - 安装:`pip install pdfplumber` --- ### 选择建议 | 场景 | 推荐库 | |---------------------|---------------| | 快速提取简单文本 | PyPDF2 | | 需要图片/表格提取 | Spire.PDF | | 精确还原排版和表格 | pdfplumber | > ⚠️ 注意:所有 PDF 文本提取都可能因文件格式(扫描件/加密/特殊字体)失效,扫描件需先用 OCR 工具处理。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值