python通過第三方庫(kù)操作PDF文件的幾種常見方法
前言
大家好,有關(guān)python操作pdf的方法,各種語(yǔ)言處理起來都比較麻煩,而且各種第三方庫(kù)的應(yīng)用場(chǎng)景都不同。下面說明一下python如何通過第三方庫(kù)如何處理pdf文件。
一、文本內(nèi)容提取
1.1、pdfplumber提取文本內(nèi)容
安裝pdfplumber
# 安裝模塊 pip install pdfplumber
pdfplumber提取PDF中文字代碼思路如下
- 利用pdfplumber打開一個(gè) PDF 文件
- 獲取指定的頁(yè),或者遍歷每一頁(yè)
- 利用.extract_text()方法提取當(dāng)前頁(yè)的文字
import pdfplumber
import os
path = os.getcwd()
filepath = os.path.join(path,"原則.pdf")
with pdfplumber.open(filepath) as pdf:
for i in range(len(pdf.pages)):
page = pdf.pages[i]
print(page.extract_text())1.2、pdfminer提取文本內(nèi)容
安裝pdfminer,注意安裝順序
pip install pdfminer3k pip install pdfminer.six
pdfminer.six提取PDF中文字代碼思路如下
- 利用open打開一個(gè) PDF 文件
- 通過pdfdocument文檔管理器讀取pdf文件
- 通過PDFPageInterpreter解析器文檔讀取
- 通過PDFPageAggregator聚合器獲取頁(yè)面內(nèi)容
- 利用.get_text()方法提取當(dāng)前頁(yè)的文字
讀取pdf內(nèi)容
from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
fp = open("原則.pdf","rb")
pdfparser = PDFParser(fp)
doc = PDFDocument(pdfparser)構(gòu)造解析器和聚合器,下面這么邏輯步驟固定格式,直接這么寫就可以。
from pdfminer.pdfinterp import PDFResourceManager from pdfminer.pdfinterp import PDFPageInterpreter from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LAParams #pdf資源管理器 resource = PDFResourceManager() #參數(shù)分析器 laparam = LAParams() #頁(yè)面聚合器 device = PDFPageAggregator(resource,laparams=laparam) #頁(yè)面解釋器 interpreter = PDFPageInterpreter(resource,device)
輸出pdf內(nèi)容
from pdfminer.pdfpage import PDFPage
for page in PDFPage.create_pages(doc):
#使用頁(yè)面解釋器讀取
interpreter.process_page(page)
#使用聚合器來獲取內(nèi)容
layout = device.get_result()
for out in layout:
#需要注意的是pdf文件不僅文字,還有圖片等內(nèi)容,
# 為了避免錯(cuò)誤,我們判斷是否為文本
if(hasattr(out,'get_text')):
print(out.get_text())二、表格內(nèi)容提取
表格內(nèi)容我們也使用pdfplumber。安裝過程和操作步驟也相同,提取表格,我們使用extract_table()方法提取表格內(nèi)容,使用pandas.DataFrame顯示內(nèi)容。
import os import pandas as pd import pdfplumber path = os.getcwd() pdf = pdfplumber.open(os.path.join(path,"table.pdf")) p0 = pdf.pages[0] table = p0.extract_table() df = pd.DataFrame(table[1:],columns=table[0]) print(df)
三、內(nèi)容拆分
拆分和合并我們一般使用PyPDF2庫(kù)
from PyPDF2 import PdfWriter,PdfReader
這里導(dǎo)入了兩個(gè)方法:
- PdfReader 可以理解為讀取器
- PdfWriter 可以理解為寫入器
def split_pdf(infn,outfn,start,end):
'''
:param infn 源pdf路徑
:param outfn 目的pdf路徑
:param start 開始頁(yè)面
:param end 結(jié)束頁(yè)面
return
'''
pdf_output = PdfWriter()
pdf_input = PdfReader(open(infn,"rb"))
page_count = len(pdf_input.pages)
if end > page_count:
end = page_counte
#分割pdf頁(yè)面,輸出新的內(nèi)容
for i in range(start,end):
pdf_output.add_page(pdf_input.pages[i])
pdf_output.write(open(outfn,'wb'))
split_pdf("原則.pdf","原則2.pdf",5,10)四、內(nèi)容合并
這里導(dǎo)入了兩個(gè)方法:
- PdfReader 可以理解為讀取器
- PdfMerger可以理解為合并器
from PyPDF2 import PdfMerger,PdfReader
def merge_pdf(filenames,merge_name,password=None):
'''
:param filenames 傳遞一個(gè)文件列表
:param merge_name 合并后的文件
:param password 對(duì)應(yīng)的密碼列表
return
'''
files = len(filenames)
pdf_merge = PdfMerger(False)
for i in range(files):
pdf_reader = PdfReader(open(filenames[i],"rb"))
if(not pdf_reader):
return
pdf_merge.append(pdf_reader)
pdf_merge.write(open(merge_name,"wb"))
merge_pdf(['原則1.pdf','原則2.pdf'],'原則3.pdf')五、通過命令工具生成pdf文檔
可以借助命令行工具進(jìn)行pdf文檔的生成。wkhtmltopdf命令行和第三庫(kù)pdfkit。
去網(wǎng)上下載wkhtmltopdf工具
# 安裝pdfkit庫(kù) pip install pdfkit
5.1 網(wǎng)頁(yè)內(nèi)容生成pdf
import pdfkit
def url_to_pdf(url, to_file):
# 將wkhtmltopdf.exe程序絕對(duì)路徑傳入config對(duì)象
path_wkthmltopdf = r'D:\\tool\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'
config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)
# 生成pdf文件,to_file為文件路徑
pdfkit.from_url(url, to_file, configuration=config)
print('完成')
url_to_pdf('https://www.baidu.com','D:\baidu.pdf')5.2 本地網(wǎng)頁(yè)內(nèi)容生成pdf
#避免亂碼在html文件中,<meta charset="UTF-8">
def html_to_pdf(html, to_file):
# 將wkhtmltopdf.exe程序絕對(duì)路徑傳入config對(duì)象
path_wkthmltopdf = r'D:\\tool\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'
config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)
# 生成pdf文件,to_file為文件路徑
pdfkit.from_file(html, to_file, configuration=config)
html_to_pdf('sample.html','out_2.pdf')5.3 字符串內(nèi)容生成pdf
'''將字符串生成pdf文件'''
def str_to_pdf(string, to_file):
# 將wkhtmltopdf.exe程序絕對(duì)路徑傳入config對(duì)象
path_wkthmltopdf = r'D:\\tool\\wkhtmltopdf\\bin\\wkhtmltopdf.exe'
config = pdfkit.configuration(wkhtmltopdf=path_wkthmltopdf)
# 生成pdf文件,to_file為文件路徑
pdfkit.from_string(string, to_file, configuration=config)
print('完成')
str_to_pdf('This is test!','out_3.pdf')總結(jié)
到此這篇關(guān)于python通過第三方庫(kù)操作PDF文件的幾種常見方法的文章就介紹到這了,更多相關(guān)python操作PDF文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python環(huán)境變量配置超詳細(xì)教程(小白也能輕松搞定)
對(duì)于剛接觸Python的用戶來說,配置Python環(huán)境變量可能是一個(gè)令人頭疼的問題,這篇文章主要介紹了Python環(huán)境變量配置的相關(guān)資料,通過文中介紹的方法小白也能輕松搞定,需要的朋友可以參考下2025-10-10
python實(shí)現(xiàn)探測(cè)socket和web服務(wù)示例
這篇文章主要介紹了python實(shí)現(xiàn)探測(cè)socket和web服務(wù)示例,需要的朋友可以參考下2014-03-03
詳解Python openpyxl庫(kù)的基本應(yīng)用
這篇文章主要介紹了Python openpyxl庫(kù)的基本應(yīng)用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-02-02
Python數(shù)據(jù)序列化和固化存儲(chǔ)的方式
數(shù)據(jù)序列化就是把內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)(如列表、字典、對(duì)象) 轉(zhuǎn)換成可以存儲(chǔ)(如寫入文件)或傳輸(如網(wǎng)絡(luò)發(fā)送)的格式,本文給大家介紹Python數(shù)據(jù)序列化和固化存儲(chǔ)的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2026-03-03
基于Python實(shí)現(xiàn)的掃雷游戲?qū)嵗a
這篇文章主要介紹了基于Python實(shí)現(xiàn)的掃雷游戲?qū)嵗a,對(duì)于Python的學(xué)習(xí)以及Python游戲開發(fā)都有一定的借鑒價(jià)值,需要的朋友可以參考下2014-08-08
Python工程師面試題 與Python基礎(chǔ)語(yǔ)法相關(guān)
這篇文章主要為大家分享了Python工程師面試題,面試題的內(nèi)容主要與Python基礎(chǔ)語(yǔ)法相關(guān),感興趣的小伙伴們可以參考一下2016-01-01
Python文件操作和數(shù)據(jù)格式詳解(簡(jiǎn)單簡(jiǎn)潔)
文本處理是腳本語(yǔ)言的強(qiáng)項(xiàng),下面這篇文章主要給大家介紹了關(guān)于Python文件操作和數(shù)據(jù)格式的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-05-05
基于keras輸出中間層結(jié)果的2種實(shí)現(xiàn)方式
今天小編就為大家分享一篇基于keras輸出中間層結(jié)果的2種實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01

