999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于組件模型的虛擬打印系統的研究與實現

2008-04-12 00:00:00
現代電子技術 2008年8期

摘 要:為了在第三方系統中可以方便地使用虛擬打印,在研究虛擬打印技術的基礎上,按照組件模型標準提供了豐富的二次開發接口,包括安裝、卸載虛擬打印機等。為快速將文檔轉換成圖形文件,該系統采用重寫Print Processor方式實現虛擬打印。目前該系統已經在多個第三方系統中得到初步的應用。

關鍵詞:虛擬打印;打印處理機;組件模型;廣播消息

中圖分類號:TP271文獻標識碼:B

文章編號:1004-373X(2008)06-171-03

Research and Realization of Virtual Printer Based on Component Object Model

YI Yun

(Gannan Normal University,Ganzhou,341000,China)

Abstract:Base on the research of virtual printer technology,the virtual printer system provides abundant secondary exploitation interface according to COM standard,in order to conveniently use virtual printer in third party system.The interfaces include install,uninstall virtual printer etc.In order to convert document into image file quickly,the system uses rewriting Print Processor to realize virtual printer.Now there are several third party systems that use the virtual printer system.

Keywords:virtual printer;print processor;component object model;broadcast message

虛擬打印是利用某種方式截獲操作系統的打印任務,將打印任務轉換為圖像文件并保存在指定目錄的系統。通過虛擬打印系統,用戶可以將任意可打印的文檔轉換為統一的圖像文件,由一種應用程序進行瀏覽。因此在Web環境、多客戶端情況下,客戶端不需要為瀏覽多種應用程序的文件而安裝多種應用程序,便于實現瘦客戶端和降低系統的軟件成本。本文通過研究比較現有的虛擬打印系統,提出建立基于組件模型的虛擬打印系統,主要介紹的技術包括:虛擬打印機的實現、虛擬打印機的安裝卸載、系統二次開發接口等。

1 Windows打印系統結構

虛擬打印基于Windows打印體系,是對Windows打印系統的一種應用及拓展。微軟的Windows NT系列打印體系結構由打印假脫機和一套打印驅動程序組成。

應用程序對Win32 GDI函數的調用傳送到GDI圖形引擎,GDI圖形引擎可以將繪制指令假脫到一個EMF文件中,或者與打印驅動程序連接,向假脫機繪制一個可打印的圖像。假脫機組件解釋EMF文件,他們可以在數據流中插入頁面布局信息以及作業控制指令。然后假脫機將數據流發送給具有目標打印機I/O端口的串行、并行或網絡端口的驅動程序。其體系結構如圖1所示。

2 虛擬打印系統的研究

按照獲取打印任務方式的不同,可以將虛擬打印系統分為3種類型:重寫Print Processor,在假托模塊中實現轉換,例如Mabuse.De的VPrinter;采用回調機制在打印任務發送到Spooler之前獲取打印數據流,例如Northeast Data 公司的Image Printer Driver;通過監視Port Monitor獲取打印任務數據,例如Adobe公司的Adobe Acrobat Writer。

圖1 Windows打印體系結構

目前絕大部分虛擬打印系統都是獨立的系統,使用各自的文件格式來保存打印結果,很少以組件的方式提供二次開發接口,使得上述虛擬打印系統很難與其他應用系統進行集成。本文研發的基于組件模型的虛擬打印系統,采用重寫Print Processor方式實現打印任務的獲取。該系統提供了豐富的二次開發接口,可以按照應用系統集成商的要求提供文檔轉換功能,最大限度地降低了應用系統的成本。

3 虛擬打印系統的實現

基于組件模型的虛擬打印系統主要包括2部分:打印機驅動程序模塊和二次開發接口模塊。其體系結構如圖2所示:

圖2 虛擬打印體系結構

3.1 獲取打印任務

打印任務的截取,是整個虛擬打印系統的關鍵部分。從圖1中可以看出,Print Processor負責將打印任務處理后發送到Port Monitor,Print Processor是一個可替換的DLL,安裝DDK中的約定,實現以下6個函數,就可以自定義一個Print Processor。

(1) EnumPrintProcessorDatatypes,該函數主要處理并返回打印處理器所能處理的數據類型;

