天天看點

PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)

  單純的SAP憑證批量列印,結合SAP Script+python很容易實作。小爬這次遇到的任務有點糾結:我們需要幫檔案管理人員批量列印SAP憑證的同時,還要幫助列印這些憑證在OA辦公平台中的流程表單+表單對應的各式附件,最後要将兩個平台的列印資料進行比對裝訂,這是目前的檔案管理人員的手工工作模式。經過再三思考,小爬終于找到了該過程的自動化機會,以解決作業人員的痛點。

  具體的思路是這樣的:我們且先将SAP憑證批量,調用windows系統的PDF虛拟列印機,列印成一個個PDF檔案,并以“OA表單編号-0.pdf"的格式進行重命名,最後再用python爬蟲把這些表單号對應的URL擷取到,并使用selenium驅動浏覽器打開這些表單,背景靜默下載下傳表單的附件,列印OA表單,也以”OA表單編号-1(1~n).pdf"的格式命名,并與上一個步驟的憑證PDF檔案存放于同一個檔案夾。最終将這個檔案夾以”表單編号“作為關鍵資訊來周遊,并按照順序自動推送這些檔案給列印機,那麼這些列印任務在輸送給列印機之前就已經在系統内完成了排序,這樣做可以解決兩個平台單據列印後的線下比對難&效率低問題。

  小爬一開始也是這樣做功能實作的,但是這樣做,針對步驟一的SAP憑證批量列印為PDF檔案,存在兩個問題:

1、我們每列印一個憑證為PDF,就要驅動SAP的列印功能,驅動win32桌面的”列印“對話框,直至儲存PDF檔案成功,這個過程有一定機率失敗,無論是findwindow方法還是sendmessage方法,都有較小的機率失敗;

2、上面這套列印SAP憑證的組合拳需要頻繁調用”列印“界面和”檔案另存為PDF“界面,每次都需要3-4秒才能完成,效率不算高;

操作如下圖的示範:

PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)
PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)
PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)
PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)

如果您的作業系統上沒有對應的“Microsoft Print To PDF”或者福昕閱讀器虛拟PDF列印機可選,此時SAP還給我們提供了一個方法來列印内容至PDF:(修改日期:2021-05-13)

1、在列印界面,點選“列印預覽”;

2、在列印預覽界面的事務代碼輸入框,填入"PDF!",敲回車;

3、在彈出的PDF預覽視窗,點選第一個“儲存副本”的PDF按鈕,也可以輸入熱鍵組合(Ctrl + Shift + S);

4、在彈出的“另存為”界面,填入“檔案名”,點選“确定”即可;

PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)
PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)
PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)
PDF檔案解析&拆分在SAP憑證列印場景中的運用(一)

  基于以上兩個痛點,小爬決定繼續尋求優化的方法。上述過程,可以考慮,用sap script驅動SAP全選所有待列印憑證,将所有憑證列印成一個PDF檔案,那麼就解決了頻繁的列印PDF導緻的效率問題和穩定性問題。結果表明,列印多個憑證為一個PDF檔案,跟列印一個憑證為一個PDF檔案耗時相當;

但這樣做帶來了另一個問題,這個”巨無霸“PDF檔案,如何跟我們一個個OA表單檔案+表單附件 進行系統内關聯呢?

  對問題層層分解後,我們發現,其實我們需要的是一個高效的PDF拆分工具 + 一個高效的PDF文本解析工具 + 一個高效的PDF檔案合并工具。通俗的說,我們将含多個憑證的PDF檔案,按頁拆成一個個子PDF檔案,再解析每個PDF檔案的文本内容,将有共同特征(如:同一個SAP憑證編号)的子PDF檔案進行組合(merge),還原成我們想要的:一個憑證(可能多頁)對應一個PDF檔案。這個工具必須得擅長拆分PDF、組合PDF、解析PDF文本,同時務必做到高效,效率如果太低,還不如一開始就列印出一個個PDF檔案。

  這就是針對這個場景,小爬的完整解決思路,下篇文章,我們将用python的方法,結合一些第三方工具和一些第三方package,一步步coding,來實作我們這一設想。