亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于組件模型的虛擬打印系統(tǒng)的研究與實(shí)現(xiàn)

        2008-04-12 00:00:00
        現(xiàn)代電子技術(shù) 2008年8期

        摘 要:為了在第三方系統(tǒng)中可以方便地使用虛擬打印,在研究虛擬打印技術(shù)的基礎(chǔ)上,按照組件模型標(biāo)準(zhǔn)提供了豐富的二次開(kāi)發(fā)接口,包括安裝、卸載虛擬打印機(jī)等。為快速將文檔轉(zhuǎn)換成圖形文件,該系統(tǒng)采用重寫Print Processor方式實(shí)現(xiàn)虛擬打印。目前該系統(tǒng)已經(jīng)在多個(gè)第三方系統(tǒng)中得到初步的應(yīng)用。

        關(guān)鍵詞:虛擬打印;打印處理機(jī);組件模型;廣播消息

        中圖分類號(hào):TP271文獻(xiàn)標(biāo)識(shí)碼:B

        文章編號(hào):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

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

        1 Windows打印系統(tǒng)結(jié)構(gòu)

        虛擬打印基于Windows打印體系,是對(duì)Windows打印系統(tǒng)的一種應(yīng)用及拓展。微軟的Windows NT系列打印體系結(jié)構(gòu)由打印假脫機(jī)和一套打印驅(qū)動(dòng)程序組成。

        應(yīng)用程序?qū)in32 GDI函數(shù)的調(diào)用傳送到GDI圖形引擎,GDI圖形引擎可以將繪制指令假脫到一個(gè)EMF文件中,或者與打印驅(qū)動(dòng)程序連接,向假脫機(jī)繪制一個(gè)可打印的圖像。假脫機(jī)組件解釋EMF文件,他們可以在數(shù)據(jù)流中插入頁(yè)面布局信息以及作業(yè)控制指令。然后假脫機(jī)將數(shù)據(jù)流發(fā)送給具有目標(biāo)打印機(jī)I/O端口的串行、并行或網(wǎng)絡(luò)端口的驅(qū)動(dòng)程序。其體系結(jié)構(gòu)如圖1所示。

        2 虛擬打印系統(tǒng)的研究

        按照獲取打印任務(wù)方式的不同,可以將虛擬打印系統(tǒng)分為3種類型:重寫Print Processor,在假托模塊中實(shí)現(xiàn)轉(zhuǎn)換,例如Mabuse.De的VPrinter;采用回調(diào)機(jī)制在打印任務(wù)發(fā)送到Spooler之前獲取打印數(shù)據(jù)流,例如Northeast Data 公司的Image Printer Driver;通過(guò)監(jiān)視Port Monitor獲取打印任務(wù)數(shù)據(jù),例如Adobe公司的Adobe Acrobat Writer。

        圖1 Windows打印體系結(jié)構(gòu)

        目前絕大部分虛擬打印系統(tǒng)都是獨(dú)立的系統(tǒng),使用各自的文件格式來(lái)保存打印結(jié)果,很少以組件的方式提供二次開(kāi)發(fā)接口,使得上述虛擬打印系統(tǒng)很難與其他應(yīng)用系統(tǒng)進(jìn)行集成。本文研發(fā)的基于組件模型的虛擬打印系統(tǒng),采用重寫Print Processor方式實(shí)現(xiàn)打印任務(wù)的獲取。該系統(tǒng)提供了豐富的二次開(kāi)發(fā)接口,可以按照應(yīng)用系統(tǒng)集成商的要求提供文檔轉(zhuǎn)換功能,最大限度地降低了應(yīng)用系統(tǒng)的成本。

        3 虛擬打印系統(tǒng)的實(shí)現(xiàn)

        基于組件模型的虛擬打印系統(tǒng)主要包括2部分:打印機(jī)驅(qū)動(dòng)程序模塊和二次開(kāi)發(fā)接口模塊。其體系結(jié)構(gòu)如圖2所示:

        圖2 虛擬打印體系結(jié)構(gòu)

        3.1 獲取打印任務(wù)

        打印任務(wù)的截取,是整個(gè)虛擬打印系統(tǒng)的關(guān)鍵部分。從圖1中可以看出,Print Processor負(fù)責(zé)將打印任務(wù)處理后發(fā)送到Port Monitor,Print Processor是一個(gè)可替換的DLL,安裝DDK中的約定,實(shí)現(xiàn)以下6個(gè)函數(shù),就可以自定義一個(gè)Print Processor。

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

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

        (3) GetPrintProcessorCapabilities,該函數(shù)主要供Windows系統(tǒng)獲取針對(duì)某種輸入數(shù)據(jù)的處理能力;

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

        (5) PrintDocumentOnPrintProcessor,處理打印任務(wù),將處理后的數(shù)據(jù)發(fā)送到Port Monitor或者轉(zhuǎn)換為圖像文件等;

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

        圖3詳細(xì)說(shuō)明在PrintDocumentOnPrintProcessor中如何將打印任務(wù)轉(zhuǎn)換為圖像文件的過(guò)程。

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

        虛擬打印系統(tǒng)獲取的打印頁(yè)面原始數(shù)據(jù)是EMF矢量圖形文件。如果轉(zhuǎn)換前的文檔中沒(méi)有大量的圖片信息,那么轉(zhuǎn)換后的EMF文件是比較小的,一般1頁(yè)Word轉(zhuǎn)換后在20~50 k大小。因此本系統(tǒng)提供了配置接口供用戶選擇最終保存的圖像格式,目前支持JPG,GIF,PNG等常用的圖像格式??梢园凑杖缦路绞叫薷膱D像的格式和大?。?/p>

        [ImageInfo]

        ImageWidth = 1024

        ImageHeight = 768

        ImageType = JPG

        圖3 打印任務(wù)轉(zhuǎn)換過(guò)程

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

        3.3 封裝組件,提供二次開(kāi)發(fā)接口

        二次開(kāi)發(fā)接口是虛擬打印系統(tǒng)提供給第三方應(yīng)用系統(tǒng)調(diào)用或設(shè)置的方法。良好豐富的二次開(kāi)發(fā)接口,使得本系統(tǒng)可以快速便捷的與第三方應(yīng)用系統(tǒng)進(jìn)行集成,大大提高系統(tǒng)的應(yīng)用范圍。按照組件模型的思想,本系統(tǒng)中將二次開(kāi)發(fā)接口封裝成Activex組件,使得用戶可以通過(guò)簡(jiǎn)單的JavaScript調(diào)用接口方法。

        3.3.1 安裝、卸載打印機(jī)接口

        一般采用由最終用戶通過(guò)在控制面板中選擇添加打印機(jī)的方式來(lái)安裝打印機(jī)。這種方法對(duì)最終用戶要求比較高,不適合大規(guī)模的應(yīng)用。因此,封裝了一個(gè)Acitvex實(shí)現(xiàn)打印機(jī)的安裝和卸載,使得第三方應(yīng)用系統(tǒng)可以非常方便地安裝、卸載虛擬打印機(jī)。該Activex提供以下2個(gè)方法:

        (1) InstallVirtualPrint,實(shí)現(xiàn)安裝打印機(jī),關(guān)鍵部分解釋如下:

        bool flag;

        DRIVER_INFO_3 DriverInfo3;

        ……………………

        //添加打印驅(qū)動(dòng)程序

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

        ……………………

        PRINTER_INFO_2 pPrinter;

        HANDLE pHand;

        ……………………

        //添加虛擬打印機(jī)

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

        if (pHand == 0)

        {

        //如果添加失敗,返回出錯(cuò)代碼

        ClosePrinter(pHand);

        return GetLastError();}

        ClosePrinter(pHand);

        (2) UnInstallVirtualPrint,實(shí)現(xiàn)卸載打印機(jī),關(guān)鍵部分解釋如下:

        //刪除打印處理器

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

        ……………………

        LPTSTR Env;

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

        //刪除打印驅(qū)動(dòng)

        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))

        { //刪除打印機(jī)

        if (1==DeletePrinter(hp))

        { //如果失敗,返回出錯(cuò)代碼

        return GetLastError(); } }

        3.3.2 打印機(jī)信息設(shè)置接口

        為了方便第三方系統(tǒng)集成,打印機(jī)基本信息存儲(chǔ)在系統(tǒng)INI文件中。集成用戶按照標(biāo)準(zhǔn)可以非常方便地修改打印機(jī)的相關(guān)信息,例如:轉(zhuǎn)換后圖像文件的保存路徑,當(dāng)前文件的前綴等。

        [FileInfo]

        Directory = c:\\\\123

        Prefix = 123

        以上信息設(shè)定后,轉(zhuǎn)換生成的圖像文件就保存在c:\\\\123目錄下,文件名稱按以下規(guī)則形成“123_頁(yè)碼”。第三方系統(tǒng)也可以通過(guò)編程的方式動(dòng)態(tài)修改配置文件。

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

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

        4 結(jié) 語(yǔ)

        在研究現(xiàn)有虛擬打印系統(tǒng)的基礎(chǔ)上,指出這些系統(tǒng)存在的問(wèn)題,研究并實(shí)現(xiàn)基于組件模型的虛擬打印系統(tǒng)。該系統(tǒng)具有轉(zhuǎn)換快速、二次開(kāi)發(fā)接口豐富等特點(diǎn),并且已經(jīng)應(yīng)用在第三方系統(tǒng)中,如:iWebOffice網(wǎng)絡(luò)文檔、iSignature GDF電子簽章系統(tǒng)。

        參 考 文 獻(xiàn)

        [1]\\[美\\]Art Baker,Jerry Lozano.Windows2000設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)指南\\[M\\].北京:機(jī)械工業(yè)出版社,2001.

        [2]\\[美\\]David J Kruglinski.Visual C++技術(shù)內(nèi)幕\\[M\\].北京:清華大學(xué)出版社,2001.

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

        作者簡(jiǎn)介 易 云 男,1983年出生,碩士。主要研究方向?yàn)榫W(wǎng)絡(luò)信息安全等。

        注:本文中所涉及到的圖表、注解、公式等內(nèi)容請(qǐng)以PDF格式閱讀原文

        91中文人妻熟女乱又乱| 国产aⅴ天堂亚洲国产av| 成年女人窝窝视频| 一本大道在线一久道一区二区| 丰满人妻被猛烈进入中文字幕护士| 精品高清免费国产在线| 久久午夜精品人妻一区二区三区| 精品www日韩熟女人妻| a级毛片成人网站免费看| 国产午夜亚洲精品不卡福利| 日韩精品成人一区二区三区久久久 | 中国孕妇变态孕交xxxx| 台湾佬中文娱乐网22| 制服丝袜人妻中文字幕在线| 蜜桃在线播放免费一区二区三区| 9l国产自产一区二区三区| 国产精品美女久久久免费| 亚洲欧美一区二区三区| 国产成人精品三上悠亚久久| 国产在线观看一区二区三区av| 国产精品186在线观看在线播放 | 无码国产精品一区二区vr老人| 免费在线日韩| 东京热加勒比久久精品| 久久久久久亚洲av无码蜜芽| 人与嘼交av免费| 精品久久久久88久久久| 一区二区三区在线日本| 中国国产不卡视频在线观看| 东北妇女肥胖bbwbbwbbw| 偷亚洲偷国产欧美高清| 国产精品一区二区av白丝在线| 狼人伊人影院在线观看国产| а天堂中文在线官网| 97色噜噜| 久久狠狠爱亚洲综合影院| 亚洲伊人av天堂有码在线| 99久久免费国产精品| 久久免费视亚洲无码视频 | 亚洲伦理一区二区三区| av在线高清观看亚洲|