import numpy as np
import pandas as pd
##设置jupyter显示多行结果
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all' #默认为'last'
# 导入所需库
import os
import re
from pdfminer.converter import LTChar, TextConverter
from pdfminer.layout import LAParams
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
# 定义一个读取pdf文件内容的函数
def read(path):
parser = PDFParser(path)
doc = PDFDocument(parser, '')
parser.set_document(doc)
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的内容
page0 = ''
for i, page in enumerate(PDFPage.create_pages(doc)):
interpreter.process_page(page)
print("START PAGE %d\n" % i)
if page is not None:
interpreter.process_page(page)
print("END PAGE %d\n" % i)
# 接受该页面的LTPage对象
layout = device.get_result()
print(layout)
# 这里layout是一个LTPage对象,里面存放着这个 page 解析出的各种对象
# 包括 LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等
line0 = ''
for x in layout:
if isinstance(x, LTTextBox):
line0 = line0 + x.get_text().strip()
page0 = page0 + line0
return page0 #返回pdf文件中所有提取到的文本内容
# 主函数:批量将pdf转化为txt
if __name__ == '__main__':
path = '/Users/xiongying/Desktop/pdf' #自己存放pdf的文件夹名称(需更改为自己的)
pdfList = os.listdir(path)
#批量读取存储
pdf_num = 0 #处理的文件计数
for li in pdfList:
pdffile = open(path + '/' + li, "rb")
content = read(pdffile)
str = re.sub('.pdf', '.txt', li)
file1 = '/Users/xiongying/Desktop/txt/' + str #txt2(需更改为自己的)--自己创建一个存放txt文件的文件夹
with open(file1, 'w+', encoding='utf8') as f:
f.write(content)
pdf_num = pdf_num + 1
# handleData(str)
print("DONE:" + str ) #打印完成的文章标题
#打印所处理的文件数
print('number of done-article:',end = "")
print(pdf_num)
空格是是在每行文字里面 , 还是指有很多空行?