<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【Python基礎(chǔ)】python使用PyPDF2和pdfplumber操作pdf

          共 5060字,需瀏覽 11分鐘

           ·

          2021-02-19 00:36

          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 pdfplumber
          with 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 Workbook
          with pdfplumber.open("餐飲企業(yè)綜合分析.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")

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

          import PyPDF2import pdfplumberfrom openpyxl import Workbook
          with pdfplumber.open("餐飲企業(yè)綜合分析.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")

          結(jié)果如下:

          3、PDF合并及頁面的排序和旋轉(zhuǎn)

          1)分割及合并pdf
          ① 合并pdf

          首先,我們有如下幾個文件,可以發(fā)現(xiàn)這里共有三個PDF文件需要我們合并。同時可以發(fā)現(xiàn)他們的文件名都是有規(guī)律的(如果文件名,沒有先后順序,我們合并起來就沒有意義了。)代碼如下:

          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)

          結(jié)果如下:

          ② 拆分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)

          結(jié)果如下:

          2)旋轉(zhuǎn)及排序pdf
          ① 旋轉(zhuǎn)pdf
          • .rotateClockwise(90的倍數(shù)):順時針旋轉(zhuǎn)90度
          • .rotateCounterClockwise(90的倍數(shù)):逆時針旋轉(zhuǎn)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\\旋轉(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, 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)

          結(jié)果如下:

          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(“圖片頁”)"""

          結(jié)果如下:

          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)

          結(jié)果如下:

          ② 解密pdf并保存為未加密的pdf
          from 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)

          結(jié)果如下:


          作者 :Huang Supreme

          往期精彩回顧





          本站qq群704220115,加入微信群請掃碼:

          瀏覽 97
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  蜜桃视频 成人app ios | 黄网在线 | 99精品在线免费视频 | 久久精品视频在线 | 成人在线台湾 |