Python中操作PDF文件的常用方法
1. 安裝所需庫
首先,需要安裝必要的庫。你可以使用以下命令來安裝這些庫:
pip install PyPDF2 pip install pdfminer.six pip install reportlab
2. 使用 PyPDF2 操作 PDF 文件
PyPDF2
是一個(gè)非常流行的庫,支持對(duì) PDF 文件進(jìn)行合并、拆分、加密、解密、旋轉(zhuǎn)等操作。
2.1 合并多個(gè) PDF 文件
import PyPDF2 # 創(chuàng)建一個(gè) PDF 合并器對(duì)象 pdf_merger = PyPDF2.PdfMerger() # 需要合并的 PDF 文件列表 pdf_files = ['file1.pdf', 'file2.pdf', 'file3.pdf'] # 合并 PDF 文件 for pdf in pdf_files: pdf_merger.append(pdf) # 輸出合并后的 PDF 文件 pdf_merger.write('merged_output.pdf') pdf_merger.close() print("PDF 文件合并完成!")
2.2 拆分 PDF 文件
import PyPDF2 # 打開 PDF 文件 with open('sample.pdf', 'rb') as file: reader = PyPDF2.PdfReader(file) # 獲取 PDF 文件的頁數(shù) total_pages = len(reader.pages) # 創(chuàng)建一個(gè) PDF 寫入器對(duì)象 writer = PyPDF2.PdfWriter() # 拆分為每一頁一個(gè) PDF 文件 for page_num in range(total_pages): writer.add_page(reader.pages[page_num]) # 寫入到新的 PDF 文件 with open(f'page_{page_num + 1}.pdf', 'wb') as output_file: writer.write(output_file) print("PDF 文件拆分完成!")
2.3 提取 PDF 文件的文本
import PyPDF2 # 打開 PDF 文件 with open('sample.pdf', 'rb') as file: reader = PyPDF2.PdfReader(file) text = "" # 提取所有頁的文本 for page_num in range(len(reader.pages)): page = reader.pages[page_num] text += page.extract_text() print("PDF 文件內(nèi)容:") print(text)
3. 使用 pdfminer 提取 PDF 文本
pdfminer.six
是一個(gè)專注于從 PDF 中提取文本的庫,比 PyPDF2
更適合復(fù)雜的文本提取操作。它支持從 PDF 中提取文本和元數(shù)據(jù)。
3.1 提取 PDF 文件中的文本
from pdfminer.high_level import extract_text # 提取 PDF 文件中的文本 text = extract_text('sample.pdf') print("提取的文本內(nèi)容:") print(text)
4. 使用 reportlab 創(chuàng)建 PDF 文件
reportlab
是一個(gè)非常強(qiáng)大的庫,主要用于生成 PDF 文件。它提供了豐富的 API 來設(shè)計(jì)和生成 PDF。
4.1 創(chuàng)建一個(gè)簡(jiǎn)單的 PDF 文件
from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas # 創(chuàng)建一個(gè) PDF 文件并繪制文本 def create_pdf(output_filename): c = canvas.Canvas(output_filename, pagesize=letter) c.drawString(100, 750, "Hello, this is a simple PDF created with ReportLab!") c.save() # 調(diào)用函數(shù)生成 PDF 文件 create_pdf("output.pdf") print("PDF 文件創(chuàng)建完成!")
4.2 在 PDF 中添加圖像
from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas def create_pdf_with_image(output_filename): c = canvas.Canvas(output_filename, pagesize=letter) c.drawString(100, 750, "Here is an image below:") # 添加圖像 c.drawImage("image.jpg", 100, 500, width=200, height=150) # 圖像位置和大小 c.save() create_pdf_with_image("pdf_with_image.pdf") print("PDF 文件(帶圖像)創(chuàng)建完成!")
5. 使用 PyMuPDF (fitz) 提取文本
PyMuPDF
是一個(gè)處理 PDF、XPS、EPUB 等文件格式的庫,功能非常強(qiáng)大且效率較高。你可以使用它來提取文本、圖像和其他內(nèi)容。
5.1 提取 PDF 文件的文本
import fitz # PyMuPDF # 打開 PDF 文件 doc = fitz.open('sample.pdf') # 提取所有頁面的文本 text = "" for page_num in range(len(doc)): page = doc.load_page(page_num) text += page.get_text() print("PDF 文件的內(nèi)容:") print(text)
6. 對(duì) PDF 文件進(jìn)行加密和解密
6.1 使用 PyPDF2 對(duì) PDF 進(jìn)行加密
import PyPDF2 # 打開 PDF 文件 with open('sample.pdf', 'rb') as file: reader = PyPDF2.PdfReader(file) writer = PyPDF2.PdfWriter() # 將 PDF 中的所有頁面添加到 writer 對(duì)象中 for page in reader.pages: writer.add_page(page) # 設(shè)置密碼 password = "your_password" writer.encrypt(password) # 寫入加密后的文件 with open('encrypted_sample.pdf', 'wb') as encrypted_file: writer.write(encrypted_file) print("PDF 文件加密完成!")
6.2 使用 PyPDF2 對(duì) PDF 進(jìn)行解密
import PyPDF2 # 打開加密的 PDF 文件 with open('encrypted_sample.pdf', 'rb') as file: reader = PyPDF2.PdfReader(file) # 解密 PDF 文件 password = "your_password" if reader.is_encrypted: reader.decrypt(password) # 創(chuàng)建一個(gè) PDF 寫入器對(duì)象 writer = PyPDF2.PdfWriter() # 將解密后的頁面添加到寫入器中 for page in reader.pages: writer.add_page(page) # 輸出解密后的 PDF 文件 with open('decrypted_sample.pdf', 'wb') as decrypted_file: writer.write(decrypted_file) print("PDF 文件解密完成!")
總結(jié)
使用 Python 處理 PDF 文件是非常常見的任務(wù),通過不同的庫,你可以實(shí)現(xiàn) PDF 的各種操作:
PyPDF2
:用于合并、拆分、加密、解密和提取文本。pdfminer.six
:專注于從 PDF 中提取文本,適合需要復(fù)雜文本解析的場(chǎng)景。reportlab
:用于生成 PDF 文件,支持繪圖、添加文本、圖片等。PyMuPDF
(fitz):支持高效地提取文本、圖像等,并處理 PDF 文件。
以上就是Python中操作PDF文件的常用方法的詳細(xì)內(nèi)容,更多關(guān)于Python操作PDF文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基礎(chǔ)語音識(shí)別-食物語音識(shí)別baseline(CNN)
這篇文章主要介紹了一個(gè)基礎(chǔ)語音識(shí)別題目-食物語音識(shí)別baseline(CNN),代碼詳細(xì)嗎,對(duì)于想要學(xué)習(xí)語音識(shí)別的朋友可以參考下2021-04-04Python Pygame實(shí)戰(zhàn)之超級(jí)炸彈人游戲的實(shí)現(xiàn)
如今的玩家們?cè)跓o聊的時(shí)候會(huì)玩些什么游戲呢?王者還是吃雞是最多的選擇。但在80、90年代的時(shí)候多是一些很簡(jiǎn)單的游戲:《超級(jí)瑪麗》、《魂斗羅》等。本文將利用Pygame制作另一個(gè)經(jīng)典游戲—炸彈人,感興趣的可以了解一下2022-03-03Python中創(chuàng)建相關(guān)系數(shù)矩陣的方法小結(jié)
相關(guān)系數(shù)矩陣是一種用于衡量變量之間關(guān)系的重要工具,本文將介紹在 Python 中創(chuàng)建相關(guān)系數(shù)矩陣的不同方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12Python基于pygame實(shí)現(xiàn)的font游戲字體(附源碼)
這篇文章主要介紹了Python基于pygame實(shí)現(xiàn)的font游戲字體,涉及Python響應(yīng)鍵盤按鍵動(dòng)態(tài)操作圖片元素的相關(guān)技巧,需要的朋友可以參考下2015-11-11Python3 Tkinkter + SQLite實(shí)現(xiàn)登錄和注冊(cè)界面
這篇文章主要為大家詳細(xì)介紹了Python3 Tkinkter + SQLite實(shí)現(xiàn)登錄和注冊(cè)界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-118個(gè)Python必備的PyCharm插件(附下載地址)
Python是一種廣泛使用的編程語言,PyCharm是最受歡迎的Python IDE之一,本文就來介紹一下8個(gè)Python必備的PyCharm插件,具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01python3.5 email實(shí)現(xiàn)發(fā)送郵件功能
這篇文章主要為大家詳細(xì)介紹了python3.5 email實(shí)現(xiàn)發(fā)送郵件功能,包含txt、圖片、HTML、附件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05pytorch中的transforms模塊實(shí)例詳解
今天小編就為大家分享一篇pytorch中的transforms模塊實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12