開源網頁圖片打印服務

      因爲要做一個活動,需要用戶上傳照片,然後有服務器編輯後,在前端打印。這本是一個很簡單的功能,但卻卡在了最後一步,就是如何將照片輸出到打印機。如果將照片下載然後用專業軟件打印當然可以,但是考慮到活動現場的狀況,太複雜的操作可能引起混亂。


      首先想到的是直接使用瀏覽器自帶的打印功能,使用print.js,打印局部頁面。測試過各個瀏覽器後,發現問題遠沒想象的那麼好。chrome及chromium核心的瀏覽器在打印時都會將彩色頁面打印成黑白頁面。這真的不可接受。firefox對局部頁面的打印沒有預覽直接就調用系統打印輸出,也是不可接受。IE支持的不夠好,而且現在已經不再支持了。只有舊版的edge還可以,但是有太多的參數無法設置。包括邊框,寬高等。所以也沒法使用。


      其次就想到了各種的瀏覽器插件,比如Lodop和jatoolsPrinter。這種商業軟件功能完善,但是限制也多,比如有水印。而且大多重視報表,對圖片的打印比較弱。


      難道就沒有簡單的網頁打印服務嗎?google加百度的去查找,一直沒有找到合適的,既然如此那就只能自己來發明輪子了。


      思路是這樣的,首先編寫一個本地http服務,允許跨域提交數據。網頁通過ajax提交數據至http服務,http服務拿到數據後,啓動打印預覽及打印服務。OK,思路很簡單。下面就是開始動手,拿出塵封已久的QT。開始編碼。

     核心代碼很簡單,http服務可以用現成的qhttp的webserver,主要封裝下接收數據後的處理過程,數據接收後,使用QPixmap 實例化圖片,然後渲染至打印預覽。圖片的傳輸使用base64,而前端圖片的base64編碼很容易就可以用canvas拿到,

    具體的代碼看這裏github,這可以完美滿足照片打印的需求,打印機的設置也可以預先設置好,方便前端一鍵調用,對於其他的特殊html打印,可以使用QTextDocument來渲染,也有不錯的效果。

     

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