lodop簡單介紹
lodop的打印功能已經非常強大,也在帶web端的圖形界面,可以供用戶使用。使用js在前台調用lodop打印,一般分為兩種方法:
1:特殊的指令打印,這種打印方式,是采用的與js無關的一些特殊指令,說實在的,不適合我們使用。這個個人覺得只使用於你的web端圖形界面使用了lodop自帶的圖形界面。用這個功能做固定模板還好,但如果要做一個自定義的圖形界
面去定制打印的模板,不是明智之舉。
2:采用html+css,將整個html+css代碼傳給打印機,進行打印。很適合我們的使用與維護。開發起來也很快,我們只需要將主要精力放在html上,對其進行適配就好。
lodop官方網站已經提供了很多的在線樣例,可以去看看:lodop官網地址。
使用背景
公司產品想要一個有自己頁面自己風格的web端打印圖形界面。就像是富文本編譯器那樣,開發給用戶,讓用戶自己去進行配置打印的模板,后台保存模板,在其他地方調用打印功能時,
將模板信息塞入到打印機內,形成打印。成型的作品如下。

圖中的字段可以任意拖動,放在背景頁面的任何位置,也可以對其進行富文本的編輯。最后保存時,將lodop指令保存到后台,打印時調用出來。
上圖使用的是lodop特殊指令進行打印的,非html,至於原因,就不多說了,反正當時是沒得選擇。如果還有得選,一定會選擇用html打印方式,不管效率方面,還是適配
方面,都比用特殊指令打印舒服的太多。而且,作為一個前端開發者,html打印的方式可以使我們專注於頁面的操作,后台進行配合,只需要提供一個模板增刪改查的接口就好,
還是很方便的。
html打印在線樣例
github地址:https://github.com/namedyouZai/lodop-print-html-demo。
該案例使用了html打印。簡單的教程里包括了打印、打印預覽、打印機列表、指定打印機等接口。作為一個小demo 還是足夠的。
另外在使用之前,別忘了在上面的官網地址里找到符合自己電腦的打印服務進行安裝,這樣可以直接看到我的在線樣例,並執行打印功能。
為什么可以使用js調用電腦本地的打印機服務?
根據瀏覽器規則,js是不予許直接訪問本地電腦文件的,但是lodop實現了一個橋梁的作用,也就是現在的clodop。這個插件在本地起了一個服務,js將命令發送給clodop,然后通過clodop發送調用打印機。下載並運行clodop你可以看到本地任務欄里多出這個圖片,也就能理解了。

正文開始
lodop的打印指令有以下兩種模式:
1:html形式的打印
這種打印可以將html頁面作為字符串保存下來,給到打印機進行打印
2:特殊指令的打印
這種利用譬如:LODOP.SET_PRINT_STYLEA等指令,傳給打印機 進行打印
而我們的系統,因為考慮到是從老系統lodop的特殊指令轉換過來的,所以不得以采用了第二種方法,也是磕磕絆絆實現了現在的結果,但是問題還是比較多的,畢竟涉及到軟件調用硬件,並且這個硬件種類較多,還不會去兼容這個軟件,只能軟件去兼容硬件,所以維護的成本還是比較高的。

另外,我另外一個系統內,使用的是html打印方式,可以說是減少了很多麻煩事。UI圖如下

這個打印是這樣實現的:
- 前端技術上采用的是angualr
- 前台通過雙向數據綁定,寫好模板。
- 從后台獲取到模板之后,添加到前台指定的標簽之內。
- 重啟模板部分angular的服務,使頁面的雙向數據綁定等功能再次生效
- 直接將該部分的html+css發送到打印機即可開始打印。
- 后台存儲的內容就是一個html模板加上樣式。
作為一位web端打印開發的老司機,如果你想開發出上圖樣式的web端打印,我還是強烈建議大家采用html形式的打印。作者本人是使用過指令打印做上圖中的功能的,但是異常的痛苦不堪,具體怎么去實現也就不說了。采用html打印的方式有點如下:
- 這種方式只會關注頁面是什么樣的,最后只需要將想要打印的內容通過innerHtml就可以取出來,不用關注用戶在過程中進行了什么操作。(當然這是任何一種打印都應該做到的事情)
- 代碼簡單,不用去拼接與解析那么多的指令代碼,畢竟指令打印是很多的形如:LODOP.ADD_PRINT_TEXT(83,78,75,20,"寄件人姓名"); 這種代碼拼接起來的。
- 需要做的兼容性會比較少,因為html打印的方式,會根據打印的紙張大小進行百分比的頁面占有率進行放大縮小,但是指令打印的可能還需要依照打印指令里的數據去設置紙張的大小,這個其實是不現實的,不能讓用戶去適應我們,只能我們去適應用戶。
額外需要掌握的知識
打印機的日常知識,比如如何設置打印紙張,是否正反方向打印紙張,打印紙張的位置偏差時需要對打印機或者紙張進行控制、共享打印機如何進行控制等等。雖然調用打印機服務很簡單,但因為涉及到硬件系統還有用戶的實際操作問題,日常需要解決的問題還是不少的。最好能本公司制定出一個操作規范還有常見的打印問題解決方案以供用戶使用。
