Python自動化辦公系列之Python操作PDF

 本文是鑑於有些粉絲的工作需求,有時候需要遇到這些文件的處理。因此,我寫了一個文章集合,供大家參考。全篇包括三個章節,分別爲: Python使用openpyxl操作excel、 python使用PyPDF2和pdfplumber操作pdf 、 python使用python-docx操作word 。本篇爲第二章節。

全文已整理爲pdf,可按文末指引獲取。

本章目錄

章節二

python使用PyPDF2和pdfplumber操作pdf 

1、PyPDF2和pdfplumber庫介紹

2、python提取PDF文字內容

1)利用pdfplumber提取文字

2)利用pdfplumber提取表格並寫入excel

3、PDF合併及頁面的排序和旋轉

 1)分割及合併pdf

① 合併pdf

② 拆分pdf

 2)旋轉及排序pdf

 ① 旋轉pdf

② 排序pdf

4、pdf批量加水印及加密、解密

 1)批量加水印

2)批量加密、解密

① 加密pdf

② 解密pdf並保存爲未加密的pdf 

上下滾動查看更多

章節二:python使用PyPDF2和pdfplumber操作pdf

1、PyPDF2和pdfplumber庫介紹

  • PyPDF2官網:PyPDF2官網 ( https://pythonhosted.org/PyPDF2/ ),可以更好的讀取、寫入、分割、合併PDF文件;

  • pdfplumber官網:pdfplumber官網( https://github.com/jsvine/pdfplumber ),可以更好地讀取PDF文件內容和提取PDF中的表格;

  • 這兩個庫不屬於python標準庫,都需要單獨安裝;

2、python提取PDF文字內容

1)利用pdfplumber提取文字

import PyPDF2
import pdfplumber

with pdfplumber.open("餐飲企業綜合分析.pdf") as p:
    page = p.pages[2]
    print(page.extract_text())
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:

2)利用pdfplumber提取表格並寫入excel

  • extract_table():如果一頁有一個表格;

  • extract_tables():如果一頁有多個表格;

import PyPDF2
import pdfplumber
from openpyxl import Workbook

with pdfplumber.open("餐飲企業綜合分析.pdf") as p:
    page = p.pages[4]
    table = page.extract_table()
    print(table)
    
    workbook = Workbook()
    sheet = workbook.active
    for row in table:
        if not "".join() == ""
            sheet.append(row)
    workbook.save(filename = "新pdf.xlsx")
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:缺陷:可以看到,這裏提取出來的表格有很多空行,怎麼去掉這些空行呢?判斷:將列表中每個元素都連接成一個字符串,如果還是一個空字符串那麼肯定就是空行。

import PyPDF2
import pdfplumber
from openpyxl import Workbook

with pdfplumber.open("餐飲企業綜合分析.pdf") as p:
    page = p.pages[4]
    table = page.extract_table()
    print(table)
    
    workbook = Workbook()
    sheet = workbook.active
    for row in table:
        if not "".join([str(i) for i in row]) == "":
            sheet.append(row)
    workbook.save(filename = "新pdf.xlsx")
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:

3、PDF合併及頁面的排序和旋轉

1)分割及合併pdf

① 合併pdf

首先,我們有如下幾個文件,可以發現這裏共有三個PDF文件需要我們合併。同時可以發現他們的文件名都是有規律的(如果文件名,沒有先後順序,我們合併起來就沒有意義了。)代碼如下:

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_writer = PdfFileWriter()
for i in range(1,len(os.listdir(r"G:\6Tipdm\7python辦公自動化\concat_pdf"))+1):
    print(i*50+1,(i+1)*50)
    pdf_reader = PdfFileReader("G:\\6Tipdm\\7python辦公自動化\\concat_pdf\{}-{}.pdf".format(i*50+1,(i+1)*50))
    for page in range(pdf_reader.getNumPages()):
        pdf_writer.addPage(pdf_reader.getPage(page))
        
with open("G:\\6Tipdm\\7python辦公自動化\\concat_pdf\merge.pdf", "wb") as out:
    pdf_writer.write(out)
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:

② 拆分pdf

