【Python基礎(chǔ)】python使用PyPDF2和pdfplumber操作pdf
1、PyPDF2和pdfplumber庫介紹
PyPDF2官網(wǎng):PyPDF2官網(wǎng) ,可以更好的讀取、寫入、分割、合并PDF文件; pdfplumber官網(wǎng):pdfplumber官網(wǎng),可以更好地讀取PDF文件內(nèi)容和提取PDF中的表格; 這兩個庫不屬于python標準庫,都需要單獨安裝;
2、python提取PDF文字內(nèi)容
1)利用pdfplumber提取文字
import PyPDF2import pdfplumberwith pdfplumber.open("餐飲企業(yè)綜合分析.pdf") as p:page = p.pages[2]print(page.extract_text())
結(jié)果如下:
2)利用pdfplumber提取表格并寫入excel
extract_table():如果一頁有一個表格; extract_tables():如果一頁有多個表格;
import PyPDF2import pdfplumberfrom openpyxl import Workbookwith pdfplumber.open("餐飲企業(yè)綜合分析.pdf") as p:page = p.pages[4]table = page.extract_table()print(table)workbook = Workbook()sheet = workbook.activefor row in table:if not "".join() == ""sheet.append(row)workbook.save(filename = "新pdf.xlsx")
結(jié)果如下:
缺陷:可以看到,這里提取出來的表格有很多空行,怎么去掉這些空行呢?判斷:將列表中每個元素都連接成一個字符串,如果還是一個空字符串那么肯定就是空行。
import PyPDF2import pdfplumberfrom openpyxl import Workbookwith pdfplumber.open("餐飲企業(yè)綜合分析.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")
結(jié)果如下:
3、PDF合并及頁面的排序和旋轉(zhuǎn)
1)分割及合并pdf
① 合并pdf
首先,我們有如下幾個文件,可以發(fā)現(xiàn)這里共有三個PDF文件需要我們合并。同時可以發(fā)現(xiàn)他們的文件名都是有規(guī)律的(如果文件名,沒有先后順序,我們合并起來就沒有意義了。)
代碼如下:
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)
結(jié)果如下:
② 拆分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)
結(jié)果如下:
2)旋轉(zhuǎn)及排序pdf
① 旋轉(zhuǎn)pdf
.rotateClockwise(90的倍數(shù)):順時針旋轉(zhuǎn)90度 .rotateCounterClockwise(90的倍數(shù)):逆時針旋轉(zhuǎn)90度
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_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\\旋轉(zhuǎn).pdf", "wb") as out:pdf_writer.write(out)"""上述代碼中,我們循環(huán)遍歷了這個pdf,對于偶數(shù)頁我們逆時針旋轉(zhuǎn)90°,對于奇數(shù)頁我們順時針旋轉(zhuǎn)90°;注意:旋轉(zhuǎn)的角度只能是90的倍數(shù);"""
其中一頁效果展示如下:
② 排序pdf
需求:我們有一個PDF文件,我們需要倒序排列,應該怎么做呢?首先,我們來看python中,怎么倒敘打印一串數(shù)字,如下圖所示。
那么倒序排列一個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)
結(jié)果如下:
4、pdf批量加水印及加密、解密
1)批量加水印
from PyPDF2 import PdfFileReader, PdfFileWriterfrom 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(“圖片頁”)"""
結(jié)果如下:
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)
結(jié)果如下:
② 解密pdf并保存為未加密的pdf
from PyPDF2 import PdfFileReader, PdfFileWriterpdf_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)
結(jié)果如下:
往期精彩回顧
本站qq群704220115,加入微信群請掃碼:
評論
圖片
表情
