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格式閱讀原文

主站蜘蛛池模板: 毛片手机在线看| 国产乱码精品一区二区三区中文 | 亚洲成人在线网| 国产成人久久777777| 亚洲第一区精品日韩在线播放| 大香伊人久久| 国产情精品嫩草影院88av| 99热免费在线| 亚洲av色吊丝无码| 国产欧美精品一区aⅴ影院| 亚洲国产精品日韩欧美一区| 色综合成人| 国产成人久视频免费| 午夜福利在线观看成人| 国产成人免费视频精品一区二区| 日韩av电影一区二区三区四区| 欧美亚洲第一页| 亚洲人网站| 国产在线专区| 婷婷成人综合| 成人免费一级片| 久久久久亚洲av成人网人人软件| 色综合天天娱乐综合网| AⅤ色综合久久天堂AV色综合| 国产精品永久不卡免费视频| 精品国产www| 国产理论最新国产精品视频| 热99re99首页精品亚洲五月天| 国产精品久久自在自2021| 色婷婷啪啪| 8090成人午夜精品| 亚洲一区国色天香| 午夜毛片免费观看视频 | 人人看人人鲁狠狠高清| 99久久亚洲综合精品TS| 精品国产欧美精品v| 日韩国产黄色网站| 欧美一级特黄aaaaaa在线看片| 黄色网址免费在线| 国产91精选在线观看| 久久 午夜福利 张柏芝| 欧美一级高清片久久99| 国产精品亚洲αv天堂无码| 久久国产精品影院| 国产成人91精品免费网址在线| 欧美在线视频不卡第一页| 中文字幕无码中文字幕有码在线| 国产日韩欧美精品区性色| 谁有在线观看日韩亚洲最新视频| 中文成人在线| 国产91透明丝袜美腿在线| www.国产福利| 谁有在线观看日韩亚洲最新视频 | 又爽又大又黄a级毛片在线视频| 97人妻精品专区久久久久| 国产国语一级毛片| 亚洲视频四区| 国产亚洲欧美日本一二三本道| 人妻精品全国免费视频| 免费一级大毛片a一观看不卡| 欧美日本在线| 国国产a国产片免费麻豆| 亚洲国产综合精品中文第一| 伊人欧美在线| 91探花国产综合在线精品| 制服丝袜一区| 免费无遮挡AV| 国产成人免费| 国产成人一区免费观看 | 五月天综合网亚洲综合天堂网| 亚洲国产清纯| 91成人在线免费视频| 国产午夜精品鲁丝片| 精品免费在线视频| 久久成人免费| 中文字幕亚洲乱码熟女1区2区| 久青草网站| 国产精品性| 国产91av在线| 国产黄在线观看| 亚洲无码久久久久| 一本一道波多野结衣一区二区|