【python】操作PDF全總結|pdfplumber&PyPDF2


轉載自:https://zhuanlan.zhihu.com/p/344384506(感謝大佬)

Python在自動化辦公方面有很多實用的第三方庫,可以很方便的處理word、excel、ppt、pdf文件,今天我們就學習一下Python處理PDF文檔的知識,Python處理pdf有很多第三方庫,這里先給大家介紹最常用的兩個庫「pdfplumber」、「pypdf2」。

「pdfplumber:」

pdfplumber庫按頁處理 pdf ,獲取頁面文字,提取表格等操作。

學習文檔:

「pypdf2:」

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

官方文檔:

安裝:

pip install pypdf2

pip install pdfplumber

pdfplumber

提取PDF文字

「提取單頁pdf文字」

# 提取pdf文字
import pdfplumber
with pdfplumber.open("D:\\pdffiles\\Python編碼規范中文版.pdf") as pdf:
    page01 = pdf.pages[0] #指定頁碼
    text = page01.extract_text()#提取文本
    print(text)

「提取所有頁pdf文字」

import pdfplumber
with pdfplumber.open("D:\\pdffiles\\Python編碼規范中文版.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()#提取文本
        print(text)

「提取所有pdf文字並寫入文本中」

import pdfplumber
with pdfplumber.open("D:\\pdffiles\\Python編碼規范中文版.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()#提取文本
        txt_file = open("D:\\pdffiles\\Python編碼規范中文版.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 中有兩個最常用的類:PdfFileReaderPdfFileWriter,分別用於讀取 PDF 和寫入 PDF。其中PdfFileReader傳入參數可以是一個打開的文件對象,也可以是表示文件路徑的字符串。而PdfFileWriter則必須傳入一個以寫方式打開的文件對象。

「PdfFileReader 對象的屬性和方法」

「PdfFileWriter 對象的屬性和方法」

分割PDF

from PyPDF2 import  PdfFileReader, PdfFileWriter
file_reader = PdfFileReader("D:\\pdffiles\\Python編碼規范中文版.pdf")
# getNumPages() 獲取總頁數
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):
    # 循環讀取需要合並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旋轉

# 旋轉pdf,只能按照90度的倍數旋轉
from PyPDF2 import  PdfFileReader, PdfFileWriter
file_reader = PdfFileReader("D:\\pdffiles\\Python編碼規范中文版.pdf")
file_writer = PdfFileWriter()
page = file_reader.getPage(0).rotateClockwise(90) # 第1頁順時針旋轉90度
file_writer.addPage(page) # 寫入
page = file_reader.getPage(1).rotateCounterClockwise(90) # 第2頁逆時針旋轉90度
file_writer.addPage(page) # 寫入
with open("D:\\pdffiles\\旋轉.pdf",'wb') as out:
    file_writer.write(out)

PDF加密解密

「添加密碼」

from PyPDF2 import  PdfFileReader, PdfFileWriter
file_reader = PdfFileReader("D:\\pdffiles\\Python編碼規范中文版.pdf")
file_writer = PdfFileWriter()
for page in range(file_reader.getNumPages()):
    file_writer.addPage(file_reader.getPage(page))

file_writer.encrypt('123456') # 設置密碼
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添加圖片或者文字轉成pdf文件。

「示例代碼」

# 添加水印
from PyPDF2 import  PdfFileReader, PdfFileWriter
from copy import copy
sy = PdfFileReader("D:\\pdffiles\\水印.pdf")
mark_page = sy.getPage(0) # 水印所在的頁數
# 讀取添加水印的文件
file_reader = PdfFileReader("D:\\pdffiles\\Python編碼規范中文版.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)

添加水印后的文檔:

如果覺得有用,歡迎點贊、轉發、收藏!人生不止,學習不止,一路同行!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM