摘要:隨著軟硬件國產化的推進,辦公場景中Linux替代Windows在國內已逐漸形成趨勢,在這個過程中,由于舊設備的淘汰是一個循序漸進的過程,存在各類設備的利舊,除了電腦利舊,還包括各種外設利舊,其中打印機的問題最突出。本方法通過云打印方式,解決國產化桌面的打印兼容問題,并避免直接使用Linux安裝物理打印機驅動帶來的管理和維護工作量。
關鍵詞:云打印;國產化;虛擬打印機;安全打印;利舊
打印機通常采用USB連接或者網絡共享的方式添加到國產化終端本地桌面,個別針式打印機通過串口或者并口連接到終端本地,從而實現打印功能。該方式存在以下弊端,首先是不同的打印機驅動不一樣,每臺機器都需要安裝有各式各樣的打印機驅動,不僅容易出現軟件沖突,同時也讓系統變得臃腫;其次辦公環境下,一個辦公室甚至一個樓層只有少數幾臺打印機,但是每臺機器都需要安裝打印機驅動才能打印,日常管理和維護工作量大;第三通過網絡共享的方式添加到本地,往往打印機離工位都比較遠,打印輸出的文檔不在可視范圍,容易出現誤拿、錯拿、漏拿等,從而導致不必要的信息泄露;第四點到點的打印方式無法對打印的內容進行日常審計和事后追查;最后多數舊有的打印機缺少Linux系統適配的打印機驅動,無法對現有的打印機進行充分利用。
針對上述提出的問題,本文提出一種云打印方法,并完成設計與實現,進而解決這些問題。
Linux打印主要是基于Adobe公司開發的PostScript頁面描述語言,這是一種與設備無關的語言,無需考慮打印機的自身特性,比如打印機的紙張、分辨率等,同時對于文本輸出和圖像輸出都是同樣的處理流程,這為系統統一處理打印提供了便利性。
打印系統的基礎是一個假脫機程序,在操作系統中以Spooler服務的方式存在,負責管理打印隊列,并將每個打印隊列與具體的打印機進行關聯。打印隊列在被送往真實的物理打印過程中,需要經過一個或者多個打印過濾器進行過濾,通過過濾器將PostScript轉換成物理打印機可識別的頁面語言,確保打印動作可以被物理打印機真實執行。
打印的完整流程如下,用戶通過應用程序打開打印機執行打印動作,假脫機程序Spooler將打印數據存放在打印隊列中,并通過任務調度方式將數據發送給過濾器,過濾器檢測打印機的打印能力,比如支持的頁面描述語言如PostScript還是PCL或者直接的圖像畫圖儀,然后調用GhostScript,對打印隊列中PostScript描述的打印數據進行翻譯,輸出打印可識別的數據后發送給打印機進行打印,打印結束后Spooler將此前存放在打印隊列中的數據刪除,并刪除對應的打印任務。
云打印系統主要包含五個模塊,云打印客戶端、云打印控制器、云打印移動端、云打印服務器、云打印管理系統,各模塊的具體職責如下:
a) 云打印客戶端,包含統一通用打印驅動和用戶操作界面,并負責與管理服務端進行通信,獲取安全策略、上傳轉成PDF后的待打印文檔、獲取打印機列表等。用戶桌面只需安裝有客戶端,無需安裝物理打印機驅動;
b) 云打印控制器,負責用戶身份識別,并與管理服務器通信,下載待打印文檔,并執行打印動作,同時通過長連接與服務器進行通信,用于接收各種信令等;
c) 移動端掃描打印機二維碼(非必須組件),獲取打印機信息,并通知服務器用戶在哪臺打印機上進行操作等;
d) 云打印管理系統用于打印機管理、用戶管理、用戶安全策略配置、打印機使用權限分配、打印記錄、打印統計等;
e) 云打印服務器提供通信接口,供客戶端和控制器獲取打印策略、文檔上傳和下載等。
下文將針對與打印直接相關的云打印客戶端和云打印控制器進行詳細說明。
云打印客戶端主要分成兩個部分,統一通用打印驅動和桌面操作客戶端。用戶通過安裝云打印客戶端,避免安裝真實的物理打印驅動。
通用驅動用于接收脫機程序發送過來的PostScript數據,并調用GhostScript進行轉換,生成與設備無關的PDF文檔,同時獲取用戶配置打印的紙張規格、是否雙面打印和打印份數等各項配置,并通過命名管道方式,將打印參數和PDF文檔路徑信息發送給Agent。
Agent接收到數據后,根據管理員給用戶配置的安全策略如水印策略,對PDF添加水印操作,并將處理好的PDF文檔,連同打印參數送報服務端。添加水印可通過PoDoFo進行處理。針對原始文檔為PDF文檔并且帶有密碼時,需要對生成后的PostScript文件過濾以"mark currentfile eexec"開頭的連續11行數據,便于通過GhostScript轉成PDF。Agent將打印參數和PDF文件一并提交到云打印服務端。
部分PDF文檔的坐標系與默認的坐標存在不一致的現象,如果機械的使用默認坐標系,存在水印添加后文本方向顛倒的問題。PDF每頁都有標記當前頁面的坐標系參數,通過對水印文本坐標進行變換,可得到最終的水印坐標,具體如下:
假設PDF頁面坐標為m:
水印文本的坐標為M:
則水印的最終坐標為M:在新坐標系中,繪制完水印后,經過坐標系旋轉變換映射到原坐標系,就可以正常顯示指定傾斜角度的水印文本。
為了提升打印驅動的兼容性,云打印控制器安裝在經過安全加固過后的Windows系統,訪問界面通過深度定制,限制僅允許訪問云打印控制器和打印機管理,網絡層通過NDIS驅動,限制該主機僅能與云打印服務端進行通信。針對僅連接單臺打印機的場景,可增加射頻卡讀卡器模塊,用戶通過刷工牌方式,對用戶的身份進行識別,針對連接多臺打印機的場景,采用移動端掃描方式,對打印機和用戶身份進行識別。云打印服務端通過長連接方式下發待打印文檔的隊列ID信息,云打印控制器通過ID向服務端請求下載指定的待打印文檔,并獲取相應的打印參數,在本地執行最終的打印動作并輸出。
采用云打印方式解決國產化環境中的打印問題,可以有效的進行打印機利舊,通過對最終打印輸出的機器進行安全加固,可以有效的降低系統的安全風險,在提升打印體驗的同時避免信息的泄露,所有的打印內容均在云打印服務端有備份,便于做后續的打印審核和打印審計。
參考文獻:
[1]張婷,吳遠征.基于“云計算”的云打印服務模式構建[J].江蘇商論,2013,(04):31-34.
[2]王娜,盧智勇.一種基于專用網絡的云打印應用實例[J].中國新通信,2012,(21):63-64
陳建輝(1985-),男,漢族,福建泉州人,主要研究方向為云應用的相關技術及其應用。