企業列印平臺建設

一、當前現狀

目前企業內部列印是透過windows列印伺服器共享的方式,客戶端連線列印。存在以下問題:

1、大部分使用者不會連線。

2、列印後的作業容易暴露,比如說薪資證明等包含個人敏感資訊的文件。

3、印表機對osx和linux系統驅動的支援不好

4、使用者變動位置後需要重新連線樓層對應的印表機。

雖然我們目前租用印表機廠商提供刷卡列印服務,但我們企業內部有多種品牌印表機且不支援擴充套件。我們更傾向於提供相容多平臺和列印品牌,統一的列印入口和方式,讓使用者方便安全地列印。

二、掃碼列印想法的產生

受到一個開源專案的啟發,在學校的印表機上繫結刷卡機,學生透過刷卡釋放作業。刷卡的本質是一個網路請求,企業內部可以透過微信授權獲取使用者身份,使用者需要將文件先上傳到web伺服器,然後到附近的任意一臺印表機掃碼完成授權認證,使用者無需關注印表機的型別和作業系統,上傳後點擊列印即可。

三、掃碼列印介面的實現

列印介面一開始是打算使用windows提供的api,但是伺服器需要安裝文件型別對應的程式才能列印。查閱相關資料發現,目前網路印表機主流的協議是IPP,透過IPP可以很方便的實現列印。

基於IPP的列印介面很快就實現了,到了測試環節,發現一個頭疼的問題:

目前企業內部使用的印表機是理光和惠普,部分作業傳送過去理光印表機自動取消作業,而惠普可以正常列印。諮詢了理光的售後,給出的解釋是惠普硬體對postscript的支援效能比較好,理光如果要正常列印需要加裝ps轉換模組。結合如下列印流程,ps模組的作用就是轉換的postscript讓印表機能更好的識別。

企業列印平臺建設

最終我把所有文件都轉換成了pdf格式。一個PDF檔案實際上是一個PostScript檔案進一步解釋後的檔案格式,列印時比eps或。ps檔案更可靠,更準確。

列印的文件自動取消是因為印表機識別不了裡面的特殊字元,轉換效果差導致的。

初步設想是轉換成圖片,但是轉換出來後一頁就是一張圖,對於雙面列印是個問題。轉換後的圖片質量也比較差。

嘗試其他格式,最終鎖定把pdf轉換成pdf/A pdf/X pdf/E可以嘗試下,這三個是ISO定義的標準PDF來滿足不同的場景需求。

PDF/X標準應用於圖形內容交換,對大多數網路公司的列印就緒檔案傳輸很理想

PDF/E標準應用於工程文件的互動式交換

PDF/A標準應用於電子文件的長期歸檔,遮蔽了一些不適合的功能,如Javascript,音訊、影片等等。

嘗試了這三個都可以正常列印,最終選擇了pdf/e,轉換出來的文件檔案體積較小。

至此,掃碼列印流程已經跑通,開始投入內部測試,支援主流的Office、PDF、圖片等文件格式

四、使用者的反饋

原計劃是使用掃碼列印方式替代原生列印,方便又安全。直到部分使用者提出反饋,網頁上的文件需要先下載再上傳,如果是頻繁的列印這種操作很麻煩。掃碼列印已經不能滿足高頻列印需求,使用者更喜歡用原生印表機,優勢是操作簡單,但是相對於掃碼列印不夠安全。

如何實現原生印表機的相容,讓使用者既方便又安全的列印?

初步設想,模擬新增原生印表機,使用者列印後監控列印作業幫使用者自動上傳,使用者只要去掃碼就可以,這樣就減少了下載上傳的動作,安全性也得到了保證。

五、客戶端列印怎麼實現

1、如何獲取使用者列印的作業?

找一臺伺服器,新增本地計算機ip作為虛擬印表機,嘗試使用socket監聽9100埠後,是可以正常獲取到列印的作業,不過是ps格式,使用ghostscript轉換成pdf後跟原文件是一樣的效果。

2、如何獲取使用者身份資訊?

最初還是透過socket監聽入手,有效資訊只有客戶端ip,透過ip能夠定位使用者嗎?想到去AC上面拉取使用者的認證資訊,不是100%能獲取到,如果頻繁查詢對裝置效能有影響,這個方案就放棄了。查閱了windows spooler api的文件,發現是可以透過遍歷列印佇列獲取作業資訊,裡面的內容還是很豐富的。其中有pUserName就是認證域賬號的資訊。

認證使用者和列印引數都獲取到了,剩下的問題就是怎麼匹配文件內容和身份資訊:

1、嘗試透過windows列印佇列獲取作業內容(windows提供的getJobData方法嘗試後無法獲取)

2、獲取的文件是ps檔案,裡面是否可以找到跟佇列資訊相關聯的唯一資訊(搜尋了ps檔案中可能會有共性的jobid,未搜尋到)

3、嘗試找臺linux系統加域測試,是否linux下面的列印佇列能獲取到不一樣的資訊(linux機器加域後,域賬號登入,cups裡面沒有獲取到有效資訊)

三種方法嘗試後都無法實現目的,開始嘗試其他方案,無意間發現列印生成的快取spl格式檔案,檔名是jobid,jobid是唯一的。最終將spl格式轉換成pdf,身份和文件就匹配上了。

測試未加域、加域的windows機器和osx系統,身份資訊和文件內容均能正常匹配到,後臺再將作業上傳到檔案伺服器,寫入資料庫,使用者點列印後只要去掃碼就可以了。

結合web掃碼列印,整個流程如下:

企業列印平臺建設

六、最終效果

掃碼列印和虛擬客戶端列印結合相容主流作業系統和主流網路印表機,對於使用者只有一個入口,本地列印和原列印體驗一致,簡單方便,滿足不同場景下使用者使用需求的同時提供了一定的安全保障。同時也提供了線上列印介面,方便與內部其他系統接入。

使用者web上傳頁面:

企業列印平臺建設

使用者微信掃碼前端頁面:

企業列印平臺建設

經過一段時間的測試執行,列印統計如下:

企業列印平臺建設

七、客戶端列印還需完善

雖然獲取到了列印作業的詳細資訊,包括份數、單雙面等,但是測試的時候發現這些引數一直不變,本來設想是將使用者在客戶端選的引數,後臺獲取後記錄到資料庫,掃碼的時候自動將引數填充到前端,如果獲取的引數異常,使用者就需要在頁面裡再設定一次,降低了使用者體驗。這個問題會繼續排查,歡迎大家一起溝通交流。