用python寫PDF轉(zhuǎn)換器的實現(xiàn)
前言
某個夜深人靜的夜晚,夜微涼風(fēng)微揚(yáng),月光照進(jìn)我的書房~
當(dāng)我打開文件夾以回顧往事之余,驚現(xiàn)許多看似雜亂的無聊代碼。我拍腿正坐,一個想法油然而生:“生活已然很無聊,不如再無聊些叭”。
于是,我決定開一個專題,便稱之為kimol君的無聊小發(fā)明。
妙…啊~~~
想必小伙伴都經(jīng)歷過,當(dāng)你想要把PDF轉(zhuǎn)為WORD時,自己打字赫赫甩在你眼前:

不充錢就想白嫖?? 想得美~
然而,kimol君是不會退縮的,畢竟迎難而上是傳統(tǒng)美德。于是,今天的主題出來了:用python寫一個PDF轉(zhuǎn)WORD的小工具(基于某網(wǎng)站接口)。
一、思路分析
網(wǎng)上一搜,你可以發(fā)現(xiàn)很多PDF轉(zhuǎn)換的工具,其中不乏在線轉(zhuǎn)換的網(wǎng)站,比如這樣的:

那么,通過網(wǎng)站提供的測試接口,我們便可以通過爬蟲模擬的方式實現(xiàn)轉(zhuǎn)換。
沒有錯了~思路就是如此的簡單明了,今天的主角便是:https://app.xunjiepdf.com
通過抓包分析,知道這是一個POST請求,接下來用requests庫模擬即可。
需要注意的是,這個接口僅用于測試,所以可供轉(zhuǎn)換的頁面等都有所限制,如需更完整的功能還請支持原版。
二、我的代碼
正所謂一萬個coders,就有一萬種codes,以下為我的代碼,僅供參考。
導(dǎo)入相關(guān)庫:
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ù)有兩個參數(shù),第一個為需要轉(zhuǎn)換的PDF,第二個參數(shù)為轉(zhuǎn)換后的目錄。
run一下,一鍵入魂,".docx"文件已經(jīng)躺在了我的目錄中,舒服了~

寫在最后
到此這篇關(guān)于用python寫PDF轉(zhuǎn)換器的實現(xiàn)的文章就介紹到這了,更多相關(guān)用python寫PDF轉(zhuǎn)換器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python經(jīng)典題實戰(zhàn)記錄之百元買百雞
有一道著名的"百錢買百雞"問題大家應(yīng)該都不陌生,這篇文章主要給大家介紹了關(guān)于Python經(jīng)典題實戰(zhàn)記錄之百元買百雞的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-12-12
python pandas.DataFrame.loc函數(shù)使用詳解
這篇文章主要介紹了python pandas.DataFrame.loc函數(shù)使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Python爬蟲報錯<response [406]>(已解決)
本文主要介紹了Python爬蟲報錯<response [406]>,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