(2) ControlPrintProcessor,該函數主要提供方法供用戶控制打印處理器,如停止、刪除、重新開始打印任務等;

(3) GetPrintProcessorCapabilities,該函數主要供Windows系統獲取針對某種輸入數據的處理能力;

(4) OpenPrintProcessor,返回該打印處理器的句柄給系統;

(5) PrintDocumentOnPrintProcessor,處理打印任務,將處理后的數據發送到Port Monitor或者轉換為圖像文件等;

(6) ClosePrintProcessor,關閉打印處理器。

圖3詳細說明在PrintDocumentOnPrintProcessor中如何將打印任務轉換為圖像文件的過程。

3.2 生成指定格式、大小的圖像

虛擬打印系統獲取的打印頁面原始數據是EMF矢量圖形文件。如果轉換前的文檔中沒有大量的圖片信息,那么轉換后的EMF文件是比較小的,一般1頁Word轉換后在20~50 k大小。因此本系統提供了配置接口供用戶選擇最終保存的圖像格式,目前支持JPG,GIF,PNG等常用的圖像格式。可以按照如下方式修改圖像的格式和大小:

[ImageInfo]

ImageWidth = 1024

ImageHeight = 768

ImageType = JPG

圖3 打印任務轉換過程

以上信息設定后,轉換生成的圖片為JPG格式文件,圖片寬為1 024 pixel,高為768 pixel。

3.3 封裝組件,提供二次開發接口

二次開發接口是虛擬打印系統提供給第三方應用系統調用或設置的方法。良好豐富的二次開發接口,使得本系統可以快速便捷的與第三方應用系統進行集成,大大提高系統的應用范圍。按照組件模型的思想,本系統中將二次開發接口封裝成Activex組件,使得用戶可以通過簡單的JavaScript調用接口方法。

3.3.1 安裝、卸載打印機接口

一般采用由最終用戶通過在控制面板中選擇添加打印機的方式來安裝打印機。這種方法對最終用戶要求比較高,不適合大規模的應用。因此,封裝了一個Acitvex實現打印機的安裝和卸載,使得第三方應用系統可以非常方便地安裝、卸載虛擬打印機。該Activex提供以下2個方法:

(1) InstallVirtualPrint,實現安裝打印機,關鍵部分解釋如下:

bool flag;

DRIVER_INFO_3 DriverInfo3;

……………………

//添加打印驅動程序

flag=AddPrinterDriver(NULL,3,DriverInfo3);

……………………

PRINTER_INFO_2 pPrinter;

HANDLE pHand;

……………………

//添加虛擬打印機

pHand=AddPrinter(NULL,2,(LPBYTE)pPrinter);

if (pHand == 0)

{

//如果添加失敗,返回出錯代碼

ClosePrinter(pHand);

return GetLastError();}

ClosePrinter(pHand);

(2) UnInstallVirtualPrint,實現卸載打印機,關鍵部分解釋如下:

//刪除打印處理器

