本文是鑑於有些粉絲的工作需求,有時候需要遇到這些文件的處理。因此,我寫了一個文章集合,供大家參考。全篇包括三個章節,分別爲: 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個源碼
結果如下: