import requests
import time
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)
应用:
if __name__=='__main__':
pdf2word = PDF2Word()
pdf2word.convertPDF('002.pdf','')
后果:
瑕疵:
如上图,容易把一些段落解析成表格,没有间接应用 wps 来的准确。