【Python基础】python使用PyPDF2和pdfplumber操作pdf
1、PyPDF2和pdfplumber庫介紹
PyPDF2官網:PyPDF2官網 ,可以更好的讀取、寫入、分割、合并PDF文件;
pdfplumber官網:pdfplumber官網,可以更好地讀取PDF文件內容和提取PDF中的表格;
這兩個庫不屬于python標準庫,都需要單獨安裝;
2、python提取PDF文字內容
1)利用pdfplumber提取文字
import PyPDF2 import pdfplumberwith pdfplumber.open("餐飲企業綜合分析.pdf") as p:page = p.pages[2]print(page.extract_text())結果如下:
2)利用pdfplumber提取表格并寫入excel
extract_table():如果一頁有一個表格;
extract_tables():如果一頁有多個表格;
結果如下:缺陷:可以看到,這里提取出來的表格有很多空行,怎么去掉這些空行呢?判斷:將列表中每個元素都連接成一個字符串,如果還是一個空字符串那么肯定就是空行。
import PyPDF2 import pdfplumber from openpyxl import Workbookwith pdfplumber.open("餐飲企業綜合分析.pdf") as p:page = p.pages[4]table = page.extract_table()print(table)workbook = Workbook()sheet = workbook.activefor row in table:if not "".join([str(i) for i in row]) == "":sheet.append(row)workbook.save(filename = "新pdf.xlsx")結果如下:
3、PDF合并及頁面的排序和旋轉
1)分割及合并pdf
① 合并pdf
首先,我們有如下幾個文件,可以發現這里共有三個PDF文件需要我們合并。同時可以發現他們的文件名都是有規律的(如果文件名,沒有先后順序,我們合并起來就沒有意義了。)代碼如下:
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_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)結果如下:
② 拆分pdf
這里有一個“時間序列.pdf”的文件,共3頁,我們將其每一頁存為一個PDF文件。代碼如下:
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_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)結果如下:
2)旋轉及排序pdf
① 旋轉pdf
.rotateClockwise(90的倍數):順時針旋轉90度
.rotateCounterClockwise(90的倍數):逆時針旋轉90度
其中一頁效果展示如下:
② 排序pdf
需求:我們有一個PDF文件,我們需要倒序排列,應該怎么做呢?首先,我們來看python中,怎么倒敘打印一串數字,如下圖所示。那么倒序排列一個pdf,思路同上,代碼如下:
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_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)結果如下:
4、pdf批量加水印及加密、解密
1)批量加水印
from PyPDF2 import PdfFileReader, PdfFileWriter from copy import copywater = 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(“圖片頁”) """結果如下:
2)批量加密、解密
這里所說的“解密”,是在知道pdf的密碼下,去打開pdf,而不是暴力破解;
① 加密pdf
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_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)結果如下:
② 解密pdf并保存為未加密的pdf
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_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)結果如下:
作者 :Huang Supreme
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 本站qq群704220115,加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【Python基础】python使用PyPDF2和pdfplumber操作pdf的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【数据竞赛】Kaggle神技:一项堪比D
- 下一篇: Win11系统无法安装GPT分区的解决方