Python读取pdf文件的简单代码示例

 更新时间:2024年02月18日 10:28:22   作者:JSON_L  
PDF文件的数据主要是文本、图片、表格,这三部分组成,但是也会穿插流程图、各种柱状图等,这篇文章主要给大家介绍了关于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文件并做词云可视化

import pdfplumber  # 导入库
import jieba
from wordcloud import WordCloud
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 用pdf文件解析器读取文件
with pdfplumber.open('中华文化.pdf') as f:
    # 用for循环读取文件中的每一页
    for page in f.pages:
        text = page.extract_text()
        txt_f = open(r'中华文化.txt', mode='a', encoding='utf-8')  # 创建txt文件
        txt_f.write(text)  # 写入txt文件
 
file = open('中华文化.txt',encoding='utf-8')
file = file.read()  #读取txt文件
txtlist = jieba.lcut(file) 
string = " ".join(txtlist) 
stop_words = {}  
counts = {}  
for txt in txtlist:
    if len(txt) == 1:  
        stop_words[txt] = stop_words.get(txt, 0) + 1
    else:
        counts[txt] = counts.get(txt, 0) + 1 
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)  
y1 = []
labels = []
for i in range(1,10):
    y1.append(items[i][1])
    labels.append(items[i][0])
# plt.figure(figsize=(8,4))
width = 0.3
x = np.arange(len(y1))
a = [i for i in range(0,9)]
plt.xticks(a,labels,rotation = 30)
plt.bar(x=x,height=y1,width=width)
plt.title('PDF文件中热词统计分析')
plt.savefig("热词统计分析.png")
plt.show()
print("-------热词统计分析完成!-------")
stoplist=[]   
item = list(stop_words.items())
for i in range(len(item)): 
    txt,count = item[i]
    stoplist.append(txt)  
#print(stoplist)
setlist = set(stoplist)  
wcd = WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc', scale=15, stopwords=setlist)
wcd.generate(string)
wcd.to_image()
print("-------热词词云生成完成!-------")
wcd.to_file('词云.png')  # 导出图片

总结

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

到此这篇关于Python读取pdf文件的文章就介绍到这了,更多相关Python读取pdf文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中使用中文的方法

    Python中使用中文的方法

    python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识。当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了。
    2011-02-02
  • Python脚本实现自动发带图的微博

    Python脚本实现自动发带图的微博

    这篇文章主要介绍了Python脚本实现自动发带图的微博的相关资料,需要的朋友可以参考下
    2016-04-04
  • 如何使用Python判断应用是否处于已打包状态

    如何使用Python判断应用是否处于已打包状态

    在使用 PyInstaller 打包 Python 应用时,有时需要在代码中判断程序是否处于“打包状态”,本文将介绍几种方法来判断是否处于打包状态,感兴趣的可以了解下
    2025-03-03
  • Python入门教程之if语句的用法

    Python入门教程之if语句的用法

    这篇文章主要介绍了Python入门教程之if语句的用法,是Python入门的基础知识,需要的朋友可以参考下
    2015-05-05
  • 解读sqlalchemy的常用数据类型有哪些

    解读sqlalchemy的常用数据类型有哪些

    这篇文章主要介绍了解读sqlalchemy的常用数据类型有哪些,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • python爬虫将js转化成json实现示例

    python爬虫将js转化成json实现示例

    这篇文章主要为大家介绍了python爬虫将js转化成json实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • tensorflow之自定义神经网络层实例

    tensorflow之自定义神经网络层实例

    今天小编就为大家分享一篇tensorflow之自定义神经网络层实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • PyQt5连接MySQL及QMYSQL driver not loaded错误解决

    PyQt5连接MySQL及QMYSQL driver not loaded错误解决

    这篇文章主要介绍了PyQt5连接MySQL及QMYSQL driver not loaded错误解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 解决pytorch报错:AssertionError: Invalid device id的问题

    解决pytorch报错:AssertionError: Invalid device id的问题

    今天小编就为大家分享一篇解决pytorch报错:AssertionError: Invalid device id的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • Python+Matplotlib绘制发散条形图的示例代码

    Python+Matplotlib绘制发散条形图的示例代码

    发散条形图(Diverging Bar)是一种用于显示数据分布的图表,可以帮助我们比较不同类别或分组的数据的差异和相对性,本文介绍了Matplotlib绘制发散条形图的函数源码,需要的可以参考一下
    2023-06-06

最新评论