python使用pdfminer解析pdf文件的方法示例
最近要做個從 pdf 文件中抽取文本內(nèi)容的工具,大概查了一下 python 里可以使用 pdfminer 來實(shí)現(xiàn)。下面就看看怎樣使用吧。
PDFMiner是一個可以從PDF文檔中提取信息的工具。與其他PDF相關(guān)的工具不同,它注重的完全是獲取和分析文本數(shù)據(jù)。PDFMiner允許你獲取某一頁中文本的準(zhǔn)確位置和一些諸如字體、行數(shù)的信息。它包括一個PDF轉(zhuǎn)換器,可以把PDF文件轉(zhuǎn)換成HTML等格式。它還有一個擴(kuò)展的PDF解析器,可以用于除文本分析以外的其他用途。
PDFMiner內(nèi)置兩個好用的工具:pdf2txt.py和dumppdf.py
pdf2txt.py從PDF文件中提取所有文本內(nèi)容。但不能識別畫成圖片的文本,這需要特征識別。對于加密的PDF你需要提供一個密碼才能解析,對于沒有提取權(quán)限的PDF文檔你得不到任何文本。
dumppdf.py把PDF文件內(nèi)容變成pseudo-XML格式。這個程序主要用于debug,但是它也可能用于提取一些有意義的內(nèi)容(比如圖片)。
官方主頁:https://euske.github.io/pdfminer/
其特征有:1、完全使用python編寫。(適用于2.4或更新版本)2、解析,分析,并轉(zhuǎn)換成PDF文檔。3、PDF-1.7規(guī)范的支持。(幾乎)4、中日韓語言和垂直書寫腳本支持。5、各種字體類型(Type1、TrueType、Type3,和CID)的支持。6、基本加密(RC4)的支持。7、PDF與HTML轉(zhuǎn)換。8、綱要(TOC)的提取。9、標(biāo)簽內(nèi)容提取。10、通過分組文本塊重建原始的布局。
如果你的Python有安裝pip模塊,就可以通過命令“python pip install pdfminer”,自動安裝pdfminer。
解析pdf文件用到的類:
- PDFParser:從一個文件中獲取數(shù)據(jù)
- PDFDocument:保存獲取的數(shù)據(jù),和PDFParser是相互關(guān)聯(lián)的
- PDFPageInterpreter處理頁面內(nèi)容
- PDFDevice將其翻譯成你需要的格式
- PDFResourceManager用于存儲共享資源,如字體或圖像。
python的工具,安裝當(dāng)然是使用pip安裝了。
pip install pdfminer
命令行方式
為了使用方便,pdfminer 提供了一個命令行工具來直接轉(zhuǎn)換pdf文件,使用方法如下:
pdf2txt.py <path_to_pdf_file>
編程方式
除了命令行方式以外,對于復(fù)雜應(yīng)用場景,pdfminer 也提供了以編程方式來轉(zhuǎn)換 pdf 文件,主要使用下面幾個類來實(shí)現(xiàn):
- PDFParser: 用來解析pdf文件。
- PDFDocument:用來保存 PDFParser 解析后的對象。
- PDFPageInterpreter:用來處理解析后的文檔頁面內(nèi)容。
- PDFResourceManager:pdf 共享資源管理器,用于存儲共享資源,如字體或圖像。
下面看一個例子:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from 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 LAParams
import StringIO
class PDFUtils():
def __init__(self):
pass
def pdf2txt(self, path):
output = StringIO.StringIO()
with open(path, 'rb') as f:
praser = PDFParser(f)
doc = PDFDocument(praser)
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
pdfrm = PDFResourceManager()
laparams = LAParams()
device = PDFPageAggregator(pdfrm, laparams=laparams)
interpreter = PDFPageInterpreter(pdfrm, device)
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
layout = device.get_result()
for x in layout:
if hasattr(x, "get_text"):
content = x.get_text()
output.write(content)
content = output.getvalue()
output.close()
return content
if __name__ == '__main__':
path = u'/tmp/abc.pdf'
pdf_utils = PDFUtils()
print pdf_utils.pdf2txt(path)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python矩陣基本運(yùn)算的實(shí)現(xiàn)
本文主要介紹了python?矩陣的基本運(yùn)算,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
Django使用uwsgi部署時的配置以及django日志文件的處理方法
今天小編就為大家分享一篇Django使用uwsgi部署時的配置以及django日志文件的處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08
python面向?qū)ο髮?shí)現(xiàn)名片管理系統(tǒng)文件版
這篇文章主要為大家詳細(xì)介紹了python面向?qū)ο髮?shí)現(xiàn)名片管理系統(tǒng)文件版,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04

