1.如何解析指定页面而不是文档的全部?
2.利用哪些三方库?
一、PDF文档解析
1.将输入尾的文档提取出首页和尾页(import PyPDF2 )
def getdespdf(self,path):
# print("输出路径为:", self.file_path_out)
fp=open(path,"rb") #打开输入文件路径
fr=PdfFileReader(fp) #读取pdf 输入流
output=PdfFileWriter() #输出流
lastpage = fr.getNumPages() #根据输入流得到pdf文档的总页数
end_index = lastpage - 1
# testnu=fr.getPageNumber()
pages_index =[0,end_index] #首页和尾页的 index 组成一个元组
for i in pages_index:
output.addPage(fr.getPage(i)) #取到首页和尾页,加载进输出流
outputstream = open(self.file_path_out,"wb") #确定提取后需要保存到的位置
output.write(outputstream)#保存首页和尾页 得到一个新的pdf文件
#closed stream
outputstream.close() #常规操作,关闭流
fp.close()
2.解析新组成的pdf,并返回内容字符串
def parsein(self,path):
result_text = []
fp_in = open(path, 'rb') #打开文件
parser = PDFParser(fp_in) #pdf解析器
doc = PDFDocument() #创建一个文档对象
# 连接分析器与文档对象
parser.set_document(doc)
doc.set_parser(parser)
# 提供初始化密码
doc.initialize()# 检测文档是否提供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)for page in doc.get_pages():
# 使用页面解释器来读取
interpreter.process_page(page)
# 接受该页面的LTpage对象
layout = device.get_result()for x in layout:
if (isinstance(x, LTTextBoxHorizontal)):
# with open(r'parseresult.txt', 'a') as f:
results = x.get_text() #str类型
#f.write(results + "\n")
result_text.append(results) #之后转换为二进的list类型
return result_text #这里返回的是list类型