Python 操作 PDF,這兩個庫必須會!

Python在自動化辦公方面有很多實用的第三方庫,可以很方便的處理word、excel、ppt、pdf文件
今天我們就學習一下Python處理PDF文檔的兩個常用庫「pdfplumber」、「pypdf2」
pdfplumber庫按頁處理 pdf ,獲取頁面文字,提取表格等操作
文檔:https://github.com/jsvine/pdfplumber
PyPDF2 是一個純 Python PDF 庫,可以讀取文檔信息(標題,作者等)、寫入、分割、合并PDF文檔,它還可以對pdf文檔進行添加水印、加密解密等
文檔:https://pythonhosted.org/PyPDF2
安裝:
pip install pypdf2
pip install pdfplumber
pdfplumber
提取PDF文字
「提取單頁pdf文字」
#?提取pdf文字
import?pdfplumber
with?pdfplumber.open("D:\\pdffiles\\Python編碼規(guī)范中文版.pdf")?as?pdf:
????page01?=?pdf.pages[0]?#指定頁碼
????text?=?page01.extract_text()#提取文本
????print(text)

「提取所有頁pdf文字」
import?pdfplumber
with?pdfplumber.open("D:\\pdffiles\\Python編碼規(guī)范中文版.pdf")?as?pdf:
????for?page?in?pdf.pages:
????????text?=?page.extract_text()#提取文本
????????print(text)
「提取所有pdf文字并寫入文本中」
import?pdfplumber
with?pdfplumber.open("D:\\pdffiles\\Python編碼規(guī)范中文版.pdf")?as?pdf:
????for?page?in?pdf.pages:
????????text?=?page.extract_text()#提取文本
????????txt_file?=?open("D:\\pdffiles\\Python編碼規(guī)范中文版.txt",mode='a',encoding='utf-8')
????????txt_file.write(text)

提取PDF表格
「提取表格」
#?提取pdf表格
import?pdfplumber
with?pdfplumber.open("D:\\pdffiles\\人力資源部崗位編制.pdf")?as?pdf:
????page01?=?pdf.pages[0]?#指定頁碼
????table1?=?page01.extract_table()#提取單個表格
????#?table2?=?page01.extract_tables()#提取多個表格
????print(table1)

「提取表格,保存為excel文件」
import?pdfplumber
from?openpyxl?import?Workbook?#保存表格,需要安裝openpyxl
with?pdfplumber.open("D:\\pdffiles\\人力資源部崗位編制.pdf")?as?pdf:
????page01?=?pdf.pages[0]
????table?=?page01.extract_table()
????workbook?=?Workbook()
????sheet?=?workbook.active
????for?row?in?table:
????????sheet.append(row)
????workbook.save(filename="D:\\pdffiles\\人力資源部崗位編制.xlsx")

PyPDF2
PyPDF2 中有兩個最常用的類:PdfFileReader和PdfFileWriter,分別用于讀取 PDF 和寫入 PDF。其中PdfFileReader傳入?yún)?shù)可以是一個打開的文件對象,也可以是表示文件路徑的字符串。而PdfFileWriter則必須傳入一個以寫方式打開的文件對象。
「PdfFileReader 對象的屬性和方法」

「PdfFileWriter 對象的屬性和方法」

分割PDF
from?PyPDF2?import??PdfFileReader,?PdfFileWriter
file_reader?=?PdfFileReader("D:\\pdffiles\\Python編碼規(guī)范中文版.pdf")
#?getNumPages()?獲取總頁數(shù)
for?page?in?range(file_reader.getNumPages()):
????#?實例化對象
????file_writer?=?PdfFileWriter()
????#?將遍歷的每一頁添加到實例化對象中
????file_writer.addPage(file_reader.getPage(page))
????with?open("D:\\pdffiles\\{}.pdf".format(page),'wb')?as?out:
????????file_writer.write(out)

合并PDF
將上述分割的pdf合并成一個文件
「示例代碼」
from?PyPDF2?import??PdfFileReader,?PdfFileWriter
file_writer?=?PdfFileWriter()
for?page?in?range(34):
????#?循環(huán)讀取需要合并pdf文件
????file_reader?=?PdfFileReader("D:\\pdffiles\\{}.pdf".format(page))
????#?遍歷每個pdf的每一頁
????for?page?in?range(file_reader.getNumPages()):
????????#?寫入實例化對象中
????????file_writer.addPage(file_reader.getPage(page))
with?open("D:\\pdffiles\\合并.pdf",'wb')?as?out:
????file_writer.write(out)
PDF旋轉(zhuǎn)
#?旋轉(zhuǎn)pdf,只能按照90度的倍數(shù)旋轉(zhuǎn)
from?PyPDF2?import??PdfFileReader,?PdfFileWriter
file_reader?=?PdfFileReader("D:\\pdffiles\\Python編碼規(guī)范中文版.pdf")
file_writer?=?PdfFileWriter()
page?=?file_reader.getPage(0).rotateClockwise(90)?#?第1頁順時針旋轉(zhuǎn)90度
file_writer.addPage(page)?#?寫入
page?=?file_reader.getPage(1).rotateCounterClockwise(90)?#?第2頁逆時針旋轉(zhuǎn)90度
file_writer.addPage(page)?#?寫入
with?open("D:\\pdffiles\\旋轉(zhuǎn).pdf",'wb')?as?out:
????file_writer.write(out)
PDF加密解密
「添加密碼」
from?PyPDF2?import??PdfFileReader,?PdfFileWriter
file_reader?=?PdfFileReader("D:\\pdffiles\\Python編碼規(guī)范中文版.pdf")
file_writer?=?PdfFileWriter()
for?page?in?range(file_reader.getNumPages()):
????file_writer.addPage(file_reader.getPage(page))
file_writer.encrypt('123456')?#?設(shè)置密碼
with?open("D:\\pdffiles\\加密后.pdf",'wb')?as?out:
????file_writer.write(out)
打開文件,提示輸入密碼

「解除密碼」
from?PyPDF2?import??PdfFileReader,?PdfFileWriter
file_reader?=?PdfFileReader("D:\\pdffiles\\加密后.pdf")
file_reader.decrypt('123456')
file_writer?=?PdfFileWriter()
for?page?in?range(file_reader.getNumPages()):
????file_writer.addPage(file_reader.getPage(page))
with?open("D:\\pdffiles\\解密后.pdf",'wb')?as?out:
????file_writer.write(out)
PDF添加水印
首先準備一個水印文檔,可以用空白word添加圖片或者文字轉(zhuǎn)成pdf文件。

「示例代碼」
#?添加水印
from?PyPDF2?import??PdfFileReader,?PdfFileWriter
from?copy?import?copy
sy?=?PdfFileReader("D:\\pdffiles\\水印.pdf")
mark_page?=?sy.getPage(0)?#?水印所在的頁數(shù)
#?讀取添加水印的文件
file_reader?=?PdfFileReader("D:\\pdffiles\\Python編碼規(guī)范中文版.pdf")
file_writer?=?PdfFileWriter()
for?page?in?range(file_reader.getNumPages()):
????#?讀取需要添加水印每一頁pdf
????source_page?=?file_reader.getPage(page)
????new_page?=?copy(mark_page)?#
????new_page.mergePage(source_page)?#?new_page(水印)在下面,source_page原文在上面
????file_writer.addPage(new_page)
with?open("D:\\pdffiles\\添加水印后.pdf",'wb')?as?out:
????file_writer.write(out)
添加水印后的文檔:


評論
圖片
表情
