虛擬打印機

一)要安裝虛擬打印機,必須(應該是必須)ddk設備驅動層面的編程。 
   http://borland.mblogger.cn/doublefisher/posts/24474.aspx這系列博客深入淺出的講了怎麼做。
   當然那本《windows驅動開發技術詳解》應該也是不錯,只不過boss催的緊,來不及細看。


(二)但是打印機驅動好像又有其特殊性。因爲看看很多現成的虛擬打印機還想沒有生產sys文件。而且安裝的打印機設備不會出現在“設備管理器”中。

  http://blog.csdn.net/chaoqunz/article/details/5862872#comments這篇博客介紹了windows打印的原理。
  所謂的微軟統一驅動,就是系統默認的驅動,而迷你驅動就是在此基礎上進行個性化定製。
迷你驅動包括GPD文件和資源DLL:GPD文件就是一個腳本,定義了“打印機首選項”中將出現那些設置,有那些選項可選;資源DLL就是一個僅僅包含Resource的DLL,提供給GPD使用其中的資源。 
UI-Plugin 就是在“打印機首選項”中定義一些特殊的設置頁面。
Render-Plugin則可以對渲染繪製過程進行特殊的處理。
打印處理器負責SPL文件操作 EMF/RAW 文件操作等。
並總結了虛擬打印機有兩種方式(應該是兩種作用)可以實現:
第一種,在打印處理器中做手腳,截取SPL緩衝文件,解析分解成EMF文件。
第二種,在Render-Plugin中做處理,在進行圖形渲染的時候將圖像繪製到其他地方,例如一個BMP文件。

並給出了方案1的實現步驟:
1.下載一個打印驅動.並修改裏面的INF文件。
2.修改DDK 裏面的例子 genprint, 並使用ddk裏的build命令直接build(順帶說一下,執行build程序要先執行Windows XP Checked Build Environment 這樣的環境設置BAT)。修改的地方是:winprint.c 裏的 PrintDocumentOnPrintProcessor 函數,將其中 調用PrintEMFJob的地方更改爲我們處理的函數。一般會將這個函數放在另一個DLL中。  
3.更改註冊表,使其spl文件名根據job id生成.這樣我們通過其JOB ID就可以得到相應的SPL文件。
參考:http://www.undocprint.org/winspool/spool_files#reading_job_data 裏面的 Force JobID in Spoolfile names。
4.通過spl文件結構,獲取EMF文件。
5.把EMF文件轉換爲其它圖片文件。

http://fxh7622.blog.51cto.com/63841/47963這系列博客應該是一個較全的源碼實現了。和上面的例子一樣都是修改ddk自帶的程序中的genprint中的PrintDocumentOnPrintProcessor函數。

http://bbs3.driverdevelop.com/thread.php?fid-71.html這個論壇也不錯,有大量做虛擬打印機的童鞋。而且基本思路都是寫該genprint,在其中調用自己的dll函數。

百度文庫裏也有一些文章http://wenku.baidu.com/view/bcd94976f46527d3240ce03c.html包括下面的鏈接。不過貌似他們做的是真機而不是虛擬打印機開發。干擾我很大。

不知道我的學習路徑是不是錯了,高手指教。
下面就是個小白的問題了:怎樣build genprint?唉基礎不好啊!

分享兩個開源軟件:EmfPrinter和ImagePrinter,在oschina中都可以找的。

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