<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】用 Python 來實現(xiàn)PDF 的各種操作(附網(wǎng)站和操作指導(dǎo))

          共 5234字,需瀏覽 11分鐘

           ·

          2020-08-02 13:07

          導(dǎo)言

          PDF 處理是日常工作中的常見需求,包括 PDF 合并、刪除、提取等。更復(fù)雜的任務(wù)如:將 PDF 轉(zhuǎn)換成 圖像。

          下面通過幾個簡單的例子和一份代碼,幫助大家解決上面的需求,操作非常簡單。

          在文末我會提供一份源碼和一個神奇的 PDF 處理網(wǎng)站幫你解決 PDF 處理的煩惱。

          PyMuPDF 介紹

          為什么使用 Python,那還不是 Python 有著強大的第三方工具包,我們想要的功能興許就有。

          PyMuPDF 就是我們需要的工具,官方文檔對他的簡介是

          PyMuPDF 是針對 MuPDF 的 Python 綁定,它是一個輕量級 PDF 和 XPS 查看器。MuPDF 可以訪問 PDF,XPS,OpenXPS,CBZ(漫畫書檔案),F(xiàn)B2 和 EPUB(電子書)格式的文件。這些是擴展名為.pdf,.xps,.oxps,.cbz,.fb2 或.epub 的文件(因此您可以使用 Python 開發(fā)電子書查看器)。

          官方文檔:https://pymupdf.readthedocs.io/en/latest/intro.html

          這里有個細節(jié)需要說明的是,Python 的第三方包一般是安裝的名稱和導(dǎo)入的名稱是一樣的,比如 numpy 的安裝和使用是

          pip?install?numpy?#?numpy?包的安裝

          import?numpy??#?numpy?包的導(dǎo)入

          但是對于 PyMuPDF ?這個包就不一樣了,安裝和使用的包名是不一樣的,這個是歷史遺留下來的原因,知道有這回事就行。

          PyMuPDF ?的安裝是這樣子的

          pip?install?PyMuPDF

          PyPI 源:https://pypi.org/project/PyMuPDF/

          PyMuPDF ?的導(dǎo)入是這樣子的

          import?fitz

          PDF 各種處理

          拆分與提取

          拆分與提取 PDF 文件的,使用的是 clean 命令,同時該命令也可以用于文檔加密,壓縮、刪除頁面等操作,基本說明如下:

          python?-m?fitz?clean?-h
          usage:?fitz?clean?[-h]?[-password?PASSWORD]
          ????????????????[-encryption?{keep,none,rc4-40,rc4-128,aes-128,aes-256}]
          ????????????????[-owner?OWNER]?[-user?USER]?[-garbage?{0,1,2,3,4}]
          ????????????????[-compress]?[-ascii]?[-linear]?[-permission?PERMISSION]
          ????????????????[-sanitize]?[-pretty]?[-pages?PAGES]
          ????????????????input?output

          --------------?optimize?PDF?or?create?sub-PDF?if?pages?given?--------------

          positional?arguments:
          input?????????????????PDF?filename
          output????????????????output?PDF?filename

          optional?arguments:
          -h,?--help????????????show?this?help?message?and?exit
          -password?PASSWORD????password
          -encryption?{keep,none,rc4-40,rc4-128,aes-128,aes-256}
          ??????????????????????encryption?method
          -owner?OWNER??????????owner?password
          -user?USER????????????user?password
          -garbage?{0,1,2,3,4}??garbage?collection?level
          -compress?????????????compress?(deflate)?output
          -ascii????????????????ASCII?encode?binary?data
          -linear???????????????format?for?fast?web?display
          -permission?PERMISSION
          ??????????????????????integer?with?permission?levels
          -sanitize?????????????sanitize?/?clean?contents
          -pretty???????????????prettify?PDF?structure
          -pages?PAGES??????????output?selected?pages,?format:?1,5-7,50-N

          以下命令只需在終端運行即可:

          參數(shù):2-N 代表去除第一頁

          python?-m?fitz?clean?-sanitize?-pages?2-N?F:\視覺工程師必須知道的工業(yè)相機50問.pdf?F:\去除第一頁.pdf

          其他功能請自行嘗試

          提取字體和圖像(非 PDF 頁面)

          將字體或圖像從選定的 PDF 頁面提取到所需目錄,基本說明如下:

          python?-m?fitz?extract?-h
          usage:?fitz?extract?[-h]?[-images]?[-fonts]?[-output?OUTPUT]?[-password?PASSWORD]
          ????????????????????[-pages?PAGES]
          ????????????????????input

          ---------------------?extract?images?and?fonts?to?disk?--------------------

          positional?arguments:
          input?????????????????PDF?filename

          optional?arguments:
          -h,?--help????????????show?this?help?message?and?exit
          -images???????????????extract?images
          -fonts????????????????extract?fonts
          -output?OUTPUT????????output?directory,?defaults?to?current
          -password?PASSWORD????password
          -pages?PAGES??????????only?consider?these?pages,?format:?1,5-7,50-N

          視覺工程師必須知道的工業(yè)相機50問.pdf 文件中的圖片和字體提取到 提取結(jié)果 文件夾中

          python?-m?fitz?extract?-images?-fonts?-output?F:\提取結(jié)果?F:\視覺工程師必須知道的工業(yè)相機50問.pdf
          saved?9?fonts?to?'F:\提取結(jié)果'
          saved?6?images?to?'F:\提取結(jié)果'

          合并多份文檔

          合并多份 PDF 文檔,使用的是 join 命令,可以指定頁面進行合并,同時需要關(guān)注 PDF 是否需要密碼才能打開,基本說明如下:

          python?-m?fitz?join?-h
          usage:?fitz?join?[-h]?-output?OUTPUT?[input?[input?...]]

          ----------------------------?join?PDF?documents?---------------------------

          positional?arguments:
          input???????????input?filenames

          optional?arguments:
          -h,?--help??????show?this?help?message?and?exit
          -output?OUTPUT??output?filename

          specify?each?input?as?'filename[,password[,pages]]'

          以下命令只需在終端運行即可:合并兩份文檔的全部

          python?-m?fitz?join?-output?"F:\合并兩份文檔.pdf"?"F:\視覺工程師必須知道的工業(yè)相機50問.pdf"?"F:\Modern?CMake文檔.pdf"

          合并兩份文檔的部分,選擇 視覺工程師必須知道的工業(yè)相機50問 文件的第一頁和 ?Modern CMake文檔.pdf 的 5 到最后一頁進行合并,下面語句中有兩個 ,, 是因為要合并的文檔不需要密碼,如果需要密碼,就把兩個逗號替換成 密碼即可。

          • 5-N 代表第五頁開始到文檔的末尾
          python?-m?fitz?join?-output?F:\合并兩份文檔.pdf?F:\視覺工程師必須知道的工業(yè)相機50問.pdf,,1?"F:\Modern?CMake文檔.pdf",,5-N

          PDF 轉(zhuǎn)換成圖片

          這個功能沒辦法像上面那樣一個命令就能解決,不過通過查看文檔,我們也不難寫出代碼

          import?sys,?fitz,?os,?datetime

          def?pyMuPDF_fitz(pdfPath,?imagePath):
          ????startTime_pdf2img?=?datetime.datetime.now()#開始時間

          ????print("imagePath="+imagePath)
          ????pdfDoc?=?fitz.open(pdfPath)?#?打開文件
          ????for?pg?in?range(pdfDoc.pageCount):?#?遍歷所有頁面
          ????????page?=?pdfDoc[pg]
          ????????rotate?=?int(0)?#?頁面旋轉(zhuǎn)角度
          ????????#?每個尺寸的縮放系數(shù)為1.3,這將為我們生成分辨率提高2.6的圖像。
          ????????#?此處若是不做設(shè)置,默認圖片大小為:792X612, dpi=96
          ????????zoom_x?=?1.33333333?#(1.33333333-->1056x816)???(2-->1584x1224)
          ????????zoom_y?=?1.33333333
          ????????mat?=?fitz.Matrix(zoom_x,?zoom_y).preRotate(rotate)
          ????????pix?=?page.getPixmap(matrix=mat,?alpha=False)

          ????????if?not?os.path.exists(imagePath):#判斷存放圖片的文件夾是否存在
          ????????????os.makedirs(imagePath)?#?若圖片文件夾不存在就創(chuàng)建

          ????????pix.writePNG(imagePath+'/'+'images_%s.png'?%?pg)#將圖片寫入指定的文件夾內(nèi)

          ????endTime_pdf2img?=?datetime.datetime.now()#結(jié)束時間
          ????print('pdf2img時間=',(endTime_pdf2img?-?startTime_pdf2img).seconds)

          if?__name__?==?"__main__":
          ????pdfPath?=?'./視覺工程師必須知道的工業(yè)相機50問.pdf'
          ????imagePath?=?'./提取結(jié)果'
          ????pyMuPDF_fitz(pdfPath,?imagePath)

          旋轉(zhuǎn) 10 度的結(jié)果

          神奇的網(wǎng)站明天再放出,哈哈哈~~~

          以上就是 PDF 處理的幾個常用功能,希望能夠幫到你,喜歡的朋友感謝三連~~~

          參考:

          • https://pymupdf.readthedocs.io/en/latest/index.html
          • https://www.jianshu.com/p/f57cc64b9f5e


          往期精彩回顧





          獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:

          https://t.zsxq.com/yFQV7am

          本站qq群1003271085。

          加入微信群請掃碼進群:

          瀏覽 41
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产av无码婷婷 国产av无码网站 | 婷婷五月天综合导航 | 三级三级看三级91 | 先锋av在线资源 先锋av资源在线 | 无码人妻AV |