網站首頁 編程語言 正文
前言:
PyPDF2是一個純Python的開源庫,能夠分割或合并PDF文件,也可以裁剪或轉換PDF文件中的頁面。我們還可以使用PyPDF2查看PDF文件的元信息,對PDF文件進行加密等。
PyPDF2是一個開源的庫,因此在使用之前需要先安裝。
pip install PyPDF2
1.讀取PDF
import PyPDF2 reader = PyPDF2.PdfFileReader(open('a.pdf','rb')) print(reader.getNumPages()) print(reader.getIsEncrypted()) print(reader.getDocumentInfo()) page = reader.getPage(8) print(page.extractText())
首先導入PyPDF2
模塊,然后以二進制讀模式打開a.pdf文件,并將它傳遞給PdfFileReader
類的初始化函數。PdfFileReader的初始化函數會返回一個PdfFileReader
類的對象,我們可以使用這個對象來獲取PDF文件的信息。
通過getNumPages
函數獲取pdf的總頁數,通過getIsEncrypted
函數獲取文件是否加密,通過getDocumentInfo函數獲取文件的元數據,通過傳遞下標給getPage函數的方式獲取PDF頁面,下標從0開始,與Python內置的字符串、列表和元組等保持一致。通過PageObject
類的extractText
方法提取頁面中的文本。從該方法的返回結果來看,提取PDF文本的效果并不理想。
2.刪除pdf的某些頁
思路:PyPDF2
并不能直接編輯PDF文件,但是我們可以利用PyPDF2從一個PDF文檔拷貝需要的頁面到另一個PDF文檔,通過這種迂回的方式實現編輯PDF的功能。例如刪掉a.pdf中的第一頁
import PyPDF2 reader = PyPDF2.PdfFileReader(open('a.pdf','rb')) output = PyPDF2.PdfFileWriter() for i in range(1,reader.getNumPages()): ? ? output.addPage(reader.getPage(i)) outputStream = open ("b.pdf","wb") output.write(outputStream) outputStream.close()
3.旋轉頁面
PageObject
類中有部分方法可以修改PDF頁面,其中rotateClockwise
和rotateCounterClockwise
方法用來旋轉頁面。這兩個方法只接受一個參數,且參數取值必須是90的倍數,表示旋轉多少度。
import PyPDF2 reader = PyPDF2.PdfFileReader(open('a.pdf','rb')) output = PyPDF2.PdfFileWriter() page = reader.getPage(0) page.rotateClockwise(180) output.addPage(page) outputStream = open ("b.pdf","wb") output.write(outputStream) outputStream.close()
4.合并pdf
from PyPDF2 import PdfFileMerger merger = PdfFileMerger() a = open("a.pdf",'rb') b = open("b.pdf",'rb') c = open("c.pdf",'rb') merger.append(fileobj = a,pages = (0,3)) merger.merge(position=2,fileobj=b,pages=(0,1)) merger.append(c) output = open("d.pdf","wb") merger.write(output)
append
方法通過fileobj
參數確定要添加的PDF文件,通過pages參數指定要將哪些PDF頁面添加到新的PDF文件中,并將要添加的頁面添加到merger對象的末尾。merge方法相對于append方法,增加了position參數,我們可以通過position參數指定頁面插人的位置。append方法和merge方法的pages參數非常靈活,該參數是一個三元組(start,stop[,step]),分別表示起點、終點和步長。我們可以通過該參數指定合并PDF文件中的頁面。
原文鏈接:https://blog.51cto.com/u_3764469/5039076
相關推薦
- 2022-04-17 uniapp文本支持換行,后端返回一串文本
- 2024-07-15 SpringBoot使用Apache Poi導出word文檔
- 2022-08-16 C++超詳細梳理基礎知識_C 語言
- 2022-07-12 mongoDB復雜查詢實例(嵌套多個數組和正則表達式使用)
- 2022-04-25 JQuery異步post上傳表單數據標準化模板_jquery
- 2023-07-16 springboot動態端口
- 2022-05-26 Python?pass語句作用和Python?assert斷言函數的用法_python
- 2022-06-02 使用kubeadm命令行工具創建kubernetes集群_云和虛擬化
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支