python pdf转txt文本、pdf转json

文章目录

  • 一、前言
  • 二、实现方法
    • 1. 目录结构
    • 2. 代码


一、前言

此方法只能转文本格式的pdf,如果是图片格式的pdf需要用到ocr包,以后如果有这方面需求再加这个方法


二、实现方法

1. 目录结构

在这里插入图片描述


2. 代码

pdf2txt.py 代码如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
import osfrom pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFPage, PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParamsdef batch_process(src_dir, tgt_dir):'''批处理:return:'''for pdf_name in os.listdir(src_dir):pdf_path = os.path.join(src_dir, pdf_name)text_path = os.path.join(tgt_dir, f'{os.path.splitext(pdf_name)[0]}.txt')json_path = os.path.join(tgt_dir, f'{os.path.splitext(pdf_name)[0]}.json')pdf_utils = PDFUtils()pdf_list = pdf_utils.pdf2list(pdf_path)# pdf2txtwith open(text_path, mode='w', encoding='utf-8') as f:f.write(''.join([''.join(page) for page in pdf_list]))# pdf2jsonwith open(json_path, mode='w', encoding='utf-8') as f:f.write(json.dumps(pdf_list, ensure_ascii=False))class PDFUtils():def __init__(self):passdef pdf2list(self, path):pdf_list = []   # 二维数组,一维放页,二维放行with open(path, 'rb') as f:praser = PDFParser(f)doc = PDFDocument(praser)if not doc.is_extractable:raise PDFTextExtractionNotAllowedpdfrm = PDFResourceManager()laparams = LAParams()device = PDFPageAggregator(pdfrm, laparams=laparams)interpreter = PDFPageInterpreter(pdfrm, device)for page_idx, page in enumerate(PDFPage.create_pages(doc)):line_list = []   # 保存每行数据# print(page_idx)interpreter.process_page(page)layout = device.get_result()for line_idx, line in enumerate(layout):# print(line_idx)if hasattr(line, "get_text"):content = line.get_text()# print(content)# output = StringIO()# output.write(content)# content = output.getvalue()# output.close()# print(content)if content and content.replace(' ', '') != '\n':line_list.append(content)# print(content)pdf_list.append(line_list)# output.close()return pdf_listif __name__ == '__main__':# pdf目录src_dir = './pdf'# 生成的txt和json文件的保存目录tgt_dir = './text_and_json'# 批量转换batch_process(src_dir, tgt_dir)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171037.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H5ke12--3--iframe--编辑邮箱的制作

下面我们来window.iframes[] frames是一个全局变量,它是一个对象数组,其中包含当前窗口中的所有框架(如果存在)。 在这段代码中,let frameframes[0];是将第一个框架赋值给变量frame。通过frame.document.designMode&q…

【ArcGIS Pro微课1000例】0037:ArcGIS Pro中模型构建器的使用---以shp批量转kml/kmz为例

文章目录 一、ArcGIS Pro模型构建器介绍二、shp批量转kml/kmz1. 打开模型构建器2. 添加工作空间4. 添加【创建要素图层】工具5. 添加【图层转kml】工具6. 输出文件命名7. 运行模型三、模型另存为1.py文件2. 保存为工具一、ArcGIS Pro模型构建器介绍 模型构建器是一种可视化编程…

感冒的六大经方2

3 葛根汤 处方内容是:葛根15克,麻黄5克,桂枝10克,白芍10克,生薑二片, 炙甘草10克,大枣十枚 每付药加入六碗水使用大火来煮成二碗,成人于每三小时空腹时喝一碗,小孩减半…

C语言从入门到精通之【表达式和语句】

1 表达式 表达式由运算符和运算对象组成,最简单的表达式一个单独的运算对象。每个表达式都有一个值,并且是根据运算符优先级规定的顺序来执行,以下是一些表达式: 4 -6 421 a*(b c/d)/20 q 5*2 x q % 3 #q > 3 2 语句 语句…

yolov5从英伟达平台移植到华为昇腾开发板上的思路

作者:朱金灿 来源:clever101的专栏 为什么大多数人学不会人工智能编程?>>> 最近需要将yolov5代码从英伟达平台移植到华为昇腾开发板上。搜了一些代码和资料,大致明白了二者的差别。 1.二者使用的模型文件不一样 yolov…

【unity实战】实现一个放置3d物品建造装修系统(附项目源码)

文章目录 最终效果前言绘制开始场景素材开始放置旋转物体扩展优化1. 绘制地图边界,确保放置物品在指定区域内工作2. 让模型所占面积大小更加准确3. 隐藏白色瓦片指示区域 最终效果其他源码参考完结 最终效果 前言 其实3d物品建造装修系统之前就已经做过了&#xff…

2024年天津天狮学院食品质量与安全专业《普通化学》考试大纲

2024年天津天狮学院食品质量与安全专业高职升本入学考试《普通化学》考试大纲 一、考试性质 《普通化学》专业课程考试是天津天狮学院食品质量与安全专业高职升本入学考试 的必考科目之一,其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《…

位姿变换线性变换与坐标变换

位姿,线性变换与坐标变换.yuque 内旋,外旋, 左乘,右乘很容易把人绕晕是因为缺少一种科学的符号。 自己的符号,如果经常变不稳定,对推理和理解都很不利。 一旦问题复杂起来, 直观和直觉靠不住, 只能靠代数符号来推理 约定 P1: A,B,C…是空间中的标准正交基 P2: [a1,…

GZ031 应用软件系统开发赛题第6套

2023年全国职业院校技能大赛 应用软件系统开发赛项(高职组) 赛题第6套 工位号: 2023年4月 竞赛说明 一、项目背景 党的二十大报告指出,要加快建设制造强国、数字中国,推动制造业高端化、智能化、…

kafka入门(二): 位移提交

位移提交: Kafka的每条消息都有唯一的 offset, 用来表示消息在分区中对应的位置。有的也称之为 “偏移量”。 消费者每次在 poll() 拉取消息,它要返回的是还没有消费过的消息集, 因此,需要记录上一次消费时的消费位…

[计算机网络]运输层概述

虽然我自己也不知道写在前面和前言有什么区别..... 这个系列其实是针对<深入浅出计算机网络>的简单总结,加入了一点个人的理解和浅薄见识,如果您有一些更好的意见和见解,欢迎随时协助我改正,感激不尽啦. 最近心态平和了不少, 和过去也完全做了个割舍吧,既然痛苦和压力的…

记录华为云服务器(Linux 可视化 宝塔面板)-- 安全组篇

文章目录 前言安全组说明安全组的特性安全组的应用场景 进入安全组添加基本规则添加自定义规则如有启发&#xff0c;可点赞收藏哟~ 前言 和windows防火墙类似&#xff0c;安全组是一种虚拟防火墙&#xff0c;具备状态检测和数据包过滤功能&#xff0c;可以对进出云服务器的流量…

typeof,instanceof

1.typeof typeof运算符返回的结果是以小写的字符串表示的变量的类型 2.instanceof instanceof运算符用于判断右边构造函数的原型对象是否在左边对象的原型链上 let arr[]let obj{}let datenew Dateconsole.log(arr instanceof Array)console.log(arr instanceof Object)conso…

Maven 简单配置阿里云镜像

配置步骤&#xff1a; 1、找到 maven 的安装目录&#xff0c;修改settings.xml 2、在文件中找到<mirrors>标签&#xff0c;然后再标签中添加阿里云配置即可 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共…

CocosCreator 面试题(十五)Cocos Creator如何内置protobuf JS版本?

一、说说protobuf 是什么&#xff1f; Protocol Buffers&#xff08;简称为ProtoBuf&#xff09;是一种由Google开发的数据序列化格式。它是一种轻量级、高效且通用的数据交换格式&#xff0c;可用于各种编程语言和平台。 ProtoBuf使用结构化的消息定义语言&#xff08;IDL&a…

巧妙之中见真章:深入解析常用的创建型设计模式

设计模式之创建型设计模式详解 一、设计模式是什么&#xff1f;二、模板方法2.1、代码结构2.2、符合的设计原则2.3、如何扩展代码2.4、小结 三、观察者模式3.1、代码结构3.2、符合的设计原则3.3、如何扩展代码3.4、小结 四、策略模式4.1、代码结构4.2、符合的设计原则4.3、如何…

Pinctrl子系统和GPIO子系统

Pinctrl子系统&#xff1a; 借助Princtr子系统来设置一个Pin的复用和电气属性&#xff1b; pinctrl子系统主要做的工作是&#xff1a;1. 获取设备树中的PIN信息&#xff1b;2.根据获取到的pin信息来设置的Pin的复用功能&#xff1b;3.根据获取到的pin信息去设置pin的电气特性…

【机器学习 | 聚类】关于聚类最全评价方法大全,确定不收藏?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

访谈 破风之人毛京波,选择难而正确的路

“无论是在燃油时代还是电动时代&#xff0c;我们所做的一切&#xff0c;只为回归纯粹的驾驶乐趣。”履新路特斯中国总裁整整一年的毛京波&#xff0c;从不放过任何一个展示路特斯品牌驾驭精神的机会。 11月17日&#xff0c;广州车展开幕首日&#xff0c;位于5.2馆的路特斯“冠…