這裏有一個“時間序列.pdf”的文件,共3頁,我們將其每一頁存爲一個PDF文件。代碼如下:

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_reader = PdfFileReader(r"G:\6Tipdm\7python辦公自動化\concat_pdf\時間序列.pdf")
for page in range(pdf_reader.getNumPages()):
    pdf_writer = PdfFileWriter()
    pdf_writer.addPage(pdf_reader.getPage(page))
    with open(f"G:\\6Tipdm\\7python辦公自動化\\concat_pdf\\{page}.pdf", "wb") as out:
        pdf_writer.write(out)
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:

2)旋轉及排序pdf

① 旋轉pdf

  • .rotateClockwise(90的倍數):順時針旋轉90度

  • .rotateCounterClockwise(90的倍數):逆時針旋轉90度

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_reader = PdfFileReader(r"G:\6Tipdm\7python辦公自動化\concat_pdf\時間序列.pdf")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
    if page % 2 == 0:
        rotation_page = pdf_reader.getPage(page).rotateCounterClockwise(90)
    else:
        rotation_page = pdf_reader.getPage(page).rotateClockwise(90)
    pdf_writer.addPage(rotation_page)
    with open("G:\\6Tipdm\\7python辦公自動化\\concat_pdf\\旋轉.pdf", "wb") as out:
        pdf_writer.write(out)
"""
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼0

上述代碼中,我們循環遍歷了這個pdf,對於偶數頁我們逆時針旋轉90°,對於奇數頁我們順時針旋轉90°;
注意:旋轉的角度只能是90的倍數;
"""

其中一頁效果展示如下:

② 排序pdf

需求:我們有一個PDF文件,我們需要倒序排列,應該怎麼做呢?首先,我們來看python中,怎麼倒敘打印一串數字,如下圖所示。那麼倒序排列一個pdf,思路同上,代碼如下:

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_reader = PdfFileReader(r"G:\6Tipdm\7python辦公自動化\concat_pdf\時間序列.pdf")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()-1, -1, -1):
    pdf_writer.addPage(pdf_reader.getPage(page))
with open("G:\\6Tipdm\\7python辦公自動化\\concat_pdf\\倒序.pdf", "wb") as out:
        pdf_writer.write(out)
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:

4、pdf批量加水印及加密、解密

1)批量加水印

from PyPDF2 import PdfFileReader, PdfFileWriter
from copy import copy

water = PdfFileReader(r"G:\6Tipdm\7python辦公自動化\concat_pdf\水印.pdf")
water_page = water.getPage(0)

pdf_reader = PdfFileReader(r"G:\6Tipdm\7python辦公自動化\concat_pdf\aa.pdf")
pdf_writer = PdfFileWriter()

for page in range(pdf_reader.getNumPages()):
    my_page = pdf_reader.getPage(page)
    new_page = copy(water_page)
    new_page.mergePage(my_page)
    pdf_writer.addPage(new_page)
with open("G:\\6Tipdm\\7python辦公自動化\\concat_pdf\\添加水印後的aa.pdf", "wb") as out:
        pdf_writer.write(out)  
"""
這裏有一點需要注意:進行pdf合併的時候,我們希望“水印”在下面,文字在上面,因此是“水印”.mergePage(“圖片頁”)
"""
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:

2)批量加密、解密

  • 這裏所說的“解密”,是在知道pdf的密碼下,去打開pdf,而不是暴力破解;

① 加密pdf

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_reader = PdfFileReader(r"G:\6Tipdm\7python辦公自動化\concat_pdf\時間序列.pdf")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
    pdf_writer.addPage(pdf_reader.getPage(page))
# 添加密碼
pdf_writer.encrypt("a123456")
with open("G:\\6Tipdm\\7python辦公自動化\\concat_pdf\\時間序列.pdf", "wb") as out:
        pdf_writer.write(out)  
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:

② 解密pdf並保存爲未加密的pdf

from PyPDF2 import PdfFileReader, PdfFileWriter

pdf_reader = PdfFileReader(r"G:\6Tipdm\7python辦公自動化\concat_pdf\時間序列.pdf")
# 解密pdf
pdf_reader.decrypt("a123456")
pdf_writer = PdfFileWriter()
for page in range(pdf_reader.getNumPages()):
    pdf_writer.addPage(pdf_reader.getPage(page))
with open("G:\\6Tipdm\\7python辦公自動化\\concat_pdf\\未加密的時間序列.pdf", "wb") as out:
        pdf_writer.write(out)  
加python學習qq羣:775690737  送python零基礎入門學習資料+99個源碼

結果如下:

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章