用 Python 寫了一個PDF轉換器,以後再也不用花錢轉了

號發表於2020-11-14

前言
想必小夥伴都經歷過,當你想要把PDF轉為WORD時,幾行大字赫然甩在你眼前:
在這裡插入圖片描述

用 Python 寫了一個PDF轉換器,以後再也不用花錢轉了
不充錢就想白嫖??想得美~

然而,博主是不會退縮的,畢竟迎難而上是傳統美德。於是,今天的主題出來了:用python寫一個PDF轉WORD的小工具(基於某網站介面)。

一、思路分析
網上一搜,你可以發現很多PDF轉換的工具,其中不乏線上轉換的網站,比如這樣的:
在這裡插入圖片描述

用 Python 寫了一個PDF轉換器,以後再也不用花錢轉了
那麼,通過網站提供的測試介面,我們便可以通過爬蟲模擬的方式實現轉換。

沒有錯了~思路就是如此的簡單明瞭,今天的主角便是:

https://app.xunjiepdf.com

通過抓包分析,知道這是一個POST請求,接下來用requests庫模擬即可。

需要注意的是,這個介面僅用於測試,所以可供轉換的頁面等都有所限制,如需更完整的功能還請支援原版。

二、我的程式碼
正所謂一萬個coders,就有一萬種codes,以下為我的程式碼,僅供參考。

匯入相關庫:

import time
import requests
定義PDF2Word類:

#2020最新python學習資源分享:1156465813
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(‘001.pdf’,’’)
注意:convertPDF函式有兩個引數,第一個為需要轉換的PDF,第二個引數為轉換後的目錄。
run一下,一鍵入魂,".docx"檔案已經躺在了我的目錄中,舒服了~

用 Python 寫了一個PDF轉換器,以後再也不用花錢轉了
http://shennizuidongqiu.com
http://feidaotuiqiu.me
http://dazhuokaiche.com
http://fds501.cc
http://fdq602.cc
http://fdw703.cc
http://fdw805.cc
http://fdw907.cc
http://zsn132.cc
http://zsn143.cc
http://zsn243.cc
http://zsn343.cc
http://zsn443.cc
http://zsn543.cc
http://zsn643.cc
http://msk121.cc
http://msk127.cc
http://msk129.cc
http://msk130.cc
http://zdzkc108.cc
http://zdzkc219.cc
http://zdzkc229.cc
http://zdzkc239.cc
http://zdzkc241.cc
http://dddsaa331.cc
http://dddsaa332.cc
http://dddsaa333.cc
http://dddsaa336.cc
http://dddsaa328.cc

相關文章