DeletePrintProcessor(NULL,L\"Windows NT x86\",L\"VPrint\");

……………………

LPTSTR Env;

Env= L\"Windows NT x86\";

//刪除打印驅動

DeletePrinterDriver(NULL,Env,L\"VPrinter Driver\");

……………………

PRINTER_DEFAULTS pd;

HANDLE hp;

ZeroMemory(pd,sizeof(PRINTER_DEFAULTS));

pd.DesiredAccess=PRINTER_ALL_ACCESS;

if (OpenPrinter(\"VPrinter\",hp,pd))

{ //刪除打印機

if (1==DeletePrinter(hp))

{ //如果失敗,返回出錯代碼

return GetLastError(); } }

3.3.2 打印機信息設置接口

為了方便第三方系統集成,打印機基本信息存儲在系統INI文件中。集成用戶按照標準可以非常方便地修改打印機的相關信息,例如:轉換后圖像文件的保存路徑,當前文件的前綴等。

[FileInfo]

Directory = c:\\\\123

Prefix = 123

以上信息設定后,轉換生成的圖像文件就保存在c:\\\\123目錄下,文件名稱按以下規則形成“123_頁碼”。第三方系統也可以通過編程的方式動態修改配置文件。

3.3.3 圖像生成事件通知接口

在第三方系統集成時,希望實時知道什么時候轉換完成,什么時候轉換了某一頁。因此本系統采用Windows廣播消息的方式來通知集成系統。廣播消息是Windows系統中,不同進程之間通信最實時、最快捷的方式。廣播消息分為2個步驟:利用RegisterWindowMessage函數向Windows系統注冊消息句柄;利用PostMessage函數寄送消息,需要注意的是第一個參數必須為HWND_BROADCAST。集成系統可以在消息循環中獲取廣播的消息,以VC開發工具為例,如下過程就可以獲取廣播的消息:利用RegisterWindowMessage注冊同一消息句柄;利用ON_REGISTERED_MESSAGE宏,映射消息句柄到消息處理函數。

4 結 語

在研究現有虛擬打印系統的基礎上,指出這些系統存在的問題,研究并實現基于組件模型的虛擬打印系統。該系統具有轉換快速、二次開發接口豐富等特點,并且已經應用在第三方系統中,如:iWebOffice網絡文檔、iSignature GDF電子簽章系統。

參 考 文 獻

[1]\\[美\\]Art Baker,Jerry Lozano.Windows2000設備驅動程序設計指南\\[M\\].北京:機械工業出版社,2001.

[2]\\[美\\]David J Kruglinski.Visual C++技術內幕\\[M\\].北京:清華大學出版社,2001.

[3]Documentation of Driver Development Kit (DDK) for Microsoft.Windows,2000.

作者簡介 易 云 男,1983年出生,碩士。主要研究方向為網絡信息安全等。

注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文

主站蜘蛛池模板: 成人免费视频一区| 在线综合亚洲欧美网站| 97在线免费视频| jijzzizz老师出水喷水喷出| 亚洲系列中文字幕一区二区| 亚洲欧美一区二区三区麻豆| 亚洲天堂在线免费| 国产又粗又爽视频| 久久国产黑丝袜视频| 天堂在线视频精品| 中文无码精品a∨在线观看| 国产欧美另类| 极品私人尤物在线精品首页 | 欧美国产日本高清不卡| 亚洲免费三区| 亚洲精品天堂在线观看| 97se亚洲综合在线| 国产一区二区人大臿蕉香蕉| 国产精品免费福利久久播放| 亚洲综合色吧| 国产情精品嫩草影院88av| 国产精品美乳| 99re视频在线| 视频一区视频二区日韩专区 | 亚洲男人的天堂久久精品| 天天色天天操综合网| 97国产一区二区精品久久呦| 久久婷婷六月| 日本妇乱子伦视频| 国产一在线| 国产日韩丝袜一二三区| 老色鬼欧美精品| 夜夜拍夜夜爽| 国产91透明丝袜美腿在线| 强奷白丝美女在线观看 | 亚洲精品国产首次亮相| 国产交换配偶在线视频| 国产成人你懂的在线观看| 草逼视频国产| 网久久综合| 国产在线精品网址你懂的| 中文无码日韩精品| 国产精品无码AV片在线观看播放| 国产第一页免费浮力影院| 91毛片网| 亚洲人成影视在线观看| 91九色最新地址| 色噜噜久久| 亚洲国产精品无码AV| 99草精品视频| 高清视频一区| 色综合久久综合网| 国模粉嫩小泬视频在线观看 | 五月天久久婷婷| 国产精品林美惠子在线播放| 欧日韩在线不卡视频| 欧美一区二区啪啪| 亚洲天堂网2014| 亚洲不卡影院| 中文字幕有乳无码| 精品免费在线视频| 国产精品对白刺激| 国产精品自在线拍国产电影| 日韩无码黄色网站| www.国产福利| 国产在线观看精品| 91麻豆国产在线| 黄色在线网| 人人91人人澡人人妻人人爽| 亚洲国产综合自在线另类| 丁香婷婷久久| 成人一区在线| 国产精品所毛片视频| 成人中文字幕在线| 国产精品白浆在线播放| 一本一本大道香蕉久在线播放| 永久在线精品免费视频观看| 国产91全国探花系列在线播放 | 91青青草视频| 欧美在线免费| 国产精品无码久久久久久| 亚洲免费毛片|