import PyPDF2import pdfplumber
with pdfplumber.open("餐飲企業綜合分析.pdf") as p: page = p.pages[2] print(page.extract_text())結果如下:
2)利用pdfplumber提取表格並寫入excelextract_table():如果一頁有一個表格;extract_tables():如果一頁有多個表格;import PyPDF2import pdfplumberfrom 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")結果如下:
缺陷:可以看到,這裡提取出來的表格有很多空行,怎麼去掉這些空行呢?判斷:將列表中每個元素都連接成一個字符串,如果還是一個空字符串那麼肯定就是空行。
import PyPDF2import pdfplumberfrom 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")結果如下:
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)結果如下:
② 拆分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)結果如下:
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)"""上述代碼中,我們循環遍歷了這個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)結果如下:
4、pdf批量加水印及加密、解密1)批量加水印from PyPDF2 import PdfFileReader, PdfFileWriterfrom 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(「圖片頁」)"""結果如下:
2)批量加密、解密這裡所說的「解密」,是在知道pdf的密碼下,去打開pdf,而不是暴力破解;① 加密pdffrom 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)結果如下:
② 解密pdf並保存為未加密的pdffrom PyPDF2 import PdfFileReader, PdfFileWriter
pdf_reader = PdfFileReader(r"G:\6Tipdm\7python辦公自動化\concat_pdf\時間序列.pdf")# 解密pdfpdf_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)結果如下: