用 Python 写了一个PDF转换器,以后再也不用花钱转了

 

前言

想必小伙伴都经历过,当你想要把PDF转为WORD时,自己打字赫赫甩在你眼前:

不充钱就想白嫖??想得美~

然而,博主是不会退缩的,毕竟迎难而上是传统美德。于是,今天的主题出来了:用python写一个PDF转WORD的小工具(基于某网站接口)。

一、思路分析

网上一搜,你可以发现很多PDF转换的工具,其中不乏在线转换的网站,比如这样的:

那么,通过网站提供的测试接口,我们便可以通过爬虫模拟的方式实现转换。

没有错了~思路就是如此的简单明了,今天的主角便是:

https://app.xunjiepdf.com

通过抓包分析,知道这是一个POST请求,接下来用requests库模拟即可。

需要注意的是,这个接口仅用于测试,所以可供转换的页面等都有所限制,如需更完整的功能还请支持原版。

二、我的代码

正所谓一万个coders,就有一万种codes,以下为我的代码,仅供参考。

导入相关库:

 
 
 
 
  1. import time 
  2. import requests 

定义PDF2Word类:

 
 
 
 
  1. #2020最新python学习资源分享:1156465813 
  2. class PDF2Word(): 
  3.     def __init__(self): 
  4.         self.machineid = 'ccc052ee5200088b92342303c4ea9399' 
  5.         self.token = '' 
  6.         self.guid = '' 
  7.         self.keytag = '' 
  8.      
  9.     def produceToken(self): 
  10.         url = 'https://app.xunjiepdf.com/api/producetoken' 
  11.         headers = { 
  12.                 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 
  13.                 'Accept': 'application/json, text/javascript, */*; q=0.01', 
  14.                 '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', 
  15.                 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
  16.                 'X-Requested-With': 'XMLHttpRequest', 
  17.                 'Origin': 'https://app.xunjiepdf.com', 
  18.                 'Connection': 'keep-alive', 
  19.                 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} 
  20.         data = {'machineid':self.machineid} 
  21.         res = requests.post(url,headers=headers,data=data) 
  22.         res_json = res.json() 
  23.         if res_json['code'] == 10000: 
  24.             self.token = res_json['token'] 
  25.             self.guid = res_json['guid'] 
  26.             print('成功获取token') 
  27.             return True 
  28.         else: 
  29.             return False 
  30.      
  31.     def uploadPDF(self,filepath): 
  32.         filename = filepath.split('/')[-1] 
  33.         files = {'file': open(filepath,'rb')} 
  34.         url = 'https://app.xunjiepdf.com/api/Upload' 
  35.         headers = { 
  36.                 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 
  37.                 'Accept': '*/*', 
  38.                 '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', 
  39.                 'Content-Type': 'application/pdf', 
  40.                 'Origin': 'https://app.xunjiepdf.com', 
  41.                 'Connection': 'keep-alive', 
  42.                 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} 
  43.         params = ( 
  44.                 ('tasktype', 'pdf2word'), 
  45.                 ('phonenumber', ''), 
  46.                 ('loginkey', ''), 
  47.                 ('machineid', self.machineid), 
  48.                 ('token', self.token), 
  49.                 ('limitsize', '2048'), 
  50.                 ('pdfname', filename), 
  51.                 ('queuekey', self.guid), 
  52.                 ('uploadtime', ''), 
  53.                 ('filecount', '1'), 
  54.                 ('fileindex', '1'), 
  55.                 ('pagerange', 'all'), 
  56.                 ('picturequality', ''), 
  57.                 ('outputfileextension', 'docx'), 
  58.                 ('picturerotate', '0,undefined'), 
  59.                 ('filesequence', '0,undefined'), 
  60.                 ('filepwd', ''), 
  61.                 ('iconsize', ''), 
  62.                 ('picturetoonepdf', ''), 
  63.                 ('isshare', '0'), 
  64.                 ('softname', 'pdfonlineconverter'), 
  65.                 ('softversion', 'V5.0'), 
  66.                 ('validpagescount', '20'), 
  67.                 ('limituse', '1'), 
  68.                 ('filespwdlist', ''), 
  69.                 ('fileCountwater', '1'), 
  70.                 ('languagefrom', ''), 
  71.                 ('languageto', ''), 
  72.                 ('cadverchose', ''), 
  73.                 ('pictureforecolor', ''), 
  74.                 ('picturebackcolor', ''), 
  75.                 ('id', 'WU_FILE_1'), 
  76.                 ('name', filename), 
  77.                 ('type', 'application/pdf'), 
  78.                 ('lastModifiedDate', ''), 
  79.                 ('size', ''),) 
  80.         res= requests.post(url,headers=headers,params=params,files=files) 
  81.         res_json = res.json() 
  82.         if res_json['message'] == '上传成功': 
  83.             self.keytag = res_json['keytag'] 
  84.             print('成功上传PDF') 
  85.             return True 
  86.         else: 
  87.             return False 
  88.          
  89.     def progress(self): 
  90.         url = 'https://app.xunjiepdf.com/api/Progress' 
  91.         headers = { 
  92.                 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0', 
  93.                 'Accept': 'text/plain, */*; q=0.01', 
  94.                 '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', 
  95.                 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 
  96.                 'X-Requested-With': 'XMLHttpRequest', 
  97.                 'Origin': 'https://app.xunjiepdf.com', 
  98.                 'Connection': 'keep-alive', 
  99.                 'Referer': 'https://app.xunjiepdf.com/pdf2word/',} 
  100.         data = { 
  101.               'tasktag': self.keytag, 
  102.               'phonenumber': '', 
  103.               'loginkey': '', 
  104.               'limituse': '1'} 
  105.         res= requests.post(url,headers=headers,data=data) 
  106.         res_json = res.json() 
  107.         if res_json['message'] == '处理成功': 
  108.             print('PDF处理完成') 
  109.             return True 
  110.         else: 
  111.             print('PDF处理中') 
  112.             return False 
  113.          
  114.     def downloadWord(self,output): 
  115.         url = 'https://app.xunjiepdf.com/download/fileid/%s'%self.keytag 
  116.         res = requests.get(url) 
  117.         with open(output,'wb') as f: 
  118.             f.write(res.content) 
  119.             print('PDF下载成功("%s")'%output) 
  120.              
  121.     def convertPDF(self,filepath,outpath): 
  122.         filename = filepath.split('/')[-1] 
  123.         filename = filename.split('.')[0]+'.docx' 
  124.         self.produceToken() 
  125.         self.uploadPDF(filepath) 
  126.         while True: 
  127.             res = self.progress() 
  128.             if res == True: 
  129.                 break 
  130.             time.sleep(1) 
  131.         self.downloadWord(outpath+filename) 

执行主函数:

 
 
 
 
  1. if __name__=='__main__':     
  2.     pdf2word = PDF2Word() 
  3.     pdf2word.convertPDF('001.pdf','') 

注意:convertPDF函数有两个参数,第一个为需要转换的PDF,第二个参数为转换后的目录。
run一下,一键入魂,".docx"文件已经躺在了我的目录中,舒服了~

新闻标题:用 Python 写了一个PDF转换器,以后再也不用花钱转了
链接分享:http://www.shufengxianlan.com/qtweb/news21/476971.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联