程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python自動化系列之操作pdf的庫PyPDF2

編輯:Python

PDF是Portable Document Format的簡稱,意為“可攜帶文檔格式”,是由Adobe Systems用於與應用程序、操作系統、硬件無關的方式進行文件交換所發展出的文件格式。

在python中有多個對應的庫可以操作Pdf文件,其中最常用的是Pypdf2

PyPDF是一個操作pdf的模塊,現在最常用的版本是PyPDF2;
需要注意的是,這個庫不能操作pdf獲取文字信息

PyPDF2介紹

PyPDF2 是一個純 Python PDF 庫,可以讀取文檔信息(標題,作者等)、寫入、分割、合並PDF文檔,它還可以對pdf文檔進行添加水印、加密解密等操作。

安裝PyPDF2

使用pip包管理器安裝PyPDF2最新版本:
pip install PyPDF2

編輯器推薦使用VSCode,啟動VSCode,可以直接選擇打開“終端”菜單,進行庫的安裝和程序的運行;非常的方便

使用PyPDF2

PyPdf2中有兩個模塊,分別是:

  • 讀取庫 PDFFileReader
  • 操作庫 PdfFileWriter

1、使用PDFFileReader可以獲取pdf文件的基本信息,還可以獲取到每一頁pdf並加載為PageObject對象;

from PyPDF2 import PdfFileReader #引入reader
pdf = PdfFileReader(input_path) #初始化一個reader對象,傳入文件路徑
infomation = pdf.getDocumentInfo() #獲取文檔信息
number_of_pages = pdf.getNumPages() #獲取總頁數

完整實例代碼如下:

def read(): '''讀取pdf數據''' from PyPDF2 import PdfFileReader #引入reader pdf = PdfFileReader(input_path) #初始化一個reader對象,傳入文件路徑 #pdf = pdf.decrypt('password') #對加密的文件機密 infomation = pdf.getDocumentInfo() #獲取文檔信息 number_of_pages = pdf.getNumPages() #獲取總頁數 txt = f'''{input_path} information: Author : {infomation.author}, Creator : {infomation.creator}, Producer : {infomation.producer}, Subject : {infomation.subject}, Title : {infomation.title}, Number of pages : {number_of_pages} ''' print(txt) #以上信息,除了頁數,對於一下文件可能不存在 #這個庫不適合讀取文檔內容 for i in range(0,number_of_pages): pageObject = pdf.getPage(i) #print(pageObject.extractText())

2、使用PdfFileWriter需要配合PdfFileReader

from PyPDF2 import PdfFileWriter,PdfFileReader
pdfReader = PdfFileReader(input_path)
pdfWriter = PdfFileWriter()
addPage 向此 PDF 文件添加頁面 該頁面通常是從一個PdfFileReader實例中獲取的
pdfWriter.addPage(pdfReader.getPage(0))

具體可以參考下面代碼的注釋:

def write(): '''寫入''' from PyPDF2 import PdfFileWriter,PdfFileReader pdfReader = PdfFileReader(input_path) pdfWriter = PdfFileWriter() # addPage 向此 PDF 文件添加頁面 該頁面通常是從一個PdfFileReader實例中獲取的 pdfWriter.addPage(pdfReader.getPage(0)) # insertBlankPage 將空白頁插入此 PDF 文件並返回此頁面的PageObject對象 # insertBlankPage(width=None, height=None, index=0) 默認在最開始添加 pdfWriter.insertBlankPage(width=100,height=100) # addBlankPage(width=None, height=None) 追加一個空白頁,如果沒有指定width|height,則使用上一頁的width|height # 如果沒有指定width|height並且也沒有上一頁 raise PageSizeNotDefinedError pdfWriter.addBlankPage() # 在此 PDF 文件中插入一個pageObject對象。該頁面通常是從一個 PdfFileReader實例中獲取的 # index指定插入位置 默認再最開始插入 pdfWriter.insertPage(pdfReader.getPage(2)) # addAttachment(fname, fdata) 在 PDF 中嵌入文件 # pdfWriter.addAttachment(fname="附件一.txt", fdata=b'Hello world!') print(pdfWriter.getNumPages()) #加密 #pdfWriter.encrypt(user_pwd='password', owner_pwd='password') pdfWriter.write(open('H:/test_w.pdf','wb'))

3、重要的概念PageObject:

在PdfFileReader加載pdf文件後,獲取的每一頁都會被轉換為PageObject對象,對於Pdf的操作,實際就是在操作PageObject對象;

下面是PageObject對象中常用的方法:

PageObject的方法:
mergePage(page2) 將兩個頁面的內容合並為一個,可以實現水印效果
mergeRotatedPage(page2, rotation, expand=False) 類似mergePage方法,可以對page2頁面進行旋轉操作
mergeScaledPage(page2, scale, expand=False) 類似mergePage方法,可以對page2頁面進行縮放操作
mergeTranslatedPage(page2, tx, ty, expand=False) 類似mergePage方法,可以對page2頁面進行平移操作
mergeRotatedScaledPage(page2, rotation, scale, expand=False) 類似mergePage方法,可以對page2頁面進行旋轉以及縮放操作
mergeRotatedScaledTranslatedPage(page2, rotation, scale, tx, ty, expand=False) 類似mergePage方法,可以對page2頁面進行旋轉、縮放以及平移操作
mergeRotatedTranslatedPage(page2, rotation, tx, ty, expand=False) 類似mergePage方法,可以對page2頁面進行旋轉以及平移操作
mergeScaledTranslatedPage(page2, scale, tx, ty, expand=False) 類似mergePage方法,可以對page2頁面進行縮放以及平移操作
mergeTransformedPage(page2, ctm, expand=False) 類似mergePage方法,可以對page2頁面進行矩陣轉換操作
rotateClockwise(angle) 順時針旋轉頁面,angle必須是 90 度的增量
rotateCounterClockwise(angle) 逆時針旋轉頁面,angle必須是 90 度的增量
scale(sx, sy) 縮放頁面
scaleBy(factor) 按固定XY軸比例縮放頁面
scaleTo(width, height) 頁面縮放到指定尺寸

實現一個合並pdf文件的功能:

可參考代碼注釋理解:


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved