【Python】用 Python 来实现PDF 的各种操作(附网站和操作指导)
導(dǎo)言
PDF 處理是日常工作中的常見需求,包括 PDF 合并、刪除、提取等。更復(fù)雜的任務(wù)如:將 PDF 轉(zhuǎn)換成 圖像。
下面通過幾個簡單的例子和一份代碼,幫助大家解決上面的需求,操作非常簡單。
在文末我會提供一份源碼和一個神奇的 PDF 處理網(wǎng)站幫你解決 PDF 處理的煩惱。
PyMuPDF 介紹
為什么使用 Python,那還不是 Python 有著強(qiáng)大的第三方工具包,我們想要的功能興許就有。
PyMuPDF 就是我們需要的工具,官方文檔對他的簡介是
PyMuPDF 是針對 MuPDF 的 Python 綁定,它是一個輕量級 PDF 和 XPS 查看器。MuPDF 可以訪問 PDF,XPS,OpenXPS,CBZ(漫畫書檔案),FB2 和 EPUB(電子書)格式的文件。這些是擴(kuò)展名為.pdf,.xps,.oxps,.cbz,.fb2 或.epub 的文件(因此您可以使用 Python 開發(fā)電子書查看器)。
官方文檔:https://pymupdf.readthedocs.io/en/latest/intro.html
這里有個細(xì)節(jié)需要說明的是,Python 的第三方包一般是安裝的名稱和導(dǎo)入的名稱是一樣的,比如 numpy 的安裝和使用是
pip?install?numpy?#?numpy?包的安裝import?numpy??#?numpy?包的導(dǎo)入但是對于 PyMuPDF ?這個包就不一樣了,安裝和使用的包名是不一樣的,這個是歷史遺留下來的原因,知道有這回事就行。
PyMuPDF ?的安裝是這樣子的
pip?install?PyMuPDFPyPI 源:https://pypi.org/project/PyMuPDF/
PyMuPDF ?的導(dǎo)入是這樣子的
import?fitzPDF 各種處理
拆分與提取
拆分與提取 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?filenameoptional?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?PERMISSIONinteger?with?permission?levels -sanitize?????????????sanitize?/?clean?contents -pretty???????????????prettify?PDF?structure -pages?PAGES??????????output?selected?pages,?format:?1,5-7,50-N以下命令只需在終端運(yùn)行即可:
參數(shù):2-N 代表去除第一頁
python?-m?fitz?clean?-sanitize?-pages?2-N?F:\視覺工程師必須知道的工業(yè)相機(jī)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?filenameoptional?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è)相機(jī)50問.pdf 文件中的圖片和字體提取到 提取結(jié)果 文件夾中
python?-m?fitz?extract?-images?-fonts?-output?F:\提取結(jié)果?F:\視覺工程師必須知道的工業(yè)相機(jī)50問.pdf saved?9?fonts?to?'F:\提取結(jié)果' saved?6?images?to?'F:\提取結(jié)果'合并多份文檔
合并多份 PDF 文檔,使用的是 join 命令,可以指定頁面進(jìn)行合并,同時需要關(guān)注 PDF 是否需要密碼才能打開,基本說明如下:
python?-m?fitz?join?-h usage:?fitz?join?[-h]?-output?OUTPUT?[input?[input?...]]----------------------------?join?PDF?documents?---------------------------positional?arguments: input???????????input?filenamesoptional?arguments: -h,?--help??????show?this?help?message?and?exit -output?OUTPUT??output?filenamespecify?each?input?as?'filename[,password[,pages]]'以下命令只需在終端運(yùn)行即可:合并兩份文檔的全部
python?-m?fitz?join?-output?"F:\合并兩份文檔.pdf"?"F:\視覺工程師必須知道的工業(yè)相機(jī)50問.pdf"?"F:\Modern?CMake文檔.pdf"合并兩份文檔的部分,選擇 視覺工程師必須知道的工業(yè)相機(jī)50問 文件的第一頁和 ?Modern CMake文檔.pdf 的 5 到最后一頁進(jìn)行合并,下面語句中有兩個 ,, 是因?yàn)橐喜⒌奈臋n不需要密碼,如果需要密碼,就把兩個逗號替換成 密碼即可。
5-N 代表第五頁開始到文檔的末尾
PDF 轉(zhuǎn)換成圖片
這個功能沒辦法像上面那樣一個命令就能解決,不過通過查看文檔,我們也不難寫出代碼
import?sys,?fitz,?os,?datetimedef?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è)置,默認(rèn)圖片大小為:792X612, dpi=96zoom_x?=?1.33333333?#(1.33333333-->1056x816)???(2-->1584x1224)zoom_y?=?1.33333333mat?=?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è)相機(jī)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
總結(jié)
以上是生活随笔為你收集整理的【Python】用 Python 来实现PDF 的各种操作(附网站和操作指导)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】全网最新最全Pyecha
- 下一篇: 【Python】全网最新最全Pyecha