用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn)
前言
某個(gè)夜深人靜的夜晚,夜微涼風(fēng)微揚(yáng),月光照進(jìn)我的書(shū)房~
當(dāng)我打開(kāi)文件夾以回顧往事之余,驚現(xiàn)許多看似雜亂的無(wú)聊代碼。我拍腿正坐,一個(gè)想法油然而生:“生活已然很無(wú)聊,不如再無(wú)聊些叭”。
于是,我決定開(kāi)一個(gè)專題,便稱之為kimol君的無(wú)聊小發(fā)明。
妙…啊~~~
想必小伙伴都經(jīng)歷過(guò),當(dāng)你想要把PDF轉(zhuǎn)為WORD時(shí),自己打字赫赫甩在你眼前:
不充錢就想白嫖?? 想得美~
然而,kimol君是不會(huì)退縮的,畢竟迎難而上是傳統(tǒng)美德。于是,今天的主題出來(lái)了:用python寫一個(gè)PDF轉(zhuǎn)WORD的小工具(基于某網(wǎng)站接口)。
一、思路分析
網(wǎng)上一搜,你可以發(fā)現(xiàn)很多PDF轉(zhuǎn)換的工具,其中不乏在線轉(zhuǎn)換的網(wǎng)站,比如這樣的:
那么,通過(guò)網(wǎng)站提供的測(cè)試接口,我們便可以通過(guò)爬蟲(chóng)模擬的方式實(shí)現(xiàn)轉(zhuǎn)換。
沒(méi)有錯(cuò)了~思路就是如此的簡(jiǎn)單明了,今天的主角便是:https://app.xunjiepdf.com
通過(guò)抓包分析,知道這是一個(gè)POST請(qǐng)求,接下來(lái)用requests庫(kù)模擬即可。
需要注意的是,這個(gè)接口僅用于測(cè)試,所以可供轉(zhuǎn)換的頁(yè)面等都有所限制,如需更完整的功能還請(qǐng)支持原版。
二、我的代碼
正所謂一萬(wàn)個(gè)coders,就有一萬(wàn)種codes,以下為我的代碼,僅供參考。
導(dǎo)入相關(guān)庫(kù):
import time import requests
定義PDF2Word類:
class PDF2Word(): def __init__(self): self.machineid = 'ccc052ee5200088b92342303c4ea9399' self.token = '' self.guid = '' self.keytag = '' def produceToken(self): url = 'https://app.xunjiepdf.com/api/producetoken' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} data = {'machineid':self.machineid} res = requests.post(url,headers=headers,data=data) res_json = res.json() if res_json['code'] == 10000: self.token = res_json['token'] self.guid = res_json['guid'] print('成功獲取token') return True else: return False def uploadPDF(self,filepath): filename = filepath.split('/')[-1] files = {'file': open(filepath,'rb')} url = 'https://app.xunjiepdf.com/api/Upload' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': '*/*', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/pdf', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} params = ( ('tasktype', 'pdf2word'), ('phonenumber', ''), ('loginkey', ''), ('machineid', self.machineid), ('token', self.token), ('limitsize', '2048'), ('pdfname', filename), ('queuekey', self.guid), ('uploadtime', ''), ('filecount', '1'), ('fileindex', '1'), ('pagerange', 'all'), ('picturequality', ''), ('outputfileextension', 'docx'), ('picturerotate', '0,undefined'), ('filesequence', '0,undefined'), ('filepwd', ''), ('iconsize', ''), ('picturetoonepdf', ''), ('isshare', '0'), ('softname', 'pdfonlineconverter'), ('softversion', 'V5.0'), ('validpagescount', '20'), ('limituse', '1'), ('filespwdlist', ''), ('fileCountwater', '1'), ('languagefrom', ''), ('languageto', ''), ('cadverchose', ''), ('pictureforecolor', ''), ('picturebackcolor', ''), ('id', 'WU_FILE_1'), ('name', filename), ('type', 'application/pdf'), ('lastModifiedDate', ''), ('size', ''),) res= requests.post(url,headers=headers,params=params,files=files) res_json = res.json() if res_json['message'] == '上傳成功': self.keytag = res_json['keytag'] print('成功上傳PDF') return True else: return False def progress(self): url = 'https://app.xunjiepdf.com/api/Progress' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 'Accept': 'text/plain, */*; q=0.01', 'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Origin': 'https://app.xunjiepdf.com', 'Connection': 'keep-alive', 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} data = { 'tasktag': self.keytag, 'phonenumber': '', 'loginkey': '', 'limituse': '1'} res= requests.post(url,headers=headers,data=data) res_json = res.json() if res_json['message'] == '處理成功': print('PDF處理完成') return True else: print('PDF處理中') return False def downloadWord(self,output): url = 'https://app.xunjiepdf.com/download/fileid/%s'%self.keytag res = requests.get(url) with open(output,'wb') as f: f.write(res.content) print('PDF下載成功("%s")'%output) def convertPDF(self,filepath,outpath): filename = filepath.split('/')[-1] filename = filename.split('.')[0]+'.docx' self.produceToken() self.uploadPDF(filepath) while True: res = self.progress() if res == True: break time.sleep(1) self.downloadWord(outpath+filename)
執(zhí)行主函數(shù):
if __name__=='__main__': pdf2word = PDF2Word() pdf2word.convertPDF('001.pdf','')
注意:convertPDF函數(shù)有兩個(gè)參數(shù),第一個(gè)為需要轉(zhuǎn)換的PDF,第二個(gè)參數(shù)為轉(zhuǎn)換后的目錄。
run一下,一鍵入魂,".docx"文件已經(jīng)躺在了我的目錄中,舒服了~
寫在最后
到此這篇關(guān)于用python寫PDF轉(zhuǎn)換器的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)用python寫PDF轉(zhuǎn)換器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python解析并讀取PDF文件內(nèi)容的方法
- Python生成pdf文件的方法
- 基于Python實(shí)現(xiàn)對(duì)PDF文件的OCR識(shí)別
- python批量實(shí)現(xiàn)Word文件轉(zhuǎn)換為PDF文件
- Python實(shí)現(xiàn)抓取HTML網(wǎng)頁(yè)并以PDF文件形式保存的方法
- Python使用到第三方庫(kù)PyMuPDF圖片與pdf相互轉(zhuǎn)換
- Python實(shí)現(xiàn)將DOC文檔轉(zhuǎn)換為PDF的方法
- Python 用三行代碼提取PDF表格數(shù)據(jù)
- Python2.7讀取PDF文件的方法示例
- 淺談Python處理PDF的方法
相關(guān)文章
python查找指定依賴包簡(jiǎn)介信息實(shí)現(xiàn)
這篇文章主要為大家介紹了python查找指定依賴包簡(jiǎn)介信息實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Python實(shí)現(xiàn)注冊(cè)、登錄小程序功能
本文通過(guò)實(shí)例代碼給大家介紹了Python實(shí)現(xiàn)登錄、注冊(cè)小程序功能,代碼簡(jiǎn)單易懂非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-09-09使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程
Twisted的異步工作模式使其在非阻塞情況下可以擁有較高的性能,這里我們來(lái)看一下使用Python的Twisted框架構(gòu)建非阻塞下載程序的實(shí)例教程,包括服務(wù)器端與客戶端的實(shí)踐.2016-05-05Python中的?Numpy?數(shù)組形狀改變及索引切片
這篇文章主要介紹了Python中的?Numpy?數(shù)組形狀改變及索引切片,Numpy提供了一個(gè)reshape()方法,它可以改變數(shù)組的形狀,返回一個(gè)新的數(shù)組,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章2022-05-05python 定時(shí)器,實(shí)現(xiàn)每天凌晨3點(diǎn)執(zhí)行的方法
今天小編就為大家分享一篇python 定時(shí)器,實(shí)現(xiàn)每天凌晨3點(diǎn)執(zhí)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02使用python求斐波那契數(shù)列中第n個(gè)數(shù)的值示例代碼
這篇文章主要給大家介紹了關(guān)于使用python求斐波那契數(shù)列中第n個(gè)數(shù)的值的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07