專利名稱:一種電子文檔分頁打印方法
技術(shù)領(lǐng)域:
本發(fā)明涉及電子文檔的打印技術(shù),特別是指一種電子文檔分頁打印方法。
背景技術(shù):
在打印電子文檔時(shí),文檔上面會(huì)出現(xiàn)各種基本單元,例如Windows等操 作系統(tǒng)支持的電子文檔包含的基本單元和書生國(guó)際公司開發(fā)的電子文檔包含 的各種基本單元。打印這些電子文檔的基本流程如圖1所示,首先裝載文檔 文件,然后構(gòu)建打印框架實(shí)現(xiàn)打印功能并進(jìn)行打印。由于電子文檔在填寫時(shí) 會(huì)動(dòng)態(tài)地增長(zhǎng),因此在打印時(shí)會(huì)出現(xiàn)需要分頁打印,位于頁面邊緣的基本單 元需要分頁顯示的情況,在以微軟的Office為代表的支持處理電子文檔的軟 件中, 一般是把超出本頁打印范圍的基本單元整體安排在下一頁顯示并打印, 但是這種處理方法使得文檔在整體瀏覽方面不直觀,破壞了整個(gè)文檔頁面的 結(jié)構(gòu);書生國(guó)際公司原有的打印方法,具有支持微軟Office軟件的打印技術(shù) 的特點(diǎn),并開發(fā)出了自己的打印技術(shù),但是在處理分頁打印方面,也存在和 Office類似的問題。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種電子文檔分頁打印方法,實(shí)現(xiàn)把 超出當(dāng)前頁打印范圍的基本單元依據(jù)本發(fā)明定義的切分規(guī)則進(jìn)行切分并打 印。
一種電子文檔分頁打印方法,包含以下步驟-
A. 確定當(dāng)前打印紙張和電子文檔待打印頁面的尺寸,初始化當(dāng)前待打印 頁面起始位置和終止位置;
B. 判斷待打印頁面是否小于等于打印紙張尺寸,如果是,轉(zhuǎn)入步驟E, 正式打印,否則轉(zhuǎn)步驟C;
C. 對(duì)超出頁面邊緣的基本單元應(yīng)用預(yù)先設(shè)置的切分規(guī)則進(jìn)行切分,計(jì)算 切分后待打印頁面的最終偏移量,其中切分線是打印頁面的終止位置;D. 根據(jù)當(dāng)前頁面終止位置、當(dāng)前最終偏移量和打印紙張高度確定當(dāng)前頁 切分之后下一個(gè)待打印頁面的起始和終止位置,轉(zhuǎn)步驟B;
E. 根據(jù)獲取的參數(shù)正式打印頁面。
該方法所述步驟B之前進(jìn)一步包括,將電子文檔頁面的坐標(biāo)系轉(zhuǎn)化為打 印的預(yù)覽視圖的坐標(biāo)系。
該方法所述步驟C根據(jù)切分規(guī)則確定待打印頁面的最終偏移量的過程
中,進(jìn)一步包括
Cl.初始化當(dāng)前切分線偏移量;
C2.如果切分線不分割任何基本單元,轉(zhuǎn)步驟C6;否則取切分線上的第 一個(gè)基本單元;
C3.判斷該基本單元如果是容器基本單元且包含子基本單元,則轉(zhuǎn)步驟
C4;
如果該基本單元不是容器基本單元或該基本單元是容器基本單元但不包 含子基本單元,則應(yīng)用預(yù)先設(shè)置的切分規(guī)則切分該基本單元,切分線偏移量
取該基本單元切分后的偏移量,判斷如果切分線偏移量改變,轉(zhuǎn)步驟C2,否 則轉(zhuǎn)C5;
C4.枚舉該容器基本單元中被切分線分割的子基本單元,判斷如果子基
本單元是容器基本單元且包含子基本單元,則遞歸枚舉其被切分線分割的子
基本單元;
如果存在不是容器基本單元的子基本單元或不再包含子基本單元的容器 子基本單元,且該子基本單元的偏移量不等于切分線偏移量,則切分線偏移 量取該子基本單元的偏移量,轉(zhuǎn)步驟C2,否則轉(zhuǎn)步驟C5;
C5.判斷如果切分線上仍存在被分割的基本單元,枚舉下一個(gè)被切分線 分割的基本單元,轉(zhuǎn)步驟C3,否則轉(zhuǎn)步驟C6;
C6.輸出切分線偏移量為最終偏移量。
該方法中,如果待打印頁面存在頁眉或頁腳,則所述步驟D之前進(jìn)一步 包括
(1).初始化待打印頁面的頁眉和頁腳的偏移參數(shù),判斷是否存在頁眉,
如果存在,則轉(zhuǎn)步驟(2),否則轉(zhuǎn)步驟(3);
(2) .判斷當(dāng)前打印范圍是否包括頁眉,如果是,修改偏移參數(shù),否則轉(zhuǎn) 步驟(3);
(3) .判斷是否存在頁腳,如果存在,修改偏移參數(shù),否則當(dāng)前偏移參數(shù) 為最終結(jié)果;
該方法所述步驟E進(jìn)一步包括當(dāng)前已打印頁面數(shù)累加1,判斷是否還 存在待打印頁面,如果存在,繼續(xù)打印,否則返回已打印頁面數(shù)。
該方法在Windows平臺(tái)上利用標(biāo)準(zhǔn)插件實(shí)現(xiàn)時(shí),所述標(biāo)準(zhǔn)插件至少包括 對(duì)象鏈接與嵌入插件,對(duì)象鏈接和嵌入控制擴(kuò)展插件,ActiveX插件。
該方法所述步驟C2或C3分別進(jìn)一步包括,判斷當(dāng)前基本單元的類型, 根據(jù)其類型選擇切分規(guī)則確定當(dāng)前基本單元的偏移量。
該方法所述切分規(guī)則具體包括普通基本單元的切分規(guī)則;文本框的切 分規(guī)則;表格和復(fù)選框的切分規(guī)則;直線、圓形、矩形的切分規(guī)則;同一條 切分線上的基本單元取最大偏移量的原則;最大化顯示的原則;基本單元相 對(duì)位置不變?cè)瓌t和外邊框延伸原則。
該方法所述普通基本單元的切分規(guī)則是基本單元在一個(gè)頁面不能完全 顯示時(shí),偏移到下一個(gè)頁面。
該方法所述TextBox基本單元的切分規(guī)則是單行顯示的TextBox基本 單元和多行顯示但高度低于規(guī)定數(shù)值的TextBox基本單元遵循普通基本單元 切分規(guī)則;多行顯示但高度高于規(guī)定數(shù)值的TextBox基本單元遵循以下規(guī)則: 如果基本單元內(nèi)的文本信息能夠完整顯示則不做偏移;如果基本單元內(nèi)的文 本信息被截掉一部分,需要將截掉的文本行偏移到下一頁。
該方法所述Table和Repeat基本單元的切分規(guī)則包括切分線在電子文 檔中的表格實(shí)體上、切分線在表頭、切分線在表尾三種情況。
該方法所述表格和復(fù)選框基本單元中,切分線在表格實(shí)體上的切分規(guī)則
是
a.有表尾的情況將切分線向上作表尾高度距離的偏移, al.若切分線已經(jīng)偏移出表格實(shí)體,則表格連同表頭偏移到下一頁顯示; a2.將切分線向上作表尾高度距離的偏移,若切分線還在表格實(shí)體內(nèi), 如果此時(shí)切分線沒有切分表格行,例如切分線恰好和表格線重合,則上一頁
顯示此切分線之上的單元格;如果此時(shí)切分線切分到表格行,取出被切分線 切分的當(dāng)前行,按照TextBox基本單元的切分規(guī)則處理;如果此時(shí)單元格內(nèi) 還有基本單元的話,參考相應(yīng)基本單元的切分規(guī)則處理; b.沒有表尾的情況依照規(guī)則al和規(guī)則a2處理。
該方法所述表格和復(fù)選框基本單元中,切分線在表頭的切分規(guī)則是整
個(gè)表格連同表頭和表尾一起偏移到下一頁顯示
該方法所述表格和復(fù)選框基本單元中,切分線在表尾的切分規(guī)則是將 切分線向上作表尾高度距離的偏移,按照規(guī)則al和規(guī)則a2處理。
該方法所述直線、圓形、矩形基本單元的切分規(guī)則是按照切分線被切 分的兩部分分別在兩頁中顯示。
該方法所述同一條切分線上的基本單元取最大偏移量的原則是同一條 切分線上可能會(huì)有多個(gè)基本單元存在,最終偏移量取各個(gè)基本單元的偏移量 的最大值。
該方法所述最大化顯示的原則是初始切分線上的基本單元在分頁顯示 時(shí),根據(jù)本身計(jì)算的切分線位置之上的內(nèi)容應(yīng)該在上一頁中顯示,不必遵循 最終切分線的位置來處理。
該方法所述基本單元相對(duì)位置不變?cè)瓌t和外邊框延伸原則是被切分在 兩頁顯示的,尤其是在水平方向有交錯(cuò)的基本單元,它們之間的相對(duì)位置應(yīng) 該保持不變;當(dāng)基本單元因?yàn)楦髯忧蟹志€的位置不同而在第二頁有錯(cuò)位時(shí), 應(yīng)該將基本單元拉伸以匹配周圍基本單元,己經(jīng)在上一頁顯示過的內(nèi)容信息 沒有必要在下一頁重復(fù)顯示。
該方法中,所述電子文檔是電子表單時(shí),所述基本單元是標(biāo)準(zhǔn)控件。
該方法中,如果所述切分線不斷調(diào)整后導(dǎo)致頁面大小小于預(yù)先設(shè)定的數(shù) 值,則對(duì)頁面直接進(jìn)行切分而不再做調(diào)整。
本發(fā)明的電子文檔分頁打印方法,實(shí)現(xiàn)了本發(fā)明預(yù)先定義的切分規(guī)則的 技術(shù)手段,解決了原有技術(shù)中,把超出本頁打印范圍的基本單元整體安排在 下一頁顯示并打印,而導(dǎo)致的文檔整體瀏覽不直觀,整個(gè)文檔頁面結(jié)構(gòu)被破 壞的情況。并且本發(fā)明的技術(shù)可以在多種操作系統(tǒng)平臺(tái)支持的標(biāo)準(zhǔn)插件中實(shí) 現(xiàn),減少了實(shí)現(xiàn)本發(fā)明的模塊和原來實(shí)現(xiàn)打印功能的軟件之間的耦合性。
圖1為打印的基本流程示意圖2為Windows支持的MFC打印框架示意圖3為打印頁面的計(jì)算流程示意圖4為根據(jù)切分線取最終偏移量的流程示意圖5為普通基本單元切分規(guī)則示意圖6為文本框基本單元切分規(guī)則示意圖7為表格和復(fù)選框基本單元切分規(guī)則示意圖8為同一切分線上的基本單元取最大偏移量原則的示意圖9為最大化顯示原則的示意圖10為基本單元相對(duì)位置不變?cè)瓌t和外邊框延伸原則的示意圖。
具體實(shí)施例方式
由于電子文檔在填寫時(shí)會(huì)動(dòng)態(tài)地增長(zhǎng),因此在打印時(shí)會(huì)出現(xiàn)分頁打印的 情況,此時(shí)位于頁面邊緣的基本單元就需要分頁顯示。為了實(shí)現(xiàn)打印后較好 的頁面顯示效果,本發(fā)明中,在分頁的頁面邊緣,利用一條當(dāng)前打印頁的終 止位置所在的虛擬的線切分待打印的頁面,這條虛擬的線稱為切分線,并實(shí) 現(xiàn)了若干打印切分規(guī)則。
本發(fā)明的思路是為了減少打印模塊和原來實(shí)現(xiàn)打印功能的軟件(主要是 指辦公軟件或者是相應(yīng)的操作系統(tǒng))之間的耦合性,把打印模塊設(shè)計(jì)成為一個(gè) 操作系統(tǒng)支持的標(biāo)準(zhǔn)插件,或者是作為原來實(shí)現(xiàn)打印功能的軟件的一個(gè)增加 新功能的補(bǔ)??;在應(yīng)用時(shí),把標(biāo)準(zhǔn)插件或補(bǔ)丁嵌入到原來實(shí)現(xiàn)打印功能的軟 件中,實(shí)現(xiàn)本發(fā)明的功能。 實(shí)施例1:
本實(shí)施例描述了本發(fā)明技術(shù)方案的工作流程,實(shí)現(xiàn)把超出當(dāng)前頁打印范 圍的基本單元依據(jù)本發(fā)明定義的切分規(guī)則進(jìn)行切分并打?。幻枋龅墓ぷ髁鞒?br>
可以在多個(gè)操作系統(tǒng)平臺(tái)上面實(shí)現(xiàn)。如果切分線不斷調(diào)整后導(dǎo)致頁面大小小 于預(yù)先設(shè)定的數(shù)值,則對(duì)頁面直接進(jìn)行切分并打印即可,而不必再做調(diào)整。 下面結(jié)合附圖3對(duì)本發(fā)明較佳實(shí)施例進(jìn)行詳細(xì)描述。
步驟301,取得當(dāng)前打印機(jī)的打印紙張大小,包括打印紙張的高度 nPrintPageHeight、紙張寬度nPrintPageWidth;當(dāng)前已經(jīng)打印的頁面數(shù)設(shè)置為 0。
步驟302,確定待打印電子文檔頁面的高度nPageHeight,頁面寬度 nPage Width 。
步驟303,初始化當(dāng)前頁面起始位置nStartPos為0,則打印頁終止位置 nEndPos=nStartPos+nPrintPageHeight,其中nPrintPageHeight是紙張高度。
步驟304,電子文檔內(nèi)的基本單元的坐標(biāo)是以文檔頁面的左上角為坐標(biāo) 原點(diǎn),這和打印的預(yù)覽視圖的坐標(biāo)系有沖突;將文檔頁面的坐標(biāo)系轉(zhuǎn)化為打 印的預(yù)覽視圖的坐標(biāo)系,通常是將打印的預(yù)覽視圖原點(diǎn)向左上偏移到文檔坐 標(biāo)系的原點(diǎn)位置,使當(dāng)前文檔頁面的內(nèi)容正確顯示在打印的預(yù)覽視圖中。
步驟305,判斷待打印電子文檔頁面高度nPageHeight是否大于打印紙張 高度nPrintPageHeight,如果是,就需要切分頁面,進(jìn)入步驟306;否則轉(zhuǎn)入 步驟313。
步驟306,切分頁面時(shí),以打印頁終止位置nEndPos作為切分線,轉(zhuǎn)入 根據(jù)切分線獲取最終偏移量的流程,獲取最終偏移量的具體流程如圖4所示, 取得當(dāng)前頁面最終偏移量nAppendHeight。
步驟307,判斷是否存在頁眉,如果是轉(zhuǎn)步驟308,否則轉(zhuǎn)步驟310。
步驟308,判斷當(dāng)前打印的范圍是否已經(jīng)包括了頁眉,如果是,轉(zhuǎn)步驟 310,否則轉(zhuǎn)步驟309。
步驟309,將高度參數(shù)nOffset加上頁眉高度。
步驟310,判斷是否存在頁腳,如果存在,轉(zhuǎn)步驟311,否則轉(zhuǎn)步驟312。 步驟311,高度參數(shù)nOffset加上頁腳高度。
步驟312,由當(dāng)前頁面的終止位置nEndPos計(jì)算出下一個(gè)頁面的起始位 置nStartPos^nEndPos-nAppendHeight-nOffset和終止位置nEndPos=nEndPos + nPrintPageHeight;完成當(dāng)前頁面的計(jì)算后,轉(zhuǎn)到步驟304,計(jì)算下一頁的切
分偏移量o
步驟313,打印頁面,且把當(dāng)前已經(jīng)打印頁面數(shù)加1。
步驟314,判斷是否還有頁面,如果有,轉(zhuǎn)步驟302,否則轉(zhuǎn)步驟315。
步驟315,返回打印頁面數(shù),打印結(jié)束。
其中步驟306如圖4所示,根據(jù)切分規(guī)則確定待打印頁面的最終偏移量 的過程中進(jìn)一步包括
步驟401,初始化當(dāng)前切分線偏移量。
步驟402.如果切分線不分割任何基本單元,轉(zhuǎn)步驟410;否則取切分線 上的第一個(gè)基本單元。
步驟403.判斷該基本單元是否是容器基本單元且包含子基本單元,如果 是轉(zhuǎn)步驟406,否則轉(zhuǎn)步驟404。
步驟404.該基本單元不是容器基本單元或該基本單元是容器基本單元 但不包含子基本單元,則切分線偏移量取該基本單元的偏移量。
轉(zhuǎn)步驟402,否則轉(zhuǎn)步驟405。
步驟405.判斷切分線偏移量是否改變,如果是,轉(zhuǎn)步驟402,否則轉(zhuǎn)步 驟408。
步驟406.枚舉該容器基本單元中被切分線分割的子基本單元,如果子基 本單元是容器基本單元?jiǎng)t遞歸枚舉其被切分線分割的子基本單元。
步驟407.是否存在不是容器基本單元的子基本單元或不再包含子基本 單元的容器子基本單元,且該子基本單元的偏移量不等于切分線偏移量,則 切分線偏移量取該子基本單元的偏移量,轉(zhuǎn)步驟402,否則轉(zhuǎn)步驟408。
步驟408.判斷如果切分線上仍存在被分割的基本單元。
步驟409.枚舉下一個(gè)被切分線分割的基本單元,轉(zhuǎn)步驟403,否則轉(zhuǎn)步 驟410。
步驟410.輸出切分線偏移量為最終偏移量。
當(dāng)電子文檔包含各種基本單元時(shí),上述基本單元即為當(dāng)前操作系統(tǒng)支持
的各種基本單元;其中上述步驟中確定所有基本單元最終偏移量的方法,實(shí)
現(xiàn)了本發(fā)明的切分規(guī)則,所述切分規(guī)則具體包括
a) 普通基本單元的切分規(guī)則;
b) 文本框(TextBox)基本單元的切分規(guī)則;
c) 表格(Table)和復(fù)選(Repeat)基本單元的切分規(guī)則;
d) 直線(Line)、圓(Circle)、矩形(Rectangle)基本單元的切分規(guī)則;e) 同一條切分線上的基本單元取最大偏移量的原則;
f) 最大化顯示的原則;
g) 基本單元相對(duì)位置不變?cè)瓌t和外邊框延伸原則。 下面結(jié)合附圖5 10詳細(xì)描述本發(fā)明定義的切分規(guī)則
a) 普通基本單元的切分規(guī)則如圖5所示,圖中下面的線是初始切分線所 在的位置,上面的線是切分線調(diào)整之后的位置;普通基本單元在一個(gè)頁面不 能完全顯示時(shí),把基本單元整體偏移到下一個(gè)頁面。
b) 文本框TextBox基本單元的切分規(guī)則如圖6所示,圖中下面的線是初 始切分線所在的位置,上面的線是切分線調(diào)整之后的位置;圖6A中單行顯 示的TextBox和多行顯示但高度低于等于規(guī)定數(shù)值,例如40象素,的TextBox 基本單元遵循普通基本單元切分規(guī)則;圖6B中多行顯示但高度高于規(guī)定數(shù)值 的TextBox基本單元遵循以下規(guī)則如果基本單元內(nèi)的文本信息能夠完整顯 示則不做偏移;如果基本單元內(nèi)的文本信息被截掉一部分,需要將截掉的文 本行偏移到下一頁,圖6C是其打印效果圖。
c) 表格Table和復(fù)選框Repeat基本單元的切分規(guī)則如圖7所示,圖中下 面的線是初始切分線所在的位置,上面的線是切分線調(diào)整之后的位置;圖7A 是行高低于等于預(yù)先規(guī)定數(shù)值,例如40個(gè)象素的情況,其中下面的線是初始 切分線所在的位置,上面的線是切分線調(diào)整之后的位置;圖7B是行高高于規(guī) 定數(shù)值的情況,圖7C是其打印效果圖。
Table和Repeat基本單元的具體切分規(guī)則分為切分線在表格實(shí)體上、切 分線在表頭、切分線在表尾三種情況。
c-l)切分線在表格實(shí)體上的切分規(guī)則是指
C-l-l)有表尾的情況,將切分線向上做表尾高度距離的偏移
1. 若切分線已經(jīng)偏移出表格實(shí)體,則表格連同表頭偏移到下一頁顯示。
2. 若切分線還在表格實(shí)體內(nèi),如果此時(shí)切分線沒有切分表格行,例如 切分線恰好和表格線重合,則上一頁顯示此切分線之上的單元格;如 果此時(shí)切分線切分到表格行,取出被切分線切分的當(dāng)前行,按照 TextBox基本單元的切分規(guī)則處理;如果此時(shí)單元格內(nèi)還有基本單元的 話,參考相應(yīng)基本單元的切分規(guī)則處理。C-l-2)沒有表尾的情況依照規(guī)則C-l-l)中1和2的規(guī)則處理。 C-2)切分線在表頭的切分規(guī)則是指整個(gè)表格連同表頭和表尾一起偏移 到下一頁顯示。
C-3)切分線在表尾的切分規(guī)則是指將切分線向上作表尾高度的偏移, 按照規(guī)則C-l-l)中1和2的規(guī)則來處理。
d) Line、 Circle、 Rectangle基本單元的切分規(guī)則是指不進(jìn)行額外調(diào)整, 按照初始切分線被切分的兩部分分別在兩頁中顯示。
e) 同一條切分線上的基本單元取最大偏移量的原則如圖8所示,圖中下 面的線是初始切分線所在的位置,上面的線是切分線調(diào)整之后的位置,而中 間的線是初始切分線在輸入框基本單元上調(diào)整后的位置;同一條切分線上可 能會(huì)有多個(gè)基本單元存在,最終偏移量取各個(gè)基本單元的偏移量的最大值。
f) 最大化顯示的原則如圖9所示,圖中下面的線是初始切分線所在的位 置,上面的線是切分線調(diào)整之后的位置,而中間的線是初始切分線在多行輸 入框基本單元上調(diào)整后的位置;圖9B是上一頁的打印效果圖,圖9C是下一 頁的打印效果圖。初始切分線上的基本單元在分頁顯示時(shí),根據(jù)本身計(jì)算的 最終切分線的位置,最終切分線以上的內(nèi)容應(yīng)該在上一頁中顯示,不必遵循 最終切分線的位置來處理,圖9A是切分后的效果圖。
g) 基本單元相對(duì)位置不變?cè)瓌t和外邊框延伸原則如圖IO所示,圖中下 面的線是初始切分線所在的位置,上面的線是切分線調(diào)整之后的位置,而中 間的線是初始切分線在多行輸入框基本單元上調(diào)整后的位置;圖IOB是上一 頁的打印效果圖,圖IOC是下一頁的打印效果圖。被切分在兩頁顯示的,特 別是在水平方向有交錯(cuò)的基本單元,它們之間的相對(duì)位置應(yīng)該保持不變;當(dāng) 基本單元因?yàn)楦髯忧蟹志€的位置不同而在第二頁有錯(cuò)位時(shí),應(yīng)該將基本單元 拉伸以匹配周圍基本單元,已經(jīng)在上一頁顯示過的內(nèi)容信息不必在下一頁重 復(fù)顯示,圖IOA是其切分后的效果圖。
本發(fā)明中,上述實(shí)施例描述的技術(shù)方案可以在多個(gè)操作系統(tǒng)系統(tǒng)平臺(tái)上 面實(shí)現(xiàn),但是當(dāng)所述的電子文檔是電子表單時(shí),則所述基本單元可以是在電 子表單上面能夠?qū)崿F(xiàn)的任何標(biāo)準(zhǔn)控件。
實(shí)施例2:
當(dāng)操作系統(tǒng)平臺(tái)是Windows時(shí),所述標(biāo)準(zhǔn)插件可以是對(duì)象鏈接和嵌入控 制擴(kuò)展(OCX, OLE Control Extension)插件、ActiveX插件以及其它的插件, 可以在標(biāo)準(zhǔn)插件中引入微軟基礎(chǔ)類庫(kù)(MFC, Microsoft Foundation Classes)中 的打印框架類,并基于MFC打印框架實(shí)現(xiàn)本發(fā)明的打印方法。打印方法具體 包括確定當(dāng)前打印紙張和電子文檔待打印頁面的尺寸,如果待打印頁面小 于等于打印紙張尺寸,則正常打印,否則應(yīng)用切分規(guī)則進(jìn)行切分;切分頁面 時(shí),根據(jù)封裝于標(biāo)準(zhǔn)插件的MFC打印框架中的切分規(guī)則確定待打印頁面的最 終偏移量,同時(shí)確定待打印頁面的頁眉頁腳高度;然后正式打印頁面,并計(jì) 算下一個(gè)待打印頁面的打印參數(shù),為下一次打印做準(zhǔn)備。
所述標(biāo)準(zhǔn)插件是一種獨(dú)立的標(biāo)準(zhǔn)的Windows程序模塊,可以在Windows 環(huán)境下被其他程序訪問,因此基于標(biāo)準(zhǔn)插件實(shí)現(xiàn)的本發(fā)明的方法可以用于打 印任何支持Windows基本單元的文檔。
如圖2所示,基于MFC打印框架實(shí)現(xiàn)本發(fā)明的功能,所述MFC打印框 架提供了框架性的打印和打印預(yù)覽功能代碼,本發(fā)明的基本思想是將實(shí)際預(yù) 覽和打印文檔的執(zhí)行代碼與上述框架性代碼合而為一,具體包括
步驟201,開始打印以后,調(diào)用打印框架類CMainFrameS,并創(chuàng)建打印
框架類的對(duì)象,初始化對(duì)象里面的變量參數(shù)。
步驟202,調(diào)用打印接口函數(shù)CMainFrameS::PrintPreView,運(yùn)行常規(guī)打
印預(yù)覽。
步驟203,調(diào)用類CWrapperWew,創(chuàng)建預(yù)覽視圖的對(duì)象。 步驟204,發(fā)送直接打印請(qǐng)求,并轉(zhuǎn)步驟206。 步驟205,打印預(yù)覽,并轉(zhuǎn)入步驟207。 其中,步驟203, 204, 205的實(shí)現(xiàn)不分先后。
步驟206,調(diào)用類CWrapperView,實(shí)現(xiàn)其中的打印函數(shù),響應(yīng)打印請(qǐng)求 直接打印。
步驟207,創(chuàng)建顯示視圖。
步驟208,其顯示視圖包含了前面203創(chuàng)建的預(yù)覽視圖,它根據(jù)外部設(shè) 置信息修改預(yù)覽視圖并顯示。
但本發(fā)明即使是在Windows平臺(tái)上,也并不局限于利用MFC打印框架 實(shí)現(xiàn)本發(fā)明的技術(shù)方案,可以直接調(diào)用Windows平臺(tái)的本地函數(shù)實(shí)現(xiàn)本發(fā)明 的打印方法;也可以調(diào)用Java類庫(kù)中相應(yīng)的實(shí)現(xiàn)打印功能的函數(shù)實(shí)現(xiàn)本發(fā)明 的打印方法。總之,本發(fā)明提供的方法能夠靈活的應(yīng)用于電子文檔的打印過 程中。
在其它操作系統(tǒng)上,例如Limix, Solaris等操作系統(tǒng)上,本發(fā)明的技術(shù)可 以通過嵌入到操作系統(tǒng)支持的相應(yīng)標(biāo)準(zhǔn)插件或者是作為電子文檔能夠使用的 任何形式來實(shí)現(xiàn)。
從上面實(shí)施例可以看出,本發(fā)明提供的方法有效的解決了當(dāng)前各種軟件 中的打印分頁技術(shù)存在的缺陷,本發(fā)明的技術(shù)不僅可以應(yīng)用于書生國(guó)際公司 本身設(shè)計(jì)的電子文檔,也可以應(yīng)用于任何操作系統(tǒng)平臺(tái)上的電子文檔格式, 上述僅為本發(fā)明較佳實(shí)施例,而并非用以限定本發(fā)明。
權(quán)利要求
1.一種電子文檔分頁打印方法,其特征在于,包含以下步驟A.確定當(dāng)前打印紙張和電子文檔待打印頁面的尺寸,初始化當(dāng)前待打印頁面起始位置和終止位置;B.判斷待打印頁面是否小于等于打印紙張尺寸,如果是,轉(zhuǎn)入步驟E,正式打印,否則轉(zhuǎn)步驟C;C.對(duì)超出頁面邊緣的基本單元應(yīng)用預(yù)先設(shè)置的切分規(guī)則進(jìn)行切分,計(jì)算切分后待打印頁面的最終偏移量,其中切分線是打印頁面的終止位置;D.根據(jù)當(dāng)前頁面終止位置、當(dāng)前最終偏移量和打印紙張高度確定當(dāng)前頁切分之后下一個(gè)待打印頁面的起始和終止位置,轉(zhuǎn)步驟B;E.根據(jù)獲取的參數(shù)正式打印頁面。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟B之前進(jìn)一步包 括,將電子文檔頁面的坐標(biāo)系轉(zhuǎn)化為打印的預(yù)覽視圖的坐標(biāo)系。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟C根據(jù)切分規(guī)則 確定待打印頁面的最終偏移量的過程中,進(jìn)一步包括Cl.初始化當(dāng)前切分線偏移量;C2.如果切分線不分割任何基本單元,轉(zhuǎn)步驟C6;否則取切分線上的第 一個(gè)基本單元;C3.判斷該基本單元如果是容器基本單元且包含子基本單元,則轉(zhuǎn)步驟C4;如果該基本單元不是容器基本單元或該基本單元是容器基本單元但不包 含子基本單元,則應(yīng)用預(yù)先設(shè)置的切分規(guī)則切分該基本單元,切分線偏移量取該基本單元切分后的偏移量,判斷如果切分線偏移量改變,轉(zhuǎn)步驟C2,否 則轉(zhuǎn)C5;C4.枚舉該容器基本單元中被切分線分割的子基本單元,判斷如果子基 本單元是容器基本單元且包含子基本單元,則遞歸枚舉其被切分線分割的子基本單元;如果存在不是容器基本單元的子基本單元或不再包含子基本單元的容器子基本單元,且該子基本單元的偏移量不等于切分線偏移量,則切分線偏移量取該子基本單元的偏移量,轉(zhuǎn)步驟C2,否則轉(zhuǎn)步驟C5;C5.判斷如果切分線上仍存在被分割的基本單元,枚舉下一個(gè)被切分線 分割的基本單元,轉(zhuǎn)步驟C3,否則轉(zhuǎn)步驟C6;C6.輸出切分線偏移量為最終偏移量。
4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,如果待打印頁面存在頁眉 或頁腳,則所述步驟D之前進(jìn)一步包括-(1) .初始化待打印頁面的頁眉和頁腳的偏移參數(shù),判斷是否存在頁眉, 如果存在,則轉(zhuǎn)步驟(2),否則轉(zhuǎn)步驟(3);(2) .判斷當(dāng)前打印范圍是否包括頁眉,如果是,修改偏移參數(shù),否則轉(zhuǎn) 步驟(3);(3) .判斷是否存在頁腳,如果存在,修改偏移參數(shù),否則當(dāng)前偏移參數(shù) 為最終結(jié)果。
5. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述步驟E進(jìn)一步包括-當(dāng)前已打印頁面數(shù)累加1,判斷是否還存在待打印頁面,如果存在,繼續(xù)打 印,否則返回已打印頁面數(shù)。
6. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法在^Tmdows平臺(tái) 上利用標(biāo)準(zhǔn)插件實(shí)現(xiàn)時(shí),所述標(biāo)準(zhǔn)插件至少包括對(duì)象鏈接與嵌入插件,對(duì) 象鏈接和嵌入控制擴(kuò)展插件,ActiveX插件。
7. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述步驟C2或C3分別 進(jìn)一步包括,判斷當(dāng)前基本單元的類型,根據(jù)其類型選擇切分規(guī)則確定當(dāng)前 基本單元的偏移量。
8. 根據(jù)權(quán)利要求1至7任意一項(xiàng)所述的方法,其特征在于,所述切分規(guī) 則具體包括普通基本單元的切分規(guī)則;文本框的切分規(guī)則;表格和復(fù)選框 的切分規(guī)則;直線、圓形、矩形的切分規(guī)則;同一條切分線上的基本單元取 最大偏移量的原則;最大化顯示的原則;基本單元相對(duì)位置不變?cè)瓌t和外邊 框延伸原則。
9. 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述普通基本單元的切分 規(guī)則是基本單元在一個(gè)頁面不能完全顯示時(shí),偏移到下一個(gè)頁面。
10. 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述TextBox基本單元的 切分規(guī)則是單行顯示的TextBox基本單元和多行顯示但高度低于規(guī)定數(shù)值 的TextBox基本單元遵循普通基本單元切分規(guī)則;多行顯示但高度高于規(guī)定 數(shù)值的TextBox基本單元遵循以下規(guī)則如果基本單元內(nèi)的文本信息能夠完 整顯示則不做偏移;如果基本單元內(nèi)的文本信息被截掉一部分,需要將截掉 的文本行偏移到下一頁。
11. 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述Table和Repeat基本 單元的切分規(guī)則包括切分線在電子文檔中的表格實(shí)體上、切分線在表頭、 切分線在表尾三種情況。
12. 根據(jù)權(quán)利要求ll所述的方法,其特征在于,所述表格和復(fù)選框基本 單元中,切分線在表格實(shí)體上的切分規(guī)則是a. 有表尾的情況將切分線向上作表尾高度距離的偏移,al.若切分線已經(jīng)偏移出表格實(shí)體,則表格連同表頭偏移到下一頁顯示; a2.將切分線向上作表尾高度距離的偏移,若切分線還在表格實(shí)體內(nèi), 如果此時(shí)切分線沒有切分表格行,例如切分線恰好和表格線重合,則上一頁 顯示此切分線之上的單元格;如果此時(shí)切分線切分到表格行,取出被切分線 切分的當(dāng)前行,按照TextBox基本單元的切分規(guī)則處理;如果此時(shí)單元格內(nèi) 還有基本單元的話,參考相應(yīng)基本單元的切分規(guī)則處理;b. 沒有表尾的情況依照規(guī)則al和規(guī)則a2處理。
13. 根據(jù)權(quán)利要求ll所述的方法,其特征在于,所述表格和復(fù)選框基本 單元中,切分線在表頭的切分規(guī)則是整個(gè)表格連同表頭和表尾一起偏移到 下一頁顯示。
14. 根據(jù)權(quán)利要求.ll所述的方法,其特征在于,所述表格和復(fù)選框基本 單元中,切分線在表尾的切分規(guī)則是將切分線向上作表尾高度距離的偏移, 按照規(guī)則al和規(guī)則a2處理。
15. 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述直線、圓形、矩形 基本單元的切分規(guī)則是按照切分線被切分的兩部分分別在兩頁中顯示。
16. 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述同一條切分線上的 基本單元取最大偏移量的原則是同一條切分線上可能會(huì)有多個(gè)基本單元存在,最終偏移量取各個(gè)基本單元的偏移量的最大值。
17. 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述最大化顯示的原則是初始切分線上的基本單元在分頁顯示時(shí),根據(jù)本身計(jì)算的切分線位置之 上的內(nèi)容應(yīng)該在上一頁中顯示,不必遵循最終切分線的位置來處理。
18. 根據(jù)權(quán)利要求8所述的方法,其特征在于,所述基本單元相對(duì)位置不變?cè)瓌t和外邊框延伸原則是被切分在兩頁顯示的,尤其是在水平方向有 交錯(cuò)的基本單元,它們之間的相對(duì)位置應(yīng)該保持不變;當(dāng)基本單元因?yàn)楦髯忧蟹志€的位置不同而在第二頁有錯(cuò)位時(shí),應(yīng)該將基本單元拉伸以匹配周圍基 本單元,已經(jīng)在上一頁顯示過的內(nèi)容信息沒有必要在下一頁重復(fù)顯示。
19. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述電子文檔是電子表 單時(shí),所述基本單元是標(biāo)準(zhǔn)控件。
20. 根據(jù)權(quán)利要求1所述的方法,其特征在于,如果所述切分線不斷調(diào) 整后導(dǎo)致頁面大小小于預(yù)先設(shè)定的數(shù)值,則對(duì)頁面直接進(jìn)行切分而不再做調(diào)
全文摘要
本發(fā)明公開了一種電子文檔分頁打印方法,其包括A.確定當(dāng)前打印紙張和電子文檔待打印頁面的尺寸,初始化當(dāng)前待打印頁面起始位置和終止位置;B.判斷待打印頁面是否小于等于打印紙張尺寸,如果是,轉(zhuǎn)入步驟F,正式打印,否則轉(zhuǎn)步驟C;C.對(duì)超出頁面邊緣的基本單元應(yīng)用預(yù)先設(shè)置的切分規(guī)則進(jìn)行切分,計(jì)算切分后待打印頁面的最終偏移量,其中切分線是打印頁面的終止位置;D.根據(jù)當(dāng)前頁面終止位置、當(dāng)前最終偏移量和打印紙張高度確定當(dāng)前頁切分之后下一個(gè)待打印頁面的起始和終止位置,轉(zhuǎn)步驟B;E.根據(jù)獲取的參數(shù)正式打印頁面。應(yīng)用本發(fā)明,使得打印頁面上穿過切分線的基本單元能夠完整而且美觀的在不同的頁面顯示。
文檔編號(hào)G06F3/12GK101187850SQ20061011459
公開日2008年5月28日 申請(qǐng)日期2006年11月16日 優(yōu)先權(quán)日2006年11月16日
發(fā)明者維 馮, 韋春輝 申請(qǐng)人:北京書生國(guó)際信息技術(shù)有限公司