本申請(qǐng)涉及計(jì)算機(jī)應(yīng)用技術(shù)領(lǐng)域,尤其涉及一種頁(yè)面打印方法及裝置。
背景技術(shù):
隨著互聯(lián)網(wǎng)的快速發(fā)展,瀏覽網(wǎng)頁(yè)已經(jīng)成為很多用戶的日常行為,相應(yīng)地,在特定場(chǎng)景下對(duì)所瀏覽的網(wǎng)頁(yè)頁(yè)面進(jìn)行打印輸出,也成為一種更為普遍的需求。
目前,實(shí)現(xiàn)頁(yè)面打印的最基本方式是調(diào)用網(wǎng)頁(yè)瀏覽器的打印功能,但是瀏覽器提供的打印功能一般較為簡(jiǎn)單,缺少可定制性。針對(duì)該問(wèn)題,現(xiàn)有技術(shù)提供的另一種頁(yè)面打印的實(shí)現(xiàn)方式是,在網(wǎng)頁(yè)頁(yè)面中增加打印功能操作接口(例如頁(yè)面按鈕、頁(yè)面菜單等),允許用戶使用網(wǎng)頁(yè)自身提供的打印功能,從而實(shí)現(xiàn)更為豐富的打印效果。這種方式一般要求用戶預(yù)先在瀏覽器中安裝特定的打印功能插件,該插件與頁(yè)面上的操作接口相配合,用戶使用打印功能后,頁(yè)面(這里可以視作一個(gè)應(yīng)用)首先根據(jù)打印需求生成特定格式的打印指令,然后將打印指令發(fā)送給打印功能插件,打印功能插件對(duì)打印指令進(jìn)行解析后,驅(qū)動(dòng)打印機(jī)硬件完成打印操作。
利用網(wǎng)頁(yè)自身提供打印功能的方式,可以有效地豐富打印樣式,然而,每種不同的打印效果都需要不同的打印指令來(lái)實(shí)現(xiàn),用戶每次選擇打印功能后,頁(yè)面都需要重新生成相應(yīng)打印指令,而且打印樣式越復(fù)雜,則需要生成的指令內(nèi)容也越復(fù)雜,不利于提升應(yīng)用的執(zhí)行效率。另一方面,不同的打印功能插件所使用的打印指令規(guī)范不同,開(kāi)發(fā)人員在開(kāi)發(fā)網(wǎng)頁(yè)時(shí),需要先掌握相應(yīng)的指令規(guī)范,如果需要實(shí)現(xiàn)復(fù)雜的打印樣式,還需要用到更多復(fù)雜的指令,這無(wú)形中增加了開(kāi)發(fā)人員的學(xué)習(xí)成本。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)?zhí)峁┮环N頁(yè)面打印方法及裝置,以避免在打印過(guò)程中生成復(fù)雜的打印指令,技術(shù)方案如下:
根據(jù)本申請(qǐng)的第一方面,提供一種頁(yè)面打印方法,應(yīng)用于打印控制設(shè)備,該方法可以包括:
接收應(yīng)用發(fā)送的頁(yè)面打印指令,所述頁(yè)面打印指令中攜帶:打印樣式模板標(biāo)識(shí)、待打印數(shù)據(jù)、以及所述待打印數(shù)據(jù)與所述打印樣式模板中數(shù)據(jù)變量的對(duì)應(yīng)關(guān)系信息;
根據(jù)所述打印樣式模板標(biāo)識(shí),獲取預(yù)設(shè)的打印樣式模板;
根據(jù)所述對(duì)應(yīng)關(guān)系信息,利用所述待打印數(shù)據(jù)對(duì)所獲取的打印樣式模板中的數(shù)據(jù)變量進(jìn)行賦值;
對(duì)已賦值的打印樣式模板進(jìn)行繪制;
針對(duì)繪制結(jié)果生成打印任務(wù);
將所述打印任務(wù)發(fā)送至打印設(shè)備進(jìn)行打印。
根據(jù)本申請(qǐng)的第二方面,提供一種頁(yè)面打印裝置,應(yīng)用于打印控制設(shè)備,該裝置可以包括:
打印指令接收模塊,用于接收應(yīng)用發(fā)送的頁(yè)面打印指令,所述頁(yè)面打印指令中攜帶:打印樣式模板標(biāo)識(shí)、待打印數(shù)據(jù)、以及所述待打印數(shù)據(jù)與所述打印樣式模板中數(shù)據(jù)變量的對(duì)應(yīng)關(guān)系信息;
模板獲取模塊,用于根據(jù)所述打印樣式模板標(biāo)識(shí),獲取預(yù)設(shè)的打印樣式模板;
模板賦值模塊,用于根據(jù)所述對(duì)應(yīng)關(guān)系信息,利用所述待打印數(shù)據(jù)對(duì)所獲取的打印樣式模板中的數(shù)據(jù)變量進(jìn)行賦值;
繪制模塊,用于對(duì)已賦值的打印樣式模板進(jìn)行繪制;
打印任務(wù)生成模塊,用于針對(duì)繪制結(jié)果生成打印任務(wù);
打印任務(wù)發(fā)送模塊,用于將所述打印任務(wù)發(fā)送至打印設(shè)備進(jìn)行打印。
本申請(qǐng)實(shí)施例所提供的技術(shù)方案,將打印樣式預(yù)先定義在打印模板中,應(yīng)用在執(zhí)行打印操作時(shí),只需要給出需要打印的數(shù)據(jù),通過(guò)指定打印模板即可以實(shí)現(xiàn)打印樣式的選擇,不需要通過(guò)打印指令來(lái)控制打印樣式,有效提高了應(yīng)用的執(zhí)行效率。對(duì)于應(yīng)用開(kāi)發(fā)人員而言,也不需要掌握復(fù)雜的打印指令規(guī)范即可實(shí)現(xiàn)豐富的打印樣式,可以有效降低學(xué)習(xí)成本。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能限制本申請(qǐng)。
附圖說(shuō)明
為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本申請(qǐng)中記載的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請(qǐng)方案運(yùn)行系統(tǒng)的一種架構(gòu)示意圖;
圖2a和圖2b分別是本申請(qǐng)方案運(yùn)行系統(tǒng)的第二種和第三種架構(gòu)示意圖;
圖3是本申請(qǐng)的頁(yè)面打印方法的流程示意圖;
圖4是本申請(qǐng)打印樣式模板的一種示意圖;
圖5是本申請(qǐng)一種打印需求的效果示意圖;
圖6是本申請(qǐng)打印樣式模板的另一種示意圖;
圖7a和圖7b是本申請(qǐng)兩種打印設(shè)備配置項(xiàng)的示意圖;
圖8是本申請(qǐng)的頁(yè)面打印裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為了使本領(lǐng)域技術(shù)人員更好地理解本申請(qǐng)中的技術(shù)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行詳細(xì)地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例。基于本申請(qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申 請(qǐng)保護(hù)的范圍。
現(xiàn)有的瀏覽器打印插件,提供了更為豐富的打印樣式,對(duì)瀏覽器所提供的基本打印功能做了補(bǔ)充,其中,打印樣式的實(shí)現(xiàn)是由特定的打印指令來(lái)控制,在用戶執(zhí)行打印操作后,網(wǎng)頁(yè)應(yīng)用需要根據(jù)需要打印的內(nèi)容,實(shí)時(shí)生成相應(yīng)的打印指令。
例如,需要在紙張的左上角打印“姓名:張三”字樣,要求寬度為200、高度為50,字體為隸書、字號(hào)為11,需要生成以下打印指令:
SET_PRINT_STYLE("FontSize",11);
//定義字號(hào)
SET_PRINT_STYLE("FontName","隸書");
//定義字體
ADD_PRINT_TEXT(0,0,200,50,"姓名:張三");
//定義打印起始坐標(biāo)、打印寬度/高度以及待打印文本
可見(jiàn),所有的打印樣式都是直接在指令中聲明的,需要實(shí)現(xiàn)的打印樣式越復(fù)雜,則相應(yīng)的打印指令也越復(fù)雜。由于打印指令都是網(wǎng)頁(yè)應(yīng)用在接收到打印操作后實(shí)時(shí)生成的,因此需要打印的內(nèi)容越多、打印樣式越復(fù)雜,生成代碼所需的代價(jià)就越大。而且每次所生成的打印指令都是針對(duì)本次打印操作而言,如果用戶重新執(zhí)行打印操作,需要重新生成新的打印指令。因此,這種基于指令控制打印樣式的實(shí)際執(zhí)行效率并不理想。
此外,對(duì)于應(yīng)用開(kāi)發(fā)人員而言,需要將打印指令的生成邏輯寫入應(yīng)用的實(shí)現(xiàn)代碼中,這就要求應(yīng)用開(kāi)發(fā)人員首先掌握這些打印指令的使用方法,例如上述的SET_PRINT_STYLE()、ADD_PRINT_TEXT()等函數(shù),增加了開(kāi)發(fā)人員的學(xué)習(xí)成本。而且,上述函數(shù)實(shí)際上僅是某種特定打印插件所定義的函數(shù),如果需要應(yīng)用支持多種打印插件,則需要開(kāi)發(fā)人員學(xué)習(xí)的內(nèi)容會(huì)進(jìn)一步增加。
針對(duì)以上問(wèn)題,本申請(qǐng)?zhí)峁┮环N頁(yè)面打印方法,以及一種用于執(zhí)行該方法的頁(yè)面打印裝置,下面首先對(duì)本申請(qǐng)方案的運(yùn)行系統(tǒng)架構(gòu)進(jìn)行說(shuō)明。參見(jiàn)圖1所示,本申請(qǐng)方案涉及的實(shí)體包括:應(yīng)用100、頁(yè)面打印裝置200、打印設(shè)備300,其中:
應(yīng)用100是打印操作的發(fā)起方,可以是獨(dú)立的應(yīng)用程序,也可以是具有應(yīng)用功能的網(wǎng)頁(yè)(利用瀏覽器打開(kāi));應(yīng)用100獲得用戶的打印操作后,生成打印指令發(fā)送給頁(yè)面打印裝置200;
頁(yè)面打印裝置200是打印操作的中間處理方,可以在獨(dú)立的應(yīng)用程序中實(shí)現(xiàn),也可以在瀏覽器中以插件(Plug-in)的形式實(shí)現(xiàn)。頁(yè)面打印裝置200接收到打印指令后,對(duì)打印指令進(jìn)行處理,生成對(duì)應(yīng)的打印任務(wù)發(fā)送給打印設(shè)備300;
打印設(shè)備300是打印操作的最終執(zhí)行方,用于最終輸出打印結(jié)果。
一般情況下,上述三種實(shí)體中,打印設(shè)備300為物理實(shí)體,可以是打印機(jī)、或者具有打印輸出功能的多功能一體機(jī)等設(shè)備;應(yīng)用100與頁(yè)面打印裝置200為邏輯實(shí)體,兩者可以位于相同的物理實(shí)體中,如圖2a所示,也可以位于不同的物理實(shí)體中,如圖2b所示。其中,在本申請(qǐng)中,將頁(yè)面打印裝置200所處的實(shí)體稱為打印控制設(shè)備,該設(shè)備與打印設(shè)備300存在通信連接,并且能夠驅(qū)動(dòng)打印設(shè)備300執(zhí)行打印任務(wù),具體形式可以是服務(wù)器、PC機(jī)、手機(jī)、平板電腦等多種類型??梢岳斫獾氖牵承┣闆r下,應(yīng)用100或頁(yè)面打印裝置200也可以與打印設(shè)備300位于同一物理實(shí)體,例如安裝有操作系統(tǒng)的智能打印設(shè)備,本申請(qǐng)對(duì)此并不需要進(jìn)行限定。另外需要說(shuō)明的是,如果在虛擬機(jī)環(huán)境下,則上述的“設(shè)備”概念可以進(jìn)一步擴(kuò)展到“虛擬機(jī)”層面,而不是特指一臺(tái)物理設(shè)備。
下面對(duì)頁(yè)面打印裝置200所執(zhí)行的頁(yè)面打印方法進(jìn)行詳細(xì)說(shuō)明,參見(jiàn)圖3所示,該方法可以包括以下步驟:
S101,接收應(yīng)用發(fā)送的頁(yè)面打印指令,其中頁(yè)面打印指令中攜帶:打印樣式模板標(biāo)識(shí)、待打印數(shù)據(jù)、以及所述待打印數(shù)據(jù)與所述打印樣式模板中數(shù)據(jù)變量的對(duì)應(yīng)關(guān)系信息;
S102,根據(jù)所述打印樣式模板標(biāo)識(shí),獲取預(yù)設(shè)的打印樣式模板;
S103,根據(jù)所述對(duì)應(yīng)關(guān)系信息,利用所述待打印數(shù)據(jù)對(duì)所獲取的打印樣式模板中的數(shù)據(jù)變量進(jìn)行賦值;
S104,對(duì)已賦值的打印樣式模板進(jìn)行繪制;
S105,針對(duì)繪制結(jié)果生成打印任務(wù);
S106,將所述打印任務(wù)發(fā)送至打印設(shè)備進(jìn)行打印。
與現(xiàn)有的基于指令控制打印樣式的方式相比,本申請(qǐng)所采用的方式是預(yù)先設(shè)計(jì)好打印樣式模板,將需要的打印樣式定義在模板中,模板中的打印內(nèi)容區(qū)域使用變量名替代,在打印時(shí)才真正傳入。圖4所示為打印樣式模板的一種示意圖,其中“customer”是一個(gè)變量。在執(zhí)行打印操作時(shí),應(yīng)用指定需要使用的打印樣式模板,并且將實(shí)際需要打印的數(shù)據(jù)(例如前面例子中的“張三”)通過(guò)指令傳入,頁(yè)面打印裝置將數(shù)據(jù)賦值到模板的變量中,即可得到需要打印的內(nèi)容。可見(jiàn),在本申請(qǐng)的打印指令中,僅需要包含所指定的模板以及待打印的數(shù)據(jù)內(nèi)容,而字體、字號(hào)、打印位置、尺寸等打印樣式則由模板本身決定,與打印指令無(wú)關(guān),因此不需要在每次執(zhí)行打印操作時(shí)都生成大量用于控制打印樣式的指令代碼。
對(duì)于應(yīng)用開(kāi)發(fā)人員而言,只需要在應(yīng)用的實(shí)現(xiàn)代碼中選擇合適的打印樣式模板,并且指定將哪部分內(nèi)容作為待打印數(shù)據(jù)賦值給模板即可,不需要掌握各種打印樣式控制指令的使用方法,可以有效提升開(kāi)發(fā)效率。
在實(shí)際應(yīng)用中,打印樣式模板可以基于HTML(HyperText Markup Language,超文本標(biāo)記語(yǔ)言)來(lái)設(shè)計(jì),HTML可以提供包括CSS(Cascading Style Sheets,層疊樣式表)在內(nèi)的豐富顯示樣式,并且可以直接調(diào)用瀏覽器內(nèi)核來(lái)對(duì)HTML內(nèi)容進(jìn)行繪制以生成打印內(nèi)容,由于瀏覽器幾乎是各種設(shè)備中的標(biāo)準(zhǔn)軟件配置,因此基于HTML設(shè)計(jì)打印樣式模板可以進(jìn)一步降低本申請(qǐng)方案的實(shí)現(xiàn)成本。此外,HTML是Web開(kāi)發(fā)人員都非常熟悉的一種標(biāo)記語(yǔ)言,因此基于HTML設(shè)計(jì)的打印樣式模板還可以進(jìn)一步降低應(yīng)用開(kāi)發(fā)人員的學(xué)習(xí)成本。
下面結(jié)合一個(gè)具體的實(shí)例,對(duì)本申請(qǐng)所提供的利用模板實(shí)現(xiàn)打印樣式的方案進(jìn)行說(shuō)明。
圖5所示,為某名片制作應(yīng)用需要打印的名片設(shè)計(jì)樣張示意圖,如果使用現(xiàn)有技術(shù),在執(zhí)行打印操作時(shí),應(yīng)用需要生成以下代碼以實(shí)現(xiàn)相應(yīng)的打印樣式:
SET_PRINT_STYLE("FontSize",11);
ADD_PRINT_TEXT(20,180,100,25,"郭德強(qiáng)");
SET_PRINT_STYLEA(1,"FontName","隸書");
SET_PRINT_STYLEA(1,"FontSize",15);
ADD_PRINT_TEXT(53,187,75,20,"科學(xué)家");
ADD_PRINT_TEXT(100,131,272,20,"地址:中國(guó)北京社會(huì)科學(xué)院附近東大街西胡同");
ADD_PRINT_TEXT(138,132,166,20,"電話:010-88811888");
可見(jiàn),根據(jù)現(xiàn)有技術(shù)的實(shí)現(xiàn)方式,各種與打印樣式相關(guān)的信息,包括字體、字號(hào)、位置、尺寸等都是在打印指令中定義的(這里后三行文字使用的都是默認(rèn)的字體和字號(hào),因此沒(méi)有生成對(duì)應(yīng)的定義語(yǔ)句)。而應(yīng)用本申請(qǐng)所提供的方案,只需預(yù)先設(shè)計(jì)好模板,將打印樣式定義在模板中,在打印時(shí)直接調(diào)用該模板即可,不需要每次打印操作都生成樣式控制代碼。
圖6所示為一種打印樣式模板的示意圖,其中“name”,“title”“address”“telphone”均為變量,而字體、字號(hào)、位置、尺寸等信息均已定義在模板中,可以理解的是,這些信息需要通過(guò)代碼定義,并且存儲(chǔ)在模板文件中,圖6所示僅是該模板的展現(xiàn)效果示意圖。
用戶在使用應(yīng)用時(shí),可以看到模板的展現(xiàn)效果,應(yīng)用會(huì)提示用戶填入打印名片所需的必要信息,用戶確填入信息并確認(rèn)進(jìn)行打印后,應(yīng)用生成打印指令發(fā)送至頁(yè)面打印裝置。
假設(shè)用戶在該模板的空白區(qū)域填入的信息依次為“郭德強(qiáng)”、“科學(xué)家”、“中國(guó)北京社會(huì)科學(xué)院附近東大街”、“中國(guó)北京社會(huì)科學(xué)院附近東大街”,用戶執(zhí)行確認(rèn)打印操作后,應(yīng)用將生成以下打印指令發(fā)送給頁(yè)面打印裝置:
{
"template":"businesscard.xml",
"data":{"name":"郭德強(qiáng)","title":"科學(xué)家","address":"中國(guó)北京社會(huì)科學(xué)院附近東大街","telphone":"010-88811888”}
}
上述指令的“template”字段指定了需要使用名為“businesscard.xml”的打印樣式模板,而在“data”字段,則給出了本次需要打印的文本內(nèi)容數(shù)據(jù),并且給出了這些數(shù)據(jù)與模板中數(shù)據(jù)變量的對(duì)應(yīng)關(guān)系,例如:“郭德強(qiáng)”對(duì)應(yīng)“name”、 “科學(xué)家”對(duì)應(yīng)“title”,等等??梢?jiàn),在該指令中并不包含字體、字號(hào)、打印位置的樣式定義信息。
可以理解的是,上述指令僅用于示意性說(shuō)明,本申請(qǐng)并不需要對(duì)具體的語(yǔ)法格式進(jìn)行限定。
在S101,頁(yè)面打印裝置接收打印指令,并且從打印指令中解析出以下信息:
a)打印樣式模板標(biāo)識(shí),即“businesscard.xml”;
b)待打印數(shù)據(jù),即“郭德強(qiáng)”、“科學(xué)家”等;
c)待打印數(shù)據(jù)與打印樣式模板中數(shù)據(jù)變量的對(duì)應(yīng)關(guān)系信息,即“郭德強(qiáng)”對(duì)應(yīng)“name”、“科學(xué)家”對(duì)應(yīng)“title”等關(guān)系;
在S102,根據(jù)打印樣式模板標(biāo)識(shí),獲取預(yù)設(shè)的打印樣式模板;不同的模板既可以存儲(chǔ)在同一文件中,也可以分別存儲(chǔ)在不同的文件中,本實(shí)施例中采用模板文件名稱“businesscard.xml”作為模板標(biāo)識(shí),在實(shí)際應(yīng)用中,還可以采用其他形式的信息作為模板標(biāo)識(shí),例如模板名稱,模板ID等等,只要能夠令頁(yè)面打印裝置根據(jù)該標(biāo)識(shí)唯一確定相應(yīng)的模板即可。在某些情況下,可能需要在標(biāo)識(shí)信息中添加模板的存儲(chǔ)路徑,該路徑可以是頁(yè)面打印裝置本地的存儲(chǔ)路徑,也可以是網(wǎng)絡(luò)上的存儲(chǔ)路徑。對(duì)于某些自行設(shè)計(jì)模板的應(yīng)用而言,頁(yè)面打印裝置上可能預(yù)先并沒(méi)有存儲(chǔ)這些模板,這種情況下,應(yīng)用可以將模板的網(wǎng)絡(luò)存儲(chǔ)路徑發(fā)送給頁(yè)面打印裝置,例如“http://200.0.0.1/businesscard.xml”,以便頁(yè)面打印裝置能夠從指定的網(wǎng)絡(luò)存儲(chǔ)路徑獲取到應(yīng)用自定義的模板。
在S103,根據(jù)解析得到的對(duì)應(yīng)關(guān)系信息,將“郭德強(qiáng)”、“科學(xué)家”等待打印數(shù)據(jù)分別賦值到打印模板中相應(yīng)的數(shù)據(jù)變量上,如圖6所示,模板中的“name”變量將會(huì)被“郭德強(qiáng)”替代、“title”變量將會(huì)被“科學(xué)家”替代……以此類推。如果存在無(wú)法賦值的變量,可以對(duì)該變量賦以空值,對(duì)應(yīng)的打印效果為空白。本步驟僅對(duì)應(yīng)用傳入的待打印數(shù)據(jù)進(jìn)行替換,模板中所定義的其他打印樣式保持不變。
在S104,對(duì)已賦值的打印樣式模板進(jìn)行繪制;為保證最終的打印效果,本申請(qǐng)是將文本信息轉(zhuǎn)換為圖形信息發(fā)送給打印設(shè)備,頁(yè)面打印裝置可以使用定 義的方式對(duì)模板進(jìn)行繪制。而實(shí)際應(yīng)用中,如果打印樣式模板是基于HTML設(shè)計(jì)的,則頁(yè)面打印裝置可以直接調(diào)用本地的瀏覽器內(nèi)核對(duì)模板進(jìn)行繪制。
以IE瀏覽器為例,頁(yè)面打印裝置可以調(diào)用系統(tǒng)中的IE程序打開(kāi)已經(jīng)被賦值的HTML模板,該步驟可以在后臺(tái)運(yùn)行,不展現(xiàn)運(yùn)行窗口,以便對(duì)用戶實(shí)現(xiàn)無(wú)感知效果,也更適用于執(zhí)行批量打印任務(wù)。然后根據(jù)這個(gè)IE窗口的IWebBrowser2句柄獲取該HTML的document句柄(IHTMLDocument2),再獲取body元素的句柄(IHTMLElement),然后再獲取body元素的視圖句柄(IViewObject2),最后使用IViewObject2.Draw方法,將body元素渲染到內(nèi)存中的矢量圖(EMF)上。
可以理解的是,以上繪制步驟僅用于示意性說(shuō)明,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際需求,選用其他的繪制方法或基于其他瀏覽器內(nèi)核實(shí)現(xiàn)模板的繪制,本申請(qǐng)對(duì)此并不需要進(jìn)行限定。
在S105,針對(duì)繪制結(jié)果生成打印任務(wù),包括選擇打印設(shè)備,選擇紙張大小、設(shè)置單/雙面打印等操作,這些配置可以在用戶執(zhí)行打印操作時(shí)進(jìn)行選擇,由應(yīng)用在打印指令中指定并發(fā)送給頁(yè)面打印裝置,如果在打印指令中沒(méi)有指定,則頁(yè)面打印裝置可以使用默認(rèn)的設(shè)置生成打印任務(wù)。此外,如果有必要,可能還需要根據(jù)所配置打印設(shè)備實(shí)際輸出的PPI(pixels per inch)對(duì)繪制結(jié)果進(jìn)行縮放處理,具體的處理方式可參見(jiàn)現(xiàn)有技術(shù),在本申請(qǐng)中不作進(jìn)一步的詳細(xì)描述。
在S106,將生成的打印任務(wù)發(fā)送至指定打印設(shè)備,完成打印輸出。最終打印輸出效果如圖5所示
如圖1和圖2a、圖2b所示,本申請(qǐng)方案中的應(yīng)用100,可以是具有應(yīng)用功能的網(wǎng)頁(yè),這種方式的實(shí)現(xiàn)需要用戶在瀏覽器中安裝打印功能插件,該插件的作用相當(dāng)于頁(yè)面打印裝置200,對(duì)于IE瀏覽器,可以使用ActiveX方式實(shí)現(xiàn),對(duì)于Firefox、Chrome、Safari等瀏覽器,則可以使用NPAPI方式實(shí)現(xiàn)。應(yīng)用100的另一種形式是獨(dú)立于瀏覽器的客戶端應(yīng)用程序,該應(yīng)用程序具有瀏覽網(wǎng)頁(yè)的功能,同時(shí)還具有生成打印指令及頁(yè)面打印裝置200的功能。
可見(jiàn),上述兩種方式,均需要應(yīng)用100與頁(yè)面打印裝置200高度耦合,這 種情況在實(shí)際使用過(guò)程中存在諸多不便,例如:很多用戶僅有少量的打印需求,并不愿意為此專門安裝瀏覽器插件,而且在不久的將來(lái),很多瀏覽器(例如Chrome、Edge等)將不再支持瀏覽器插件;對(duì)于獨(dú)立于瀏覽器的客戶端應(yīng)用程序而言,用戶的選擇余地就更小,極端情況下可能需要在不同的應(yīng)用程序中均安裝頁(yè)面打印裝置200對(duì)應(yīng)的組件,對(duì)于開(kāi)發(fā)人員而言,也需要在各種基本應(yīng)用的基礎(chǔ)上進(jìn)一步增加頁(yè)面打印裝置200的功能,一定程度上造成重復(fù)開(kāi)發(fā);最后,由于應(yīng)用100與頁(yè)面打印裝置200高度耦合,導(dǎo)致兩者只能安裝在同一設(shè)備(如果在虛擬機(jī)環(huán)境中,則特指同一虛擬機(jī)設(shè)備)中,如圖2a所示,導(dǎo)致靈活性和方便性受到嚴(yán)重限制。
針對(duì)上述問(wèn)題,在本申請(qǐng)的一種具體實(shí)施方式中,使用網(wǎng)絡(luò)連接方式實(shí)現(xiàn)應(yīng)用100和頁(yè)面打印裝置200的通信,以降低兩者之間的耦合度。具體實(shí)現(xiàn)方式如下:
頁(yè)面打印裝置200獨(dú)立于應(yīng)用100運(yùn)行,這里的“獨(dú)立”是指既不作為瀏覽器插件,也不作為其他客戶端應(yīng)用程序的一部分,而是作為獨(dú)立的應(yīng)用程序或系統(tǒng)服務(wù)運(yùn)行于打印控制設(shè)備的操作系統(tǒng)中。
對(duì)于應(yīng)用100側(cè)而言,需要使用網(wǎng)絡(luò)通信協(xié)議與頁(yè)面打印裝置200建立連接,無(wú)論何種語(yǔ)言、何種技術(shù)開(kāi)發(fā)的應(yīng)用,只需要支持網(wǎng)絡(luò)功能即可是實(shí)現(xiàn)連接。例如,客戶端應(yīng)用程序可以通過(guò)TCP或UDP協(xié)議與頁(yè)面打印裝置200建立連接;基于瀏覽器運(yùn)行的Web應(yīng)用則可以通過(guò)HTTP、WebSocket等方式與頁(yè)面打印裝置200建立連接,其中,WebSocket是HTML5標(biāo)準(zhǔn)中提出的通信協(xié)議,很多新版本的瀏覽器包括移動(dòng)端瀏覽器都提供對(duì)WebSocket的支持,HTTP協(xié)議則適用于版本較老的瀏覽器。當(dāng)然,本申請(qǐng)并不需要對(duì)通信協(xié)議的選擇進(jìn)行限定。事實(shí)上,無(wú)論是對(duì)于瀏覽器還是一般的客戶端應(yīng)用程序,網(wǎng)絡(luò)功能都已經(jīng)作為基本功能存在,因此對(duì)于應(yīng)用開(kāi)發(fā)人員而言,這部分功能的實(shí)現(xiàn)并不需要額外的開(kāi)發(fā)成本。
對(duì)于頁(yè)面打印裝置200側(cè),應(yīng)支持至少一種網(wǎng)絡(luò)通信協(xié)議,從通用性的角度考慮,可以盡量支持多種主流的網(wǎng)絡(luò)通信協(xié)議,例如上述的TCP、UDP、HTTP、 WebSocket等。根據(jù)前述的S101,頁(yè)面打印裝置200會(huì)在特定的預(yù)設(shè)網(wǎng)絡(luò)端口上使用這些協(xié)議進(jìn)行監(jiān)聽(tīng),一旦接收到應(yīng)用100側(cè)發(fā)來(lái)的打印指令,便會(huì)執(zhí)行后續(xù)的處理步驟。
可見(jiàn),這種方式有效地降低應(yīng)用100和頁(yè)面打印裝置200之間的耦合度,對(duì)于開(kāi)發(fā)人員而言,可以實(shí)現(xiàn)基本應(yīng)用功能和打印功能獨(dú)立開(kāi)發(fā),而且不同的基本應(yīng)用可以復(fù)用相同的頁(yè)面打印裝置。對(duì)于用戶而言,僅需要安裝所需的基本功能組件即可,不需要額外安裝瀏覽器插件或者重復(fù)安裝帶有打印功能的多種應(yīng)用程序。最后,由于上述方案通過(guò)網(wǎng)絡(luò)來(lái)傳輸打印指令,因此可以支持跨設(shè)備的打印功能,如圖2b所示,某臺(tái)設(shè)備生成的打印指令可以向發(fā)送至另一臺(tái)設(shè)備,由另一臺(tái)設(shè)備來(lái)生成打印任務(wù)。用戶設(shè)備中不需要安裝頁(yè)面打印裝置200,只需要能夠通過(guò)網(wǎng)絡(luò)向裝有頁(yè)面打印裝置200的設(shè)備發(fā)送打印指令即可實(shí)現(xiàn)打印功能。
需要說(shuō)明的是,應(yīng)用上述方案,即便對(duì)于如圖2a所示的應(yīng)用100和頁(yè)面打印裝置200處于同一設(shè)備的情況,仍然可以采用“網(wǎng)絡(luò)連接”的方式實(shí)現(xiàn)打印指令的傳輸,也就是說(shuō),從邏輯上講,該設(shè)備既是打印指令的發(fā)送設(shè)備也是接收設(shè)備,這樣做的目的仍然是為了降低應(yīng)用100和頁(yè)面打印裝置200之間的耦合度,使得兩者即便位于同一設(shè)備中也能夠分別獨(dú)立運(yùn)行,以提高實(shí)際使用的靈活性及方便性。
另外需要說(shuō)明的是,圖1和圖2a、圖2b中僅示出了應(yīng)用100和頁(yè)面打印裝置200一對(duì)一通信的情況,可以理解的是,本申請(qǐng)中的中頁(yè)面打印裝置200可以同時(shí)服務(wù)于多個(gè)應(yīng)用,這些應(yīng)用可以是同一設(shè)備中的應(yīng)用,也可以是不同設(shè)備中的應(yīng)用,從而實(shí)現(xiàn)多設(shè)備、多應(yīng)用對(duì)頁(yè)面打印裝置200的復(fù)用。
如果在虛擬機(jī)環(huán)境下,則本申請(qǐng)中的“設(shè)備”概念可以進(jìn)一步擴(kuò)展到“虛擬機(jī)”層面,而不是特指一臺(tái)物理設(shè)備,關(guān)于虛擬機(jī)具體的實(shí)現(xiàn)與本申請(qǐng)的打印方案無(wú)關(guān),這里不做進(jìn)一步的詳細(xì)說(shuō)明。
本申請(qǐng)所提供的打印方案,頁(yè)面打印裝置200除了可以被多個(gè)應(yīng)用復(fù)用之外,還可以連接并控制多臺(tái)打印設(shè)備。連接多臺(tái)打印設(shè)備的原因在于不同類型 的打印機(jī)能夠滿足不同的打印需求,例如針式打印機(jī)可以用來(lái)打印復(fù)寫紙、多聯(lián)紙,激光打印機(jī)可以用來(lái)打印文檔和照片,熱敏打印機(jī)則通常用來(lái)打印特定的票據(jù)或單據(jù)。此外,有些打印機(jī)可能支持雙面打印、彩色打印等功能,有些打印機(jī)的功能則比較簡(jiǎn)單,等等。即便僅使用同一臺(tái)打印機(jī),也存在選擇紙張類型、選擇單/雙面打印、選擇打印輸出分辨率等需求。如果這些全部由用戶手動(dòng)配置,不僅存在操作繁瑣的問(wèn)題,而且很多情況下用戶可能并不清楚什么樣的配置、甚至該選用哪一臺(tái)打印設(shè)備能夠滿足自己的打印需求,造成實(shí)際的使用困難。
針對(duì)上述問(wèn)題,在本申請(qǐng)的一種具體實(shí)施方式中,根據(jù)各種實(shí)際打印需求,預(yù)先定義若干條打印設(shè)備配置項(xiàng)信息,在每條打印設(shè)備配置項(xiàng)信息中,可以指定該需求所使用的打印設(shè)備、紙張配置、打印版式(包括單/雙面、橫/縱向、每頁(yè)n版等等)、打印分辨率等等。當(dāng)然,以上具體的配置信息類型僅用于示意性說(shuō)明,并不構(gòu)成對(duì)本申請(qǐng)方案的限定。
圖7a和圖7b分別示出了兩種打印設(shè)備配置項(xiàng)信息的示意圖,配置項(xiàng)名稱分別為“中通面單”和“圓通面單”,配置項(xiàng)中具體包括的參數(shù)有:所需要使用的打印機(jī)、打印紙張選擇、打印方向選擇、打印單/雙面選擇,根據(jù)圖7a和圖7b所示配置結(jié)果,這兩種配置項(xiàng)的具體配置信息是相同的??梢岳斫獾氖牵@些信息需要通過(guò)代碼定義,并且存儲(chǔ)在配置文件中,圖7a和圖7b所示僅是該配置項(xiàng)的展現(xiàn)效果示意圖。
用戶在應(yīng)用側(cè)執(zhí)行打印操作時(shí),應(yīng)用根據(jù)用戶的選擇操作,或者根據(jù)打印需求的自動(dòng)識(shí)別結(jié)果,確定需要使用的打印配置,然后在所生成的打印指令中,進(jìn)一步添加用于標(biāo)識(shí)打印設(shè)備配置項(xiàng)的字段,例如:
{
templateUrl":"http://205.0.0.1/card.html",
"data":{"customer":"Spirit"},
"configName":"名片"
}
上述指令中的“templateUrl”字段指定了打印樣式模板的網(wǎng)絡(luò)存儲(chǔ)路徑, “data”字段給出了本次需要打印的文本內(nèi)容數(shù)據(jù),并且給出了這些數(shù)據(jù)與模板中數(shù)據(jù)變量的對(duì)應(yīng)關(guān)系,而“configName”字段則指定了本次打印使用的配置項(xiàng)名稱。
與打印樣式模板相類似,不同的配置項(xiàng)既可以存儲(chǔ)在同一文件中,也可以分別存儲(chǔ)在不同的文件中,在實(shí)際應(yīng)用過(guò)程中,除配置項(xiàng)名稱之外,還可以采用其他形式的信息作為打印設(shè)備配置項(xiàng)信息標(biāo)識(shí),例如配置項(xiàng)的ID、配置項(xiàng)的文件名等等,只要能夠令頁(yè)面打印裝置根據(jù)該標(biāo)識(shí)唯一確定相應(yīng)的配置項(xiàng)即可。此外,這里的打印設(shè)備配置項(xiàng)信息標(biāo)識(shí)中也可以進(jìn)一步包含該配置項(xiàng)信息的存儲(chǔ)路徑,并且該路徑可以是頁(yè)面打印裝置本地的存儲(chǔ)路徑,或者是網(wǎng)絡(luò)上的存儲(chǔ)路徑,具體可以參見(jiàn)前面的實(shí)施例,本實(shí)施例不再重復(fù)說(shuō)明。
在S105,頁(yè)面打印裝置接收到打印指令并解析出打印設(shè)備配置項(xiàng)標(biāo)識(shí)后,根據(jù)該標(biāo)識(shí)獲取到預(yù)設(shè)的打印設(shè)備配置項(xiàng)信息,根據(jù)配置項(xiàng)中指定的打印機(jī)、打印紙張選擇、打印方向選擇等具體參數(shù)對(duì)本次打印所使用的打印設(shè)備進(jìn)行配置,配置項(xiàng)中未指定的參數(shù)可以使用缺省配置,進(jìn)而生成相應(yīng)的打印任務(wù)。
需要說(shuō)明的是,在配置項(xiàng)中,可以不指定具體使用的打印設(shè)備,如果存在多臺(tái)打印設(shè)備,則頁(yè)面打印裝置可以在當(dāng)前可用的多臺(tái)打印設(shè)備中,自動(dòng)選擇與所打印設(shè)備配置項(xiàng)信息相匹配的打印設(shè)備作為本次打印任務(wù)執(zhí)行設(shè)備。這里的“匹配”可以采用多種規(guī)則實(shí)現(xiàn),例如:滿足匹配項(xiàng)中所指定的打印設(shè)備類型(例如激光打印機(jī)、熱敏打印機(jī)等)、滿足配置項(xiàng)中的其他參數(shù)配置要求,或者通過(guò)查找預(yù)設(shè)的對(duì)應(yīng)關(guān)系來(lái)確定能夠滿足當(dāng)前配置項(xiàng)需求的打印機(jī),等等。如果成功匹配了多臺(tái)打印設(shè)備,則可以用隨機(jī)選擇或優(yōu)先選擇空閑設(shè)備等方式分配當(dāng)前的打印任務(wù)。
此外,在本步驟中,如果獲取打印設(shè)備配置項(xiàng)信息失敗(例如找不到相應(yīng)的配置項(xiàng))、或者據(jù)打印設(shè)備配置項(xiàng)信息對(duì)打印設(shè)備進(jìn)行配置失敗(例如打印設(shè)備當(dāng)前并不支持某些配置項(xiàng)中指定的參數(shù)),則可以返回錯(cuò)誤信息,或者直接嘗試使用缺省配置進(jìn)行打印,本領(lǐng)域技術(shù)人員可以根據(jù)實(shí)際需求靈活實(shí)施。
在本實(shí)施例所提供的方案中,頁(yè)面打印裝置利用預(yù)設(shè)的配置項(xiàng)信息對(duì)打印 設(shè)備進(jìn)行一次配置,不需要用戶逐項(xiàng)選擇,可以有效地減少用戶在對(duì)打印設(shè)備進(jìn)行配置或選擇打印設(shè)備時(shí)的不便,對(duì)于頁(yè)面打印裝置而言,也可以更為有效地在多臺(tái)打印設(shè)備之間分配打印任務(wù)。
相應(yīng)于上述方法實(shí)施例,本申請(qǐng)還提供一種頁(yè)面打印裝置,參見(jiàn)圖8所示,該裝置可以包括:
打印指令接收模塊210,用于接收應(yīng)用發(fā)送的頁(yè)面打印指令,頁(yè)面打印指令中攜帶:打印樣式模板標(biāo)識(shí)、待打印數(shù)據(jù)、以及待打印數(shù)據(jù)與打印樣式模板中數(shù)據(jù)變量的對(duì)應(yīng)關(guān)系信息;
模板獲取模塊220,用于根據(jù)打印樣式模板標(biāo)識(shí),獲取預(yù)設(shè)的打印樣式模板;
模板賦值模塊230,用于根據(jù)對(duì)應(yīng)關(guān)系信息,利用待打印數(shù)據(jù)對(duì)所獲取的打印樣式模板中的數(shù)據(jù)變量進(jìn)行賦值;
繪制模塊240,用于對(duì)已賦值的打印樣式模板進(jìn)行繪制;
打印任務(wù)生成模塊240,用于針對(duì)繪制結(jié)果生成打印任務(wù);
打印任務(wù)發(fā)送模塊260,用于將打印任務(wù)發(fā)送至打印設(shè)備進(jìn)行打印。
根據(jù)本申請(qǐng)的一種具體實(shí)施方式,打印指令接收模塊210,具體可以用于:
對(duì)預(yù)設(shè)的網(wǎng)絡(luò)端口進(jìn)行監(jiān)聽(tīng),從網(wǎng)絡(luò)端口接收應(yīng)用發(fā)送的頁(yè)面打印指令。
根據(jù)本申請(qǐng)的一種具體實(shí)施方式,從網(wǎng)絡(luò)端口接收的頁(yè)面打印指令可以包括:
打印控制設(shè)備上的應(yīng)用發(fā)送至網(wǎng)絡(luò)端口的頁(yè)面打印指令;
或
非打印控制設(shè)備上的應(yīng)用發(fā)送至網(wǎng)絡(luò)端口的頁(yè)面打印指令。
根據(jù)本申請(qǐng)的一種具體實(shí)施方式,打印樣式模板標(biāo)識(shí)可以包括:
包含存儲(chǔ)路徑的打印樣式模板標(biāo)識(shí)。
根據(jù)本申請(qǐng)的一種具體實(shí)施方式,打印樣式模板可以基于超文本標(biāo)記語(yǔ)言HTML設(shè)計(jì);
相應(yīng)地繪制模塊240具體可以用于:調(diào)用瀏覽器內(nèi)核,對(duì)已賦值的打印樣式模板進(jìn)行繪制。
根據(jù)本申請(qǐng)的一種具體實(shí)施方式,頁(yè)面打印指令中還可以攜帶:打印設(shè)備配置項(xiàng)標(biāo)識(shí);
相應(yīng)地,打印任務(wù)生成模塊250,具體可以用于:
根據(jù)打印設(shè)備配置項(xiàng)標(biāo)識(shí),獲取預(yù)設(shè)的打印設(shè)備配置項(xiàng)信息;
根據(jù)所獲取的打印設(shè)備配置項(xiàng)信息對(duì)打印任務(wù)所使用的打印設(shè)備進(jìn)行配置,根據(jù)配置結(jié)果生成針對(duì)繪制結(jié)果的打印任務(wù)。
根據(jù)本申請(qǐng)的一種具體實(shí)施方式,打印設(shè)備配置項(xiàng)信息可以包括:
指定使用的打印設(shè)備標(biāo)識(shí)信息、紙張配置信息、打印版式配置信息、和/或打印分辨率配置信息。
根據(jù)本申請(qǐng)的一種具體實(shí)施方式,在打印設(shè)備配置項(xiàng)信息中不包括指定使用的打印設(shè)備標(biāo)識(shí)信息的情況下,打印任務(wù)生成模塊250可以從當(dāng)前可用的打印設(shè)備中,選擇與打印設(shè)備配置項(xiàng)信息相匹配的打印設(shè)備作為打印任務(wù)的執(zhí)行設(shè)備。
上述裝置中各個(gè)模塊的功能和作用的實(shí)現(xiàn)過(guò)程具體詳見(jiàn)上述方法中對(duì)應(yīng)步驟的實(shí)現(xiàn)過(guò)程,在此不再贅述。
通過(guò)以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請(qǐng)可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn)?;谶@樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
本說(shuō)明書中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的裝置實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的模塊可以是或者也可以不是物理上分開(kāi)的,在實(shí)施本申請(qǐng)方案時(shí)可以把各模塊的功能在同一個(gè)或多個(gè)軟件和/或 硬件中實(shí)現(xiàn)。也可以根據(jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
以上所述僅是本申請(qǐng)的具體實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本申請(qǐng)?jiān)淼那疤嵯?,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。