pdf转txt 三种方法,使用不同的包
1.pdfminer 按段转,可以实现那种两栏的pdf。 每页得到的x.get_text()是一个列表,把这一页的内容分割存储了。
需要注意,pdfminer版本不同,函数调用方式有差异,得到的每页的内容排列方式也不同。新版的pdfminer得到的表格数据都在一行,与汉字混合。老版的pdfminer提取出来的表格每个数据在一行(方便去除或者提取)
2.pypdf2 按段转,可以实现那种两栏的pdf。 每页得到的pageContext是一个大的字符串。表格数据按照表格原本的形式排列,对表格数据处理比较友好。
3.pdfplumber 按行转,对于复杂pdf效果不好
下面是三个包的代码展示
1.pdfminer
参考(63条消息) 【最新实用版】Python批量将pdf文本提取并存储到txt文件中_sucka136的博客-优快云博客_python批量提取pdf中的信息
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox
from io import StringIO
from io import open
from pdfminer.pdftypes import resolve1
def read(path):
fp = open(path, 'rb') # 以二进制读模式打开
parser = PDFParser(fp) # 用文件对象创建一个PDF文档分析器
doc = PDFDocument(parser, '') # 创建一个PDF文档
parser.set_document(doc) # 连接分析器,与文档对象
pageNum=resolve1(doc.catalog['Pages'])['Count']
# 检测文档是否提供txt转换,不提供就忽略
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
else:
# 创建PDf 资源管理器 来管理共享资源
rsrcmgr = PDFResourceManager()
# 创建一个PDF聚合器,包含资源管理器与参数分析器
laparams = LAParams()
device = PDFPageAggregator(rsrcmgr, laparams=laparams)
# 创建一个PDF解释器对象
interpreter = PDFPageInterpreter(rsrcmgr, device)
# 循环遍历列表,每次处理一个page的内容 把page的内容读取出来,保存
page0 = ''
for i, page in enumerate(PDFPage.create_pages(doc)):
"""
下面是对page的文本进行提取,写入到txt中
"""
interpreter.process_page(page)
if page is not None:
interpreter.process_page(page)
# 接受该页面的LTPage对象
layout = device.get_result()
# print(layout)
# 这里layout是一个LTPage对象,里面存放着这个 page 解析出的各种对象
# 包括 LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等
line0='\n\n'
for x in layout:
if isinstance(x, LTTextBox):
line0 = line0 + x.get_text().strip()
page0 = page0 + line0
return page0 #返回pdf文件中所有提取到的文本内容
if __name__ == '__main__':
pdf_path =
txt_path =
content=read(pdf_path)
with open(txt_path, 'w+', encoding='utf8') as f:
f.write(content)
2.pypdf2
import os
import sys
import time
import importlib
import PyPDF2
from PyPDF2 import PdfFileWriter
def pdf2txt(pdf_path, txt_path):
with open(pdf_path, 'rb') as pdf_file, open(txt_path, "w+", encoding='utf-8') as txt_file: # 以二进制读模式打开
fileReader = PyPDF2.PdfFileReader(pdf_file)
pdfFileWriter = PdfFileWriter()
pageNum = fileReader.numPages
content = ''
for i in range(pageNum):
pageObj = fileReader.getPage(i)
pageText = pageObj.extractText()
content = content +pageText + "\n"
txt_file.write(content)
if __name__ == '__main__':
pdf_path = xx
txt_path =xx
pdf2txt(pdf_path, txt_path)
3.pdfplumber
参考(63条消息) 码力十足学量化|用Python将pdf文件转换为txt文件_码力十足学量化的博客-优快云博客_python pdf转txt
import pdfplumber
pdf_filename = xx
txt_filename = xx
pdf=pdfplumber.open(pdf_filename) # 打开PDF文件
pages=pdf.pages # 通过pages属性获取所有页的信息,此时pages是一个列表
text_all=[]
for page in pages:
# 用extract_text()函数获取每页文本内容
text=page.extract_text()
text_all.append(text)
text_all="".join(text_all)
print(text_all)
# 将文件保存为txt文本格式
txt_file=open(txt_filename,mode='a',encoding='utf-8')
txt_file.write(text_all)
pdf.close()
pdf转word
from pdf2docx import Converter
pdf_file = xx
docx_file = xx
# convert pdf to docx
cv = Converter(pdf_file)
cv.convert(docx_file, start=0, end=None)
cv.close()
word转txt
参考(63条消息) python docx转换成txt文本_Gospel303的博客-优快云博客_python docx转txt
from win32com import client as wc
def Translate(input, output):
# 转换
wordapp = wc.Dispatch('Word.Application')
doc = wordapp.Documents.Open(input)
# 为了让python可以在后续操作中r方式读取txt和不产生乱码,参数为4
doc.SaveAs(output, 4)
doc.Close()
if __name__ == '__main__':
input_file =xx
output_file = xx
Translate(input_file, output_file)
pdf去除表格
先用pypdf2将pdf转为txt
再用正则表达式去除跟表格有关的内容(需要找规律)
pdf得到表格
调用百度api识别表格 python+百度API识别图片中表格并保存到excel - 紫电_2021 - 博客园
可以用pypdf2转为txt,然后用re获取表格内容