usb口打印機的指令打印和驅動打印


打印機簡介:是計算機的輸出設備之一,用於將計算機處理結果打印在相關介質上。

打印機類型:激光打印機、噴墨打印機、針式打印機、熱敏打印機等。

計算機和打印機之間的連接方式:usb口、串口、並口、網口、藍牙等。

由於工作中使用的是usb口的熱敏打印機,所以就以此類型做介紹。(目前市場上常用的是usb口打印機)

熱敏打印機工作原理:是打印頭上安裝有半導體加熱元件,打印頭加熱並接觸熱敏打印紙后就可以打印出需要的圖案,其原理與熱敏式傳真機類似。圖象是通過加熱,在熱敏紙的膜中產生化學反應而生成的。這種熱敏打印機化學反應是在一定的溫度下進行的。高溫會加速這種化學反應。當溫度低於60℃時,紙需要經過相當長,甚至長達幾年的時間才能變成深色;而當溫度為200℃時,這種反映會在幾微秒內完成。所以要想使熱敏打印機打印出圖形和文字,就必須滿足兩個條件,熱敏紙和高溫,是不需要墨的。

usb口熱敏打印機打印分為兩種:

1,指令打印(也叫直接打印),是直接將esc指令通過程序發送給打印機。當然這要看此款打印機是否支持esc指令,如何確定可以查看打印機的官網。作者測試時使用的一款icod(研科)的T58K,官方網址:http://www.szicod.com/products-show.asp?id=87     后文會介紹如何寫c/c++程序來直接給打印機發送打印指令。

2,驅動打印,是在windows系統的幫助下,使用到gdi模塊、驅動模塊將要打印的內容進行圖片話,以圖片的格式打印。后文會詳細介紹打印的臨時文件SPL,並且可以從SPL文件中分析出EMF文件。EMF文件是一個圖片格式的文件,可以直接在windows系統雙擊打開的。

 

下面詳細介紹下指令打印和驅動打印:

指令打印:顧名思義,是直接將esc指令發送到打印機,打印機就能解析並進行相應的執行。那么我想先聊下,我們平常用記事本、word、pdf等軟件打印時為什么不需要考慮這些,而是直接就能讓打印機打印呢?原因是記事本、word、pdf這些軟件已經實現了打印功能,他們具體是使用指令打印還是驅動打印我們是不清楚的,需要看他們的源代碼才能確定。那么如果你不想通過這些軟件來打印,那你就得自己去考慮使用哪種方式實現。后文會有我的一個MFC工程,包含了指令打印和驅動打印的簡單例子。大家有興趣可以看看。

驅動打印:驅動打印的過程比較復雜。會使用到windows系統的gdi模塊、驅動模塊。win32 api有相關的接口。主要使用CPrintDialog、StartDoc、StartPage、TextOut等接口實現。這些接口很明顯是屏蔽了具體的打印機的,應用程序不需要關注打印機的實現細節,只要按照win32 api的打印接口調用即可實現打印。應用程序打印會產生一個打印作業,被放入打印后台處理程序(spoolsv.exe),並且在C:\Windows\System32\spool\PRINTERS\   目錄下產生一個SPL臨時文件。我們可以分析改SPL,並將其轉換為EMF文件。然后EMF文件被驅動程序翻譯成esc指令,最終將esc指令發往打印機實現打印。那既然兩種打印方式最終到打印機那邊都是esc指令,那為啥還要分指令打印和驅動打印呢?其實這兩種打印方式是有區別的,指令打印時直接打印,比如你打印"123abc",那么最終的esc指令是使用字符串方式打印,所以截獲數據就能截獲到打印內容。而如果是驅動打印,是將原來的數據當成是圖片來打印,比如同樣你打印"123abc",那么最終的esc指令是使用圖片方式打印,所以截獲的數據是還原不了打印內容的。

針對EMF文件:理論上,我們可以將得到的EMF文件解析,並還原出原始的打印數據的。但是如果上層應用設置了ETO_GLYPH_INDEX選項,會使得分析出來的數據並不是字符編碼,而是某字庫的索引。這樣的話要想通過EMF文件解析出原始打印數據也是非常困難的。

 

測試工程所在的百度網盤鏈接及提取碼:

鏈接: https://pan.baidu.com/s/1EA8Os3W8l_vlC8AjLQRL9A 提取碼: kjwm 

csdn下載鏈接:

https://download.csdn.net/download/weixin_29071533/11286829

 

相關連接:

EMF解析相關:https://www.cnblogs.com/snaildev/p/7693189.html

https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-emf/91c257d7-c39d-4a36-9b1f-63e3f73d30ca

 

打印機數據截獲相關:

https://www.cnblogs.com/MrDing/tag/

https://www.cnblogs.com/we-hjb/p/5596880.html

http://www.doc88.com/p-2062378632507.html

 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM