用Python讀取PDF信息插入Word文檔

需求描述:朋友在平時工作中會經常重複性地打開不同PDF文件,選取其中特定的幾組信息複製粘貼到不同的Word文檔中,完成一份PDF文件平均耗時15分鐘,想試試Python代碼能否幫忙。


 

由於其涉及文件隱私,將需求簡化如下:我這提供一份PDF版《笨辦法學Python》,想把其中第五頁的第1段和第4段填充到Word文檔 “筆記.docx” 特定位置:

 

上圖爲PDF中的目標文字;下圖爲Word文檔要填充的位置:

 

思路

首先利用PDFMiner模塊解析PDF文件,轉化成PDF內容的文本列表;根據目標位置在列表中提取目標文本;利用Python處理Word文檔的庫docx-mailmerge模塊,進行文本填充。

PDFMiner模塊

PDFMiner是一個專注於從PDF文檔中提取、分析文本信息的工具。它不僅可以獲取特定頁碼特定位置處的信息,也能獲得字體等信息。其工作原理如圖所示:

 

看不懂原理圖沒關係,我們關心的是應用問題。首先安裝PDFMiner,注意Python3要安裝pdfminer3k,可以通過pip install pdfminer3k進行安裝

解析PDF涉及代碼步驟較多,先不展開,文末提供註釋源碼供參考。通過PDFMiner解析,文本內容按區域存到不同頁碼的文本list中;每一頁又作爲元素存入整個文檔的list中。即假設content代表整個PDF文本信息,content[0]爲第一頁信息,content[4]即我們想要的第五頁信息。而第五頁中,按照list元素順序,我們想要的第一段和第四段就可以通過content[4][1]和content[4][4]拿到了:

 

docx-mailmerge模塊

這個模塊的應用類似於你先在Word文檔中特定位置去定義好變量,之後在代碼中通過MailMerge函數爲變量賦值。

首先是安裝:pip install docx-mailmerge

接下來去Word文檔中定義要插入的變量,在要插入文本的位置選擇 “插入”→“文檔部件”→“域”:

 

在彈出的窗口中選擇mailmerge變量,中文直譯“郵件合併”,域名是自己定義的變量名,這裏我用firstTED 來代表第一段:

 

設置完成後會看到<<firstTED>>出現在Word文檔中。同理,我們設置fourthTED來代表第四段,最終結果如圖:

 

至此,Word文檔中變量定義完成,繼續回到代碼中。我們已經拿到了第一段和第四段的文本,接下來就是將其和新定義的firstTED 和 fourthTED 融合:

template = "../讀書筆記.docx"document = MailMerge(template)document.merge(    firstTED = content[4][1],    fourthTED = content[4][4],)document.write("讀書筆記更新.docx")

最終在PDF文件旁會生成新的“讀書筆記更新.docx”:

其內容如圖:

 

目標達成!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章