欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

包含可變數(shù)據(jù)的文檔或版面的選擇性預(yù)覽和校對(duì)的制作方法

文檔序號(hào):6427156閱讀:169來(lái)源:國(guó)知局
專利名稱:包含可變數(shù)據(jù)的文檔或版面的選擇性預(yù)覽和校對(duì)的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及用于創(chuàng)建、編輯和印刷由文本和圖形組成的文檔的軟件實(shí)現(xiàn)方法和處理,并且尤其涉及可變數(shù)據(jù)文檔的創(chuàng)建、編輯和印刷。
背景技術(shù)
可變數(shù)據(jù)印刷傳統(tǒng)上,當(dāng)印刷大量文檔時(shí),使用的印刷處理是需要文檔的物理表示的模擬處理。這些物理表示包括必須在印刷前制造的溴化物和/或印刷版。這意味著生成定制文檔是昂貴的,并且大量文檔操作通常涉及印刷多份完全相同的文檔。
可以使用數(shù)字印刷處理來(lái)生成定制文檔,其中無(wú)需在印刷前準(zhǔn)備文檔的物理拷貝。直到最近,要么是數(shù)字處理昂貴,要么就是效果比傳統(tǒng)的模擬印刷處理產(chǎn)生的質(zhì)量要差。
然而,在過(guò)去的五年中,數(shù)字印刷方面的進(jìn)展已經(jīng)顯著降低了創(chuàng)建高質(zhì)量定制文檔的成本。這些進(jìn)展已經(jīng)使得可變數(shù)據(jù)印刷越來(lái)越普遍??勺償?shù)據(jù)印刷軟件正變得可用于允許文檔作者不僅僅創(chuàng)建單個(gè)文檔而且可以創(chuàng)建相關(guān)文檔族,其中每篇文檔都是為它的預(yù)期讀者定制的。
為了使高質(zhì)量的定制印刷切實(shí)可行,需要解決幾個(gè)問(wèn)題。一個(gè)問(wèn)題是印刷產(chǎn)品的質(zhì)量。直到最近,數(shù)字處理才能夠接近傳統(tǒng)印刷處理的分辨率。另一個(gè)問(wèn)題是,通常需要大量數(shù)據(jù)才能以數(shù)字形式表示高質(zhì)量的文檔,特別是在文檔包含許多高分辨率圖像時(shí)。這使得不可能通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)將大量定制文檔電子地傳送到數(shù)字印刷機(jī)。第三個(gè)問(wèn)題是,與簡(jiǎn)單文檔相比,定制文檔通常需要更多的努力和技能來(lái)進(jìn)行創(chuàng)建和維護(hù)。定制文檔是通過(guò)將可變數(shù)據(jù)插入到文檔模板中而創(chuàng)建的。文檔模板是具有用于插入可變數(shù)據(jù)的空位的文檔。文檔模板可以包括某些由許多文檔共用的數(shù)據(jù),以及定義了如何布置每個(gè)定制文檔的信息,其中定制文檔是通過(guò)將數(shù)據(jù)插入到模板的可變數(shù)據(jù)空位中生成的。因?yàn)樾枰獙㈨?yè)面的版面定義為能夠處理不同大小的數(shù)據(jù)或缺失的數(shù)據(jù)項(xiàng),所以創(chuàng)作可變數(shù)據(jù)模板比創(chuàng)作簡(jiǎn)單文檔更加困難。另外,還需要定義和維護(hù)模板和數(shù)據(jù)之間的關(guān)系。同樣,經(jīng)常需要數(shù)據(jù)庫(kù)技能,以便能夠利用可變數(shù)據(jù)印刷技術(shù)創(chuàng)建定制文檔。
數(shù)字印刷硬件的質(zhì)量已經(jīng)提高到其效果可與高端模擬印刷生成的效果相媲美的程度,同時(shí)其成本也已顯著下降。諸如PPML之類的新標(biāo)準(zhǔn)允許在不發(fā)送大量重復(fù)數(shù)據(jù)的情況下,經(jīng)由網(wǎng)絡(luò)將多組相關(guān)文檔發(fā)送到印刷機(jī)。這降低了可變數(shù)據(jù)印刷所需的網(wǎng)絡(luò)帶寬。
對(duì)于可變數(shù)據(jù)文檔的創(chuàng)作和管理的復(fù)雜性問(wèn)題,沒(méi)有容易的解決方案。定制印刷以“郵件合并”的形式在字處理軟件中已經(jīng)粗略地應(yīng)用許多年了,但是郵件合并僅僅支持對(duì)各個(gè)輸出文檔的版面進(jìn)行非常粗略的控制。最新的可變數(shù)據(jù)印刷軟件允許創(chuàng)建復(fù)雜、靈活的版面,該版面適應(yīng)于每個(gè)文檔中可能不同的數(shù)據(jù)項(xiàng)尺寸和形狀,但是這些應(yīng)用程序仍然是復(fù)雜的,并且難以使用。
版面模型通常,將包含文本和圖形的文檔組織為不同類型的項(xiàng)目的集合。項(xiàng)目可以是文本、圖形、或者諸如組之類的作為項(xiàng)目集合的其它種類的抽象對(duì)象。版面項(xiàng)目通常具有矩形形狀,或者具有矩形區(qū)域。每個(gè)應(yīng)用程序允許的用于定義如何布置項(xiàng)目的規(guī)則,表示一個(gè)版面模型。在可變數(shù)據(jù)印刷應(yīng)用程序中,規(guī)則必須對(duì)當(dāng)項(xiàng)目尺寸改變時(shí)如何計(jì)算版面進(jìn)行定義。
分層版面模型當(dāng)前的可變數(shù)據(jù)印刷解決方案通常使用分層模型來(lái)定義版面。這些模型類似于HTML和XML文檔所使用的模型。此類模型的例子為CSS盒子模型(CSS box model)和XSL:FO。在此類版面模型中,通過(guò)在版面區(qū)域內(nèi)垂直或水平地堆疊矩形項(xiàng)目,將矩形項(xiàng)目布置在矩形版面區(qū)域內(nèi)。
除了水平和垂直堆疊之外,某些應(yīng)用程序支持的另一種更普通的備選方案是,允許以垂直列或水平行方式堆疊項(xiàng)目,如頁(yè)面上的幾行文字那樣。在此種形式的版面中,如果項(xiàng)目太多以致于不合適在一行或一列內(nèi),則開始一個(gè)新的行或列,并且超出的項(xiàng)目“自動(dòng)換行”到下一行或下一列。這類似于字處理器中的文字自動(dòng)換行。對(duì)于頁(yè)面或版面區(qū)域的尺寸可能變化很大的應(yīng)用程序、諸如web應(yīng)用程序來(lái)說(shuō),這種布置項(xiàng)目的方式是最有用的。對(duì)于可變數(shù)據(jù)印刷應(yīng)用程序而言,堆疊不太有用,這是因?yàn)樵诳勺償?shù)據(jù)印刷應(yīng)用程序中,版面的質(zhì)量通常是重要的,并且當(dāng)項(xiàng)目自動(dòng)換行到下一行或下一列時(shí),版面通常會(huì)使人感到不舒適。
在分層版面模型中,可以通過(guò)使用項(xiàng)目組對(duì)復(fù)雜的版面進(jìn)行定義。組是包含其它項(xiàng)目的矩形版面項(xiàng)目,并且實(shí)質(zhì)上是一個(gè)版面。組內(nèi)的項(xiàng)目布置在組的邊界矩形內(nèi)。
可以利用對(duì)齊方式選項(xiàng)對(duì)版面內(nèi)項(xiàng)目的位置進(jìn)行控制,例如,垂直堆疊中的項(xiàng)目可以左對(duì)齊,以便使項(xiàng)目總是盡可能地靠近包含垂直堆疊的矩形的左側(cè)??梢园褜?duì)齊方式和組關(guān)聯(lián)起來(lái),以使組中的所有項(xiàng)目具有相同的對(duì)齊方式,或者組內(nèi)的每個(gè)項(xiàng)目可以具有相應(yīng)的關(guān)聯(lián)對(duì)齊方式選項(xiàng)。通常支持多種對(duì)齊方式選項(xiàng),包括居中、左對(duì)齊和右對(duì)齊。
利用與各項(xiàng)目關(guān)聯(lián)的邊距、或者與包含的版面或組關(guān)聯(lián)的邊距,也可以控制項(xiàng)目的位置。邊距定義了兩個(gè)相鄰項(xiàng)目之間的最小允許距離。
基于約束的模型與先前開發(fā)的更普通的基于約束的模型相比,當(dāng)前的分層版面模型更易于理解?;诩s束的模型已經(jīng)用于計(jì)算機(jī)輔助設(shè)計(jì)(CAD)應(yīng)用程序、用戶界面構(gòu)造以及窗口管理。在用戶界面構(gòu)造應(yīng)用程序中,要布置的對(duì)象是諸如按鈕和輸入?yún)^(qū)域之類的窗口小部件。在窗口管理應(yīng)用程序中,要布置的對(duì)象是用于表示數(shù)據(jù)視圖的窗口,其作為計(jì)算機(jī)操作系統(tǒng)的用戶界面的一部分。
在用戶界面構(gòu)造應(yīng)用程序中,使用動(dòng)態(tài)的版面約束,以允許圖形用戶界面(GUI)適合于不同的屏幕分辨率、以及諸如使用不同字體和文本大小之類引起的變化。動(dòng)態(tài)版面簡(jiǎn)化了構(gòu)造多平臺(tái)用戶界面的過(guò)程。
在窗口管理應(yīng)用程序中,用戶能夠應(yīng)用動(dòng)態(tài)約束,來(lái)創(chuàng)建在添加、刪除窗口時(shí)或者在窗口改變大小或位置時(shí)保留的窗口之間的關(guān)系。
CAD應(yīng)用程序涉及很普通的幾何約束,并且版面模型更加復(fù)雜,更難以使用,并且對(duì)版面的計(jì)算比文檔版面模型更慢。例如,用于CAD應(yīng)用程序的某些約束解算器,支持對(duì)兩條線段平行的指定,而兩條線段平行是無(wú)法使用線性方程表示的。
如果在圖形編輯操作期間每秒可能需要更新版面許多次,則用戶界面(UI)和窗口管理應(yīng)用程序所使用的基于約束的版面模型必須足夠快,以便經(jīng)常交互使用,所以,版面方法需要足夠快,以支持此類操作。此類應(yīng)用程序通常使用專用約束解算器進(jìn)行版面計(jì)算。這些應(yīng)用程序所使用的約束解算器通常支持線性約束,線性約束可以表示為線性方程(即線性等式)、或者線性不等式或者這二者。通常,此類約束解算器還有一個(gè)對(duì)解的質(zhì)量進(jìn)行定義的目標(biāo)函數(shù)。約束解算器的目標(biāo)是在不違反任何約束的條件下,最小化(或最大化)目標(biāo)函數(shù)的值。如果目標(biāo)函數(shù)也是線性的,則此類問(wèn)題稱為線性規(guī)劃。此類問(wèn)題是非常公知的優(yōu)化問(wèn)題,并且存在求解此類問(wèn)題的已知算法。通常利用一種被稱為單形算法的算法來(lái)求解此類問(wèn)題。
假定由一組約束和一個(gè)目標(biāo)函數(shù)定義了一個(gè)版面問(wèn)題,該問(wèn)題可能是過(guò)約束的,以致于沒(méi)有解。作為選擇,該問(wèn)題可能是欠約束的,以致于有許多解,或者可能有一個(gè)解。為了對(duì)版面進(jìn)行計(jì)算,版面模型必須確保版面恰好有一個(gè)解。實(shí)現(xiàn)它的一種方法是,向用戶報(bào)告沒(méi)有解或有許多解,并允許用戶修正該問(wèn)題。這通常不是一種可接受的解決方案,是因?yàn)楹茈y向用戶提供關(guān)于為何該問(wèn)題是過(guò)約束或欠約束的有意義的信息。如果系統(tǒng)是過(guò)約束的,則許多約束可能同時(shí)互相矛盾。如果系統(tǒng)是欠約束的,則如何防止用戶添加矛盾的約束也不是顯然的。在使用圖形界面對(duì)約束進(jìn)行編輯時(shí),這一點(diǎn)尤其困難。
避免無(wú)解的一種已知方法是,將約束優(yōu)先級(jí)劃分為所謂的約束層級(jí)。如果對(duì)于約束無(wú)解,則按照優(yōu)先級(jí)的相反次序忽略約束,直至可能有解為止。
避免欠約束問(wèn)題的一種已知方法,是使用非線性目標(biāo)函數(shù)。如果使用合適的嚴(yán)格凸函數(shù),則問(wèn)題總是有唯一解。通常使用二次目標(biāo)函數(shù),是因?yàn)榇嬖诮鉀Q帶有線性約束和二次目標(biāo)函數(shù)的優(yōu)化問(wèn)題的公知技術(shù)。其中最簡(jiǎn)單的是改進(jìn)的單形算法。
生成可變數(shù)據(jù)文檔的另一個(gè)問(wèn)題,是對(duì)正在生成的文檔進(jìn)行預(yù)覽。字處理器和桌面印刷應(yīng)用程序通常使用“印刷預(yù)覽”功能,以便幫助用戶在提交印刷之前對(duì)其工作進(jìn)行全面評(píng)估。當(dāng)需要預(yù)覽大量文檔時(shí),這是很費(fèi)力的。

發(fā)明內(nèi)容
本發(fā)明的目的在于基本上克服或至少改善一個(gè)或多個(gè)與可變文檔印刷相關(guān)聯(lián)的問(wèn)題。
根據(jù)本發(fā)明的一個(gè)方面,公開了一種用于校對(duì)多個(gè)可變數(shù)據(jù)文檔的方法,所述每篇文檔是從一個(gè)通用版面形成的,在該通用版面中將可變數(shù)據(jù)內(nèi)容放置到一個(gè)或多個(gè)容器內(nèi),所述容器具有由版面規(guī)則定義的版面內(nèi)的位置和尺寸,所述方法包括以下步驟為每篇文檔中的每個(gè)容器估算多個(gè)變化的度量;確定從公用版面生成的標(biāo)準(zhǔn)文檔的度量;將確定的標(biāo)準(zhǔn)文檔的度量與多個(gè)估算度量中的度量進(jìn)行比較;以及根據(jù)所述比較的結(jié)果給出一篇具有至少一個(gè)度量的文檔,就該至少一個(gè)量度來(lái)說(shuō)比較結(jié)果在所估算的多個(gè)度量中較大。
根據(jù)本發(fā)明的另一方面,公開了一種基于模板創(chuàng)建可變數(shù)據(jù)文檔的版面的方法,該方法包括以下步驟在圖形用戶界面中建立模板;在該模板中設(shè)置至少一個(gè)容器以構(gòu)成版面;修改版面,以便由此通過(guò)將示例性內(nèi)容放置到至少一個(gè)容器中而生成一個(gè)示例性文檔,其中根據(jù)所放置內(nèi)容的至少一個(gè)屬性,改變版面中該至少一個(gè)容器的至少一維尺寸、和/或該至少一個(gè)容器的位置;以及通過(guò)圖形用戶界面在所述版面中顯示示例性文檔。
此外還公開了本發(fā)明的其它方面,包括用于執(zhí)行所述方法的裝置和計(jì)算機(jī)程序。


以下參照

本發(fā)明的至少一種實(shí)施方式,其中圖1A表示用于可變數(shù)據(jù)印刷的計(jì)算機(jī)系統(tǒng)配置;圖1B是圖1A中的計(jì)算機(jī)模塊的示意方框圖;圖2表示用于可變數(shù)據(jù)印刷的另一備選計(jì)算機(jī)系統(tǒng)配置;圖3表示應(yīng)用程序主窗口的示例,該主窗口包括菜單欄、工具欄、工作區(qū)和浮動(dòng)調(diào)色板;圖4表示了一個(gè)屏幕、工具和圖標(biāo),以說(shuō)明本公開的各個(gè)方面,包括示例性容器創(chuàng)建、容器間的第一類支柱、錨點(diǎn)和滑塊;圖5A-5D表示第一示例性容器規(guī)則;圖6A-6C表示第三容器規(guī)則;圖6D和圖6E是描述了容器區(qū)域創(chuàng)建的流程圖;圖7A-7B表示一個(gè)具有三個(gè)欄的文本容器,以及通過(guò)使用指示設(shè)備的直接操作調(diào)整欄寬和裝訂線寬度大小的方法;圖8表示了一個(gè)屏幕、工具和圖標(biāo),以說(shuō)明字符大小同步操作;圖9表示了一個(gè)屏幕、工具和圖標(biāo),以說(shuō)明內(nèi)部邊距自動(dòng)調(diào)整操作;圖10表示在兩個(gè)容器的邊緣之間添加支柱以便對(duì)距離約束進(jìn)行描述的方法;圖11表示了一個(gè)屏幕、工具和圖標(biāo),以說(shuō)明用戶界面的幾種特征(feature)(包括第二示例性容器之間的支柱)的操作;圖12表示了一個(gè)屏幕,以說(shuō)明不固定導(dǎo)向的操作;圖13和圖14表示數(shù)據(jù)源選擇方法;圖15表示用于數(shù)據(jù)源過(guò)濾的用戶界面;圖16和圖17表示一個(gè)用戶界面,用以說(shuō)明用于瀏覽數(shù)據(jù)源的方法;圖18表示一個(gè)用戶界面示例,以說(shuō)明數(shù)據(jù)源的變量以及用于瀏覽數(shù)據(jù)源的方法;圖19表示一個(gè)用戶界面,用于將數(shù)據(jù)源的變量與可變文檔模板相關(guān)聯(lián);圖20表示一個(gè)用戶界面,用于現(xiàn)場(chǎng)校對(duì)與可變文檔模板合并的數(shù)據(jù)源內(nèi)容;圖21A和圖21B表示用于選擇性校對(duì)的一種利用各文檔的容器的寬度和高度來(lái)計(jì)算普通文檔和最大差異文檔的方法;圖22為一個(gè)示例性版面,用于說(shuō)明版面項(xiàng)目以及用作版面方法輸入的約束;圖23僅表示了對(duì)應(yīng)于圖22中的示例的垂直約束;
圖24是表示圖23中的垂直約束的有向圖;圖25表示在執(zhí)行推動(dòng)操作時(shí)所涉及的步驟;圖26表示推動(dòng)操作的一個(gè)備選實(shí)現(xiàn)方式所涉及的步驟;圖27A-27F表示使用的推動(dòng)操作示例,其中圖27A和圖27B表示推動(dòng)操作示例的起始位置,圖27C和圖27D表示推動(dòng)操作示例的中間階段,圖27E和圖27F表示推動(dòng)操作示例的結(jié)果;圖28表示基于圖的版面計(jì)算中的高級(jí)步驟;圖29表示基于圖的版面計(jì)算實(shí)現(xiàn)中的高級(jí)步驟;圖30A表示基于圖的版面計(jì)算如何通過(guò)移動(dòng)垂直標(biāo)記來(lái)降低能量函數(shù)的值;圖30B表示基于圖的版面方法的另一種實(shí)現(xiàn)方式,它包括對(duì)固定中心規(guī)則的處理;圖31表示在基于圖的版面計(jì)算中如何計(jì)算移動(dòng)一組標(biāo)記的距離;圖32表示在將一組標(biāo)記向右推動(dòng)時(shí),對(duì)推動(dòng)的正向標(biāo)記組和反向標(biāo)記組進(jìn)行計(jì)算所涉及的步驟;圖33A-33C顯示了如何利用基本模型的不同表示來(lái)規(guī)定容器的最小和最大高度;圖34是修改容器在版面中的邊緣位置以及與其它邊緣的相互作用的流程圖;圖35是用于編輯模板文檔的另一推動(dòng)操作示例的流程圖;圖36是生成并且印刷可變數(shù)據(jù)文檔的方法的流程圖;圖37A-37D表示與圖4相對(duì)應(yīng)的示例性版面、以及對(duì)該版面中的各種約束進(jìn)行存儲(chǔ)的方式;圖38說(shuō)明了使用高度和寬度條來(lái)表示第二容器規(guī)則中的容器約束;圖39表示在一維空間上操作的版面引擎的使用示例;圖40A和圖40B表示在二維空間上操作的版面引擎的使用示例;圖41A-41K描述了在容器內(nèi)的文本布置以及它可能如何受到容器形狀的影響;以及圖42A-42C表示表的構(gòu)造方法。
具體實(shí)施例方式
1.概述公開了一種可變數(shù)據(jù)文檔創(chuàng)建和印刷系統(tǒng),它最好是被實(shí)現(xiàn)為一個(gè)軟件應(yīng)用程序。該應(yīng)用程序允許創(chuàng)建多篇形式相似但其內(nèi)容不同的文檔。這可以通過(guò)創(chuàng)建和編輯文檔模板、以及將文檔模板上的區(qū)域和各種數(shù)據(jù)相關(guān)聯(lián)來(lái)實(shí)現(xiàn)。
一個(gè)文檔模板可以包含多個(gè)容器,其中每個(gè)容器被配置為保存諸如文本或圖像數(shù)據(jù)之類的內(nèi)容。容器的位置和尺寸可以是固定的,或者可以根據(jù)用戶規(guī)定的規(guī)則在尺寸或位置方面因文檔不同而改變。這些容器的內(nèi)容可以是靜態(tài)的或可變的(即,取決于某些諸如數(shù)據(jù)庫(kù)之類的數(shù)據(jù)源)。
用戶可以規(guī)定從中獲取數(shù)據(jù)的各類數(shù)據(jù)源。數(shù)據(jù)源包含多個(gè)數(shù)據(jù)記錄。應(yīng)用程序提供了用于把數(shù)據(jù)和文檔模板中的容器關(guān)聯(lián)起來(lái)的機(jī)制。
然后,根據(jù)數(shù)據(jù)源和文檔模板中的容器之間的關(guān)聯(lián),將文檔模板和數(shù)據(jù)源中的數(shù)據(jù)“合并”起來(lái),以便生成多個(gè)文檔。通常,為數(shù)據(jù)源中的每條記錄或每組記錄生成一個(gè)文檔。然后能夠根據(jù)需要將文檔保存到磁盤或進(jìn)行印刷。
這些方案與現(xiàn)有技術(shù)相比提供了許多獨(dú)立優(yōu)勢(shì)。例如,與現(xiàn)有技術(shù)不同,當(dāng)對(duì)文檔模板進(jìn)行編輯時(shí),用戶可以選擇總是查看合并文檔之一。這是由于文檔模板和數(shù)據(jù)是動(dòng)態(tài)合并的。因此,在編輯模板時(shí),有可能至少看見(jiàn)生成文檔之一看上去是什么樣,而不用像現(xiàn)有技術(shù)中那樣,必須到特定的預(yù)覽區(qū)域才能看見(jiàn)文檔(而不是文檔模板)看上去是什么樣。
在適當(dāng)?shù)奈恢蔑@示有關(guān)容器的約束(其決定了容器能夠移動(dòng)和改變尺寸的方式),并且無(wú)需像現(xiàn)有技術(shù)中那樣必須到獨(dú)立的屏幕或區(qū)域,而是能夠通過(guò)點(diǎn)擊容器上的各個(gè)位置,在適當(dāng)?shù)奈恢脤?duì)有關(guān)容器的約束進(jìn)行編輯。與現(xiàn)有技術(shù)相比,這簡(jiǎn)化了文檔模板的創(chuàng)建。
2.實(shí)現(xiàn)方式概述基本實(shí)現(xiàn)方式是可變數(shù)據(jù)文檔創(chuàng)建和印刷應(yīng)用程序,它包括至少一個(gè)用戶界面和一個(gè)版面引擎。一種具體的實(shí)現(xiàn)方式是,可在連有印刷機(jī)的個(gè)人計(jì)算機(jī)上執(zhí)行的軟件。在另一種實(shí)現(xiàn)方式中,應(yīng)用程序被實(shí)現(xiàn)為可在嵌入在印刷機(jī)或印刷控制器中的處理器上執(zhí)行的軟件,其中印刷機(jī)或印刷機(jī)控制器支持對(duì)可變數(shù)據(jù)文檔集的印刷。在另一種實(shí)現(xiàn)方式中,應(yīng)用程序被實(shí)現(xiàn)為可在web服務(wù)器上執(zhí)行的軟件,其中web服務(wù)器能夠提供為瀏覽者定制的文檔。這些實(shí)現(xiàn)方式還包括在適當(dāng)?shù)挠布b置上執(zhí)行時(shí)的這種軟件。
可變數(shù)據(jù)印刷是指印刷相關(guān)文檔的集合。在不可變數(shù)據(jù)印刷中,文檔是單獨(dú)印刷的,并且通常各文檔的數(shù)據(jù)是單獨(dú)發(fā)送到印刷機(jī)的。在可變數(shù)據(jù)印刷中,將包括多個(gè)相關(guān)文檔的印刷作業(yè)發(fā)送到印刷機(jī)。通常,可變數(shù)據(jù)印刷作業(yè)中的文檔包括多個(gè)文檔中出現(xiàn)的共享單元。通常這個(gè)數(shù)據(jù)每個(gè)作業(yè)僅向印刷機(jī)發(fā)送一次,而不是為每篇文檔重復(fù)發(fā)送。當(dāng)印刷可變數(shù)據(jù)印刷作業(yè)時(shí),將共享的數(shù)據(jù)插入到每個(gè)文檔中。這可能要求在印刷頁(yè)面時(shí)對(duì)文檔頁(yè)面的版面進(jìn)行計(jì)算。在這種情況下,版面方法可能是印刷機(jī)或印刷機(jī)服務(wù)器中的軟件的一部分。更通常地,在客戶機(jī)上對(duì)每篇文檔的版面進(jìn)行計(jì)算,并且將版面作為印刷作業(yè)的一部分發(fā)送到印刷機(jī),在這種情況下,版面方法是在客戶機(jī)上執(zhí)行的。
3.系統(tǒng)描述圖1A表示用于印刷可變數(shù)據(jù)文檔的系統(tǒng)100。可以在圖1B詳細(xì)描述的通用計(jì)算機(jī)模塊101內(nèi),實(shí)施在此描述的方法,其中可以用軟件(諸如在計(jì)算機(jī)模塊101內(nèi)執(zhí)行并且可在系統(tǒng)100上運(yùn)行的版面編輯應(yīng)用程序121)全部或部分地實(shí)現(xiàn)所述處理。特別地,可以利用計(jì)算機(jī)101執(zhí)行的軟件中的指令,實(shí)現(xiàn)版面編輯和隨后的印刷步驟??梢詫⒃撥浖鎯?chǔ)到計(jì)算機(jī)可讀介質(zhì)中,計(jì)算機(jī)可讀介質(zhì)例如包括下文描述的存儲(chǔ)設(shè)備。從計(jì)算機(jī)可讀介質(zhì)中將該軟件加載到計(jì)算機(jī)中,并且由計(jì)算機(jī)101執(zhí)行。其上記錄有此類軟件或計(jì)算機(jī)程序的計(jì)算機(jī)可讀介質(zhì)是計(jì)算機(jī)程序產(chǎn)品。在計(jì)算機(jī)中使用計(jì)算機(jī)程序產(chǎn)品,最好是產(chǎn)生一種用于文檔版面編輯和可變文檔印刷的有利裝置。
計(jì)算機(jī)模塊101連接到諸如鍵盤132之類的輸入設(shè)備、和諸如鼠標(biāo)133之類的指示設(shè)備,并且還連接到包括顯示設(shè)備144的輸出設(shè)備,以及可選地連接到本地印刷機(jī)145。輸入/輸出接口138能夠經(jīng)由網(wǎng)絡(luò)連接107,將計(jì)算機(jī)模塊101連接到系統(tǒng)100的其它計(jì)算設(shè)備。網(wǎng)絡(luò)連接107通常為局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)。
計(jì)算機(jī)模塊101通常包括至少一個(gè)處理器單元135、一個(gè)存儲(chǔ)器單元136、和輸入/輸出(I/O)接口,其中存儲(chǔ)器單元136例如是由半導(dǎo)體隨機(jī)存取存儲(chǔ)器(RAM)和只讀存儲(chǔ)器(ROM)構(gòu)成的,輸入/輸出(I/O)接口包括視頻接口137、以及用于鍵盤132和鼠標(biāo)133的I/O接口143。提供了一個(gè)存儲(chǔ)設(shè)備139,該設(shè)備通常包括硬盤驅(qū)動(dòng)器140和軟盤驅(qū)動(dòng)器141。也可以使用磁帶驅(qū)動(dòng)器(未示出)。CD-ROM驅(qū)動(dòng)器142通常被提供作為非易失性數(shù)據(jù)源。正如相關(guān)領(lǐng)域技術(shù)人員已知的那樣,計(jì)算機(jī)模塊101使用諸如GNU/Linux或Microsoft Windows之類的操作系統(tǒng),并且計(jì)算機(jī)模塊101的組件135到143通常根據(jù)操作系統(tǒng)經(jīng)由互連總線134進(jìn)行通信,并且其通信方式產(chǎn)生了由此形成的計(jì)算機(jī)系統(tǒng)的常規(guī)操作方式。可以在其上實(shí)施所描述方案的計(jì)算機(jī)示例,包括IBM-PC及其兼容機(jī)、SunSparcstation或由此衍生的類似計(jì)算機(jī)系統(tǒng)。
通常,版面編輯應(yīng)用程序121駐留在硬盤驅(qū)動(dòng)器140上,并且在其執(zhí)行中由處理器135進(jìn)行讀取控制。通過(guò)使用半導(dǎo)體存儲(chǔ)器136,可能和硬盤驅(qū)動(dòng)器140合作,可以實(shí)現(xiàn)對(duì)程序121以及從網(wǎng)絡(luò)1020中讀取的任意數(shù)據(jù)的中間存儲(chǔ)。在一些例子中,可以通過(guò)將應(yīng)用程序121編碼到CD-ROM或軟盤上,并經(jīng)由相應(yīng)的驅(qū)動(dòng)器142或141對(duì)其進(jìn)行讀取,來(lái)向用戶提供應(yīng)用程序121,或者可選地,應(yīng)用程序121可以由用戶從網(wǎng)絡(luò)連接107上進(jìn)行讀取。另外,也可以從其它合適大小的計(jì)算機(jī)可讀介質(zhì)中將軟件加載到計(jì)算機(jī)模塊101中,所述介質(zhì)包括磁帶、ROM或集成電路、磁光盤、計(jì)算機(jī)模塊101與另一設(shè)備之間的無(wú)線或紅外傳輸信道、諸如PCMCIA卡之類的計(jì)算機(jī)可讀卡、以及包括電子郵件傳輸和網(wǎng)站上記錄的信息等的因特網(wǎng)和內(nèi)聯(lián)網(wǎng)。以上僅僅是相關(guān)計(jì)算機(jī)可讀介質(zhì)的示例??梢允褂闷渌?jì)算機(jī)可讀介質(zhì)。
同時(shí)名為版面編輯的應(yīng)用程序121,還操作用以執(zhí)行可變數(shù)據(jù)印刷(VDP),并且該程序包括兩個(gè)軟件組件。這些組件中的第一個(gè)組件是版面引擎105,它是用于計(jì)算具有給定約束和尺寸的矩形和線條在矩形區(qū)域內(nèi)的位置的軟件。第二個(gè)組件-用戶界面103組件提供了一種機(jī)制,用于允許用戶構(gòu)造文檔模板以及將文檔模板中的區(qū)域和數(shù)據(jù)源關(guān)聯(lián)起來(lái)。用戶界面103和版面引擎105經(jīng)由通信信道123進(jìn)行通信。用于文檔生成的數(shù)據(jù)源通常是駐留在數(shù)據(jù)庫(kù)服務(wù)器117上的數(shù)據(jù)庫(kù)119,數(shù)據(jù)庫(kù)服務(wù)器117通常由在其上運(yùn)行數(shù)據(jù)庫(kù)應(yīng)用程序的另一臺(tái)計(jì)算機(jī)構(gòu)成。主機(jī)101借助于網(wǎng)絡(luò)連接107與數(shù)據(jù)庫(kù)服務(wù)器117進(jìn)行通信??勺償?shù)據(jù)印刷應(yīng)用程序121生成文檔模板,該文檔模板能夠被保存到主機(jī)101或文件服務(wù)器115上,其中文件服務(wù)器115通常由另一臺(tái)計(jì)算機(jī)構(gòu)成??勺償?shù)據(jù)印刷應(yīng)用程序121還生成由文檔模板合并數(shù)據(jù)而形成的文檔??梢詫⑦@些文檔保存到主機(jī)101上的本地文件系統(tǒng)中,保存到文件服務(wù)器115上,或直接發(fā)送到印刷服務(wù)器109或印刷機(jī)113用于進(jìn)行印刷。印刷服務(wù)器109是一臺(tái)計(jì)算機(jī),用于向不能直接聯(lián)網(wǎng)的印刷機(jī)提供網(wǎng)絡(luò)能力。將印刷服務(wù)器109和印刷機(jī)113經(jīng)由典型通信信道111進(jìn)行連接。
除了增加了引擎服務(wù)器227以外,圖2與圖1類似,其中引擎服務(wù)器227包含版面引擎105的獨(dú)立版本225。引擎服務(wù)器227是另一臺(tái)典型計(jì)算機(jī)??梢杂砂婷嬉?25將文件服務(wù)器115上存儲(chǔ)的文檔模板和數(shù)據(jù)庫(kù)119中存儲(chǔ)的數(shù)據(jù)進(jìn)行組合,以便生成文檔,用于印刷或其它目的??梢酝ㄟ^(guò)用戶界面103對(duì)此類操作進(jìn)行請(qǐng)求,或者僅僅請(qǐng)求印刷一條具體記錄。
4.主窗口參照?qǐng)D3,用戶界面103包括由應(yīng)用程序窗口301構(gòu)成的圖形用戶界面,當(dāng)運(yùn)行時(shí),將應(yīng)用程序窗口301顯示在視頻顯示器144上。窗口301的特征在于菜單欄302、工具欄區(qū)域303、工作區(qū)306、可選的浮動(dòng)調(diào)色板311、以及光標(biāo)/指針設(shè)備313,其中工具欄區(qū)域303在某些實(shí)現(xiàn)方式中可以分離出來(lái)并移動(dòng)到屏幕上的不同位置,光標(biāo)/指針設(shè)備313的位置通常與鼠標(biāo)133的位置或運(yùn)動(dòng)相關(guān)聯(lián)。
菜單欄302具有許多菜單項(xiàng)304,正如現(xiàn)有技術(shù)中常見(jiàn)的那樣,它在被激活時(shí)擴(kuò)展為菜單選項(xiàng)的分層結(jié)構(gòu)。
工具欄303具有許多工具按鈕或小部件305,可以根據(jù)應(yīng)用程序的特定模式對(duì)其每一個(gè)進(jìn)行隱藏或顯示。
可選標(biāo)尺308可以用于指示指針、頁(yè)面、線條、邊距向?qū)?、容器或其它?duì)象在工作區(qū)中的位置。標(biāo)尺308可以顯示所用單位的數(shù)字指示,所用單位例如是英寸、毫米或像素。
浮動(dòng)調(diào)色板311可以用于訪問(wèn)諸如可變數(shù)據(jù)庫(kù)之類的附加功能。調(diào)色板311具有其特有的窗口控件312,該窗口控件312允許對(duì)調(diào)色板311進(jìn)行移動(dòng)、調(diào)整大小或關(guān)閉??蛇x地,調(diào)色板311可以一直保持在工作區(qū)的前面,或者可以隱藏在其它對(duì)象的后面??梢韵拗普{(diào)色板311只出現(xiàn)在應(yīng)用程序窗口301的范圍之內(nèi),或者可以允許它部分或全部地出現(xiàn)在應(yīng)用程序窗口301之外。
參照?qǐng)D4,顯示了工具欄區(qū)域303,它具有至少下列用戶可選的圖標(biāo)“按鈕”·選擇工具按鈕403用于對(duì)容器邊緣進(jìn)行選擇、移動(dòng)、縮放、調(diào)整大小和鎖定/解除鎖定。通過(guò)圍繞容器拖動(dòng)選擇框或者在選擇容器時(shí)同時(shí)按下CTRL鍵,可以對(duì)容器進(jìn)行多重選擇。
·圖像容器工具按鈕405用于創(chuàng)建用于保存靜態(tài)或可變圖像的容器。
·文本容器工具按鈕404用于創(chuàng)建用于保存靜態(tài)或可變文本的容器。
·支柱工具按鈕406用于對(duì)容器之間的距離進(jìn)行控制。
正如現(xiàn)有技術(shù)中公知的那樣,可利用上下文敏感的工具提示來(lái)實(shí)現(xiàn)此類按鈕。
5.文檔模板工作區(qū)306用于查看和編輯文檔模板的設(shè)計(jì)。這允許用戶設(shè)計(jì)正在準(zhǔn)備的文檔的印刷外觀,并根據(jù)正在與文檔模板合并的可變數(shù)據(jù)的數(shù)量和大小,理解各合并文檔是如何變化的。
如果已經(jīng)將外部數(shù)據(jù)源鏈接到該模板,則在其容器中顯示可變文本和圖像,從而使用戶能夠在他們工作時(shí)預(yù)覽當(dāng)前的文檔。
每當(dāng)用戶滾動(dòng)光標(biāo)或選擇容器時(shí),就對(duì)描述了文檔結(jié)構(gòu)及其可變數(shù)據(jù)容器的行為的可視線索進(jìn)行顯示。
工作區(qū)306的特征在于滾動(dòng)條307、可選標(biāo)尺308以及文檔模板309。文檔模板309能夠顯示多個(gè)頁(yè)面。
正如現(xiàn)有技術(shù)中公知的那樣,給定文檔模板的頁(yè)面大小是由用戶規(guī)定的。各文檔中的實(shí)際頁(yè)數(shù)可以取決于可變數(shù)據(jù)而發(fā)生變化。如果不適于在一個(gè)頁(yè)面上,則自動(dòng)創(chuàng)建附加頁(yè)面以便顯示數(shù)據(jù)。
在每個(gè)頁(yè)面邊界內(nèi)是一個(gè)指示頁(yè)面上可印刷對(duì)象的最大范圍的可選頁(yè)邊距310。
圖4還示出了多個(gè)對(duì)象的示例,這些對(duì)象可能出現(xiàn)在文檔模板309的一個(gè)頁(yè)面上的,它們是多個(gè)容器407和408、特征可選的錨點(diǎn)圖標(biāo)409、不固定的邊緣410、支柱412和滑塊413。
6.容器容器是文檔模板內(nèi)的空間,其中可以放置諸如文本或圖像之類的靜態(tài)或動(dòng)態(tài)內(nèi)容,以及其它容器或?qū)ο???梢酝ㄟ^(guò)如在用戶界面所描述的那樣利用指示設(shè)備313對(duì)容器進(jìn)行操作,以及借助鼠標(biāo)133進(jìn)行控制,對(duì)容器進(jìn)行移動(dòng)、縮放和調(diào)整形狀。
更準(zhǔn)確地說(shuō),容器具有設(shè)置、可視外觀以及交互和編輯行為的集合。以下是容器的全部定義·容器可以有靜態(tài)和/或動(dòng)態(tài)內(nèi)容。動(dòng)態(tài)內(nèi)容是動(dòng)態(tài)的,是指它來(lái)源于數(shù)據(jù)源,并且對(duì)于不同的文檔來(lái)說(shuō)可能不同。不打算使動(dòng)態(tài)內(nèi)容包括動(dòng)畫的或隨時(shí)間變化的內(nèi)容,是因?yàn)榇祟悆?nèi)容不適合印刷。類似地,靜態(tài)內(nèi)容在使用該容器生成的所有文檔中將會(huì)是相同的,盡管由于動(dòng)態(tài)內(nèi)容的作用,可能為每個(gè)文檔放置不同的靜態(tài)內(nèi)容。
·容器可以有裝飾特征,諸如背景顏色、邊界、諸如字體和字型之類的文本設(shè)置,此類特征應(yīng)用于容器的內(nèi)容。
·生成文檔時(shí)可以合并容器和來(lái)自數(shù)據(jù)源的數(shù)據(jù)。裝飾特征通常在印刷品中是可見(jiàn)的,就像任何靜態(tài)內(nèi)容那樣。動(dòng)態(tài)內(nèi)容將導(dǎo)致出現(xiàn)來(lái)自于數(shù)據(jù)源的特定數(shù)據(jù)。例如,可以對(duì)容器的這種表示進(jìn)行印刷,或在屏幕144上進(jìn)行顯示,或者兩者兼而有之。
·容器可以具有一個(gè)用戶界面,例如用于對(duì)容器設(shè)置進(jìn)行編輯和查看的交互圖形用戶界面。界面組件通常出現(xiàn)在屏幕144上,而不是出現(xiàn)在所印刷的文檔中。用戶界面103可顯示容器的某些裝飾特征,諸如背景顏色或字體,并且還可以添加特征,以便允許對(duì)容器的設(shè)置進(jìn)行編輯和查看。專用用戶界面特征的例子是,用于對(duì)容器的尺寸或位置進(jìn)行交互顯示和改變的邊界圖標(biāo)或角圖標(biāo),或者是在將容器和來(lái)自數(shù)據(jù)源的數(shù)據(jù)進(jìn)行合并時(shí),用來(lái)指示容器的行為的覆蓋數(shù)字、線條、圖標(biāo)或文本。
本公開的一個(gè)方面是一組新的直接操作技術(shù),以及涉及容器的圖形用戶界面組件的顯示方法。
6.1容器約束根據(jù)本公開,一個(gè)容器可以有若干約束,該約束控制在各文檔中如何對(duì)相關(guān)聯(lián)的內(nèi)容進(jìn)行顯示。這些約束連同把靜態(tài)和動(dòng)態(tài)內(nèi)容與容器相關(guān)聯(lián)起來(lái)的方法,是用戶對(duì)從單個(gè)文檔模板生成多個(gè)文檔進(jìn)行控制的主要方法。約束的一個(gè)例子是“該容器的內(nèi)容的最大高度為四英寸”。另一個(gè)約束可能是“該容器的內(nèi)容的左邊緣在各文檔中必須出現(xiàn)在相同的水平位置上”。此處描述的是用于利用圖形用戶界面對(duì)此類容器進(jìn)行顯示和編輯的一組方法。
對(duì)靜態(tài)內(nèi)容的位置進(jìn)行規(guī)定的內(nèi)容占位符在數(shù)字印刷領(lǐng)域中是眾所周知的,其中靜態(tài)內(nèi)容例如是在頁(yè)面上具有某一已定義位置的圖像。在以下論述中,可以假設(shè)容器具有位置和尺寸,并且可以以與現(xiàn)有技術(shù)中類似的方式對(duì)其進(jìn)行顯示和編輯。相反,本公開集中在特別對(duì)于可變數(shù)據(jù)印刷的顯示和編輯方法。
容器允許用戶規(guī)定內(nèi)容在文檔中的尺寸和位置。由于可從單個(gè)文檔模板生成若干文檔,因此容器必須具有用于對(duì)多種可能性和約束進(jìn)行規(guī)定和顯示的用戶界面。
容器的邊緣定義一個(gè)虛擬邊界,在邊界內(nèi)的相關(guān)聯(lián)內(nèi)容將出現(xiàn)在文檔中。因此,在本專利說(shuō)明書中,討論容器的左邊緣,可以相當(dāng)于討論在生成的任何文檔中能夠顯示相關(guān)聯(lián)內(nèi)容的位置的最左邊緣。同樣,討論容器的高度,可以理解為討論與在生成的任何文檔中相關(guān)聯(lián)內(nèi)容的高度有關(guān)的約束。在本專利說(shuō)明書參照用戶界面103討論容器的邊緣或尺寸時(shí),以上區(qū)別將會(huì)更加清楚。
在以下的論述中,術(shù)語(yǔ)“固定的”定義了用于控制內(nèi)容外觀的某個(gè)值在所有文檔中是相同的·如果容器的寬度是固定的,則這意味著相關(guān)聯(lián)內(nèi)容所允許的寬度在所有文檔中將會(huì)是相同的。
·如果容器的高度是固定的,則這意味著相關(guān)聯(lián)內(nèi)容所允許的高度在所有文檔中將會(huì)是相同的。
·如果距離約束是固定的,則對(duì)于所有文檔來(lái)說(shuō)所指定的距離為常數(shù)。
·如果容器的左邊緣或右邊緣是固定的,則這意味著相對(duì)于該頁(yè)面該邊緣的水平位置對(duì)于所有文檔來(lái)說(shuō)都是相同的,但是可以對(duì)容器的高度或垂直位置進(jìn)行改變。例如,如果容器的左邊緣是固定的,則相關(guān)聯(lián)內(nèi)容在一個(gè)文檔中可以出現(xiàn)得接近該頁(yè)面的頂部,而在另一個(gè)文檔中可以出現(xiàn)得接近該頁(yè)面的底部,但是,在所有情況中左邊緣將具有相同的水平位置。
·如果容器的頂邊緣或底邊緣是固定的,則這意味著相對(duì)于該頁(yè)面該邊緣的垂直位置對(duì)于所有文檔來(lái)說(shuō)都是相同的,但是容器的寬度或水平位置可以改變。
·容器的垂直軸是位于該容器的左邊緣和右邊緣的中間位置、并與左右邊緣平行的假想垂直線。如果容器的垂直軸是固定的,則該容器的左邊緣和右邊緣的水平位置的平均值對(duì)于所有文檔來(lái)說(shuō)都是相同的。利用該約束,可以對(duì)容器的寬度進(jìn)行改變,因此在不同文檔中左邊緣和右邊緣可遠(yuǎn)離或靠近垂直軸,但是對(duì)于所有文檔來(lái)說(shuō),垂直軸保持在同一水平位置。容器的高度和垂直位置不受該約束影響。
·類似地,如果水平軸是固定的,則盡管高度不受該約束影響,容器的頂邊緣和底邊緣是垂直定位的。
·如果水平軸和垂直軸都是固定的,則這意味著容器的中心點(diǎn)是固定的,但是其寬度和高度不受該約束影響。
·如果容器的一個(gè)角、容器的某個(gè)邊緣的中點(diǎn)、或容器的中心點(diǎn)是固定的,則這意味著該點(diǎn)在所有文檔中出現(xiàn)在相同位置,并且相對(duì)于該容器出現(xiàn)在相同位置。例如,如果容器的左上角是固定的,則這意味著其內(nèi)容可能放置的位置的左上角對(duì)于所有文檔來(lái)說(shuō)都是相同的。
·可以相對(duì)于頁(yè)面的左邊緣、右邊緣、左頁(yè)邊距、右頁(yè)邊距或某個(gè)其它水平位置,固定垂直邊緣或垂直軸。類似地,可以相對(duì)于頁(yè)面的頂邊緣、底邊緣、邊距或某個(gè)其它垂直位置,固定水平邊緣或水平軸。由于如果頁(yè)面大小對(duì)于所有文檔是相同的,則上述可能性在生成的文檔中沒(méi)有區(qū)別,所以只有頁(yè)面大小在文檔間變化時(shí),術(shù)語(yǔ)“固定的”的細(xì)微差別才有意義。
“固定的”的反義是“不固定的”,它意味著邊緣、軸、角、中點(diǎn)、或距離約束可在文檔間變化,但是在特定的一組文檔中未必如此。例如,可能存在其它實(shí)際上防止邊緣的位置進(jìn)行改變的外部約束,但是,如果不應(yīng)用那些外部約束則該邊緣的位置能夠改變的事實(shí),意味著仍然將該邊緣標(biāo)記為不固定的。
6.2容器狀態(tài)將容器的“邊緣狀態(tài)”定義為8個(gè)屬性的集合,如上所述,屬性可以是“固定的”或“不固定的”,這些屬性為左邊緣、右邊緣、垂直軸、頂邊緣、底邊緣、水平軸、寬度和高度。由于邊緣還可能受到諸如最小或最大容器尺寸設(shè)置之類的其它約束的影響,或者受到其它容器的位置的影響,所以邊緣狀態(tài)可能不能完全限定一個(gè)邊緣的位置。因此,“邊緣狀態(tài)”僅指容器可能具有的狀態(tài)全集的一部分。
在大部分的實(shí)現(xiàn)方式中,邊緣狀態(tài)是重要的,因?yàn)槿萜鞯膱D形用戶界面部分是從邊緣狀態(tài)到圖形表示上的映射所導(dǎo)出的,以及是從邊緣和容器表示的直接操作到對(duì)邊緣狀態(tài)的調(diào)整上的映射所導(dǎo)出的。
更佳地,容器的全部狀態(tài)不只是包括邊緣狀態(tài)。容器可以具有對(duì)寬度和高度的最小和最大設(shè)置,該設(shè)置對(duì)邊緣的位置進(jìn)一步進(jìn)行控制。內(nèi)部邊距對(duì)可以顯示相關(guān)聯(lián)內(nèi)容的位置進(jìn)行控制,顯示位置繼而影響容器邊緣能夠放置的位置。文本字體、字型、大小和對(duì)齊方式設(shè)置以及圖像剪切、縮放等,也可以作為容器狀態(tài)的一部分,并且影響內(nèi)容的位置、尺寸和外觀。諸如背景和邊界顏色、邊界線磅重、線型等的裝飾設(shè)置,也是各容器狀態(tài)的一部分。同時(shí),上述方面可能不會(huì)影響內(nèi)容在文檔中的位置,但是它們將影響外觀。
在某些實(shí)現(xiàn)方式中,邊緣狀態(tài)包括上述8個(gè)屬性,屬性可以是固定的或不固定的。頁(yè)面大小不能改變,因此,術(shù)語(yǔ)“固定的”在這里沒(méi)有進(jìn)一步的限定詞。這8個(gè)屬性產(chǎn)生28種不同的邊緣狀態(tài),即256種可能性。
不需要使用全部的這256種邊緣狀態(tài)。例如,考慮以下?tīng)顟B(tài)容器的左邊緣是固定的,垂直軸是固定的,而右邊緣是不固定的。由于垂直軸是固定的,所以對(duì)于所有文檔來(lái)說(shuō),從左邊緣到垂直軸的距離必須與從右邊緣到垂直軸的距離相等。由于左邊緣也是固定的,所以對(duì)于所有文檔來(lái)說(shuō),左邊緣距垂直軸的距離為常數(shù),這意味著右邊緣也是固定的。
某些實(shí)現(xiàn)方式對(duì)邊緣狀態(tài)的一個(gè)子集進(jìn)行了建模,其中每一個(gè)都呈現(xiàn)出獨(dú)特的行為。由于其行為等同于若干其它狀態(tài),所以沒(méi)有在所有實(shí)現(xiàn)方式中使用上述邊緣狀態(tài)。一種可選的實(shí)現(xiàn)方式可能采用此類狀態(tài),并且在用戶界面中對(duì)其進(jìn)行表示,作為對(duì)邊緣是否固定進(jìn)行模擬和編輯而不是對(duì)獨(dú)特的容器行為進(jìn)行建模的方法。
一種具體的實(shí)現(xiàn)方式使用36種容器狀態(tài),它是由6種獨(dú)特的水平約束和6種獨(dú)特的垂直約束的乘積形成的。
有關(guān)容器的水平約束為1.左邊緣、右邊緣,垂直軸和寬度是不固定的;2.只有左邊緣是固定的;3.只有右邊緣是固定的;4.左邊緣和右邊緣都是固定的;5.只有垂直軸是固定的;以及6.寬度是固定的,但是左邊緣、右邊緣和垂直軸都是不固定的。
有關(guān)容器的垂直約束為1.頂邊緣、底邊緣、水平軸和高度是不固定的;2.只有頂邊緣是固定的;3.只有底邊緣是固定的;4.頂邊緣和底邊緣都是固定的;5.只有水平軸是固定的;6.高度是固定的,但是頂邊緣、底邊緣和水平軸是不固定的。
如果術(shù)語(yǔ)“固定的”有限定詞,例如,如果每個(gè)邊緣或軸相對(duì)于頁(yè)面的左邊緣或右邊緣是固定的,則這將產(chǎn)生36種以上的獨(dú)特邊緣狀態(tài)。
注意到,在上述列表中,標(biāo)記為“左邊緣和右邊緣都是固定的”的約束,具有與“左邊緣、右邊緣、垂直軸和寬度都是固定的”、和“左邊緣和垂直軸是固定的”、以及其它幾種類似約束相同的行為。因?yàn)槿绻吘墵顟B(tài)采用較少的“固定”約束,則使用可視線索來(lái)表示各種“固定”概念的實(shí)現(xiàn)方式可以采用較少的這種線索,所以比較簡(jiǎn)單的對(duì)稱約束通常是首選的,這與其它情況相比可以產(chǎn)生較少的視覺(jué)混亂。
如下所述,本公開的一個(gè)方面把邊緣狀態(tài)與容器的圖形表示和編輯方法關(guān)聯(lián)起來(lái)。
6.3顯示和編輯容器6.3.1創(chuàng)建新容器的方法描述了兩類容器文本容器和圖像容器。文本容器保存文本和/或嵌入的圖像。圖像容器只保存圖像。
參照?qǐng)D4,通過(guò)使用鼠標(biāo)133分別對(duì)文本容器工具404或圖像容器工具405進(jìn)行點(diǎn)擊,然后在文檔模板309中拖動(dòng)矩形,可以在文檔模板309中創(chuàng)建新的文本容器和圖像容器。
可選地,通過(guò)在激活適當(dāng)?shù)墓ぞ?04、405后在文檔模板309中進(jìn)行點(diǎn)擊,可以對(duì)容器進(jìn)行簡(jiǎn)單地創(chuàng)建。或者插入具有默認(rèn)尺寸的容器,或者提供對(duì)話框或其它提示用于輸入新容器的尺寸。根據(jù)某種預(yù)定義的或計(jì)算的方案,可以對(duì)某些容器進(jìn)行自動(dòng)創(chuàng)建和放置??梢栽O(shè)計(jì)其它備選方案。
6.3.2顯示容器的方法更佳地,將上述36種邊緣狀態(tài)中的每種狀態(tài)映射到一個(gè)圖形表示上??梢杂猩儆?6種的圖形表示,因?yàn)樵谀承┣闆r下某些邊緣狀態(tài)共享一個(gè)表示。
圖5A-5D表示容器的第一示例性邊緣規(guī)則。
應(yīng)用程序121將邊緣繪制成實(shí)線(參見(jiàn)項(xiàng)目503)或虛線(參見(jiàn)504),并且其特征在于錨點(diǎn)(在邊緣上或其附近繪制,并且由如506、507、509所示的線條、形狀和/或圖標(biāo)構(gòu)成)、手柄(在邊緣或形狀上或其附近繪制的控制點(diǎn),以允許對(duì)其進(jìn)行移動(dòng)或修改,參見(jiàn)502)、滑塊(在邊緣的任一側(cè)繪制的短平行線,參見(jiàn)圖4,標(biāo)號(hào)為413的項(xiàng)目)、增長(zhǎng)圖標(biāo)(參見(jiàn)505)以及顏色,用以表示邊緣狀態(tài)。
用于圖5A-5D的容器顯示方法的規(guī)則依次為1.對(duì)于每條固定邊緣,將該邊緣繪制成實(shí)線;2.如果寬度是固定的,則將左邊緣和右邊緣繪制成實(shí)線;3.如果高度是固定的,則將頂邊緣和底邊緣繪制成實(shí)線;4.不繪制軸;5.將尚未繪制的所有邊緣繪制成在每條邊緣附近繪制有增長(zhǎng)圖標(biāo)的虛線;6.對(duì)于每對(duì)垂直邊緣和/或垂直軸,如果它們都是固定的,則在其交點(diǎn)上繪制一個(gè)錨點(diǎn);7.對(duì)于每條固定邊緣,如果尚未在該邊緣的任何位置上繪制錨點(diǎn),則在該邊緣的中點(diǎn)繪制一個(gè)滑塊;以及8.對(duì)于每對(duì)垂直邊緣和/或垂直軸,如果尚未在其交點(diǎn)處繪制錨點(diǎn)或滑塊,則在其交點(diǎn)上繪制一個(gè)手柄。
規(guī)則1、2和3確保如果線條是固定的或受約束的,則將線條繪制成實(shí)線。規(guī)則5確保將不固定邊緣繪制成虛線。規(guī)則6、7和8確保固定點(diǎn)顯示錨點(diǎn),某些固定邊緣顯示滑塊,并且其它顯示手柄。
在上文中,邊緣只需繪制一次,因此,如果某條規(guī)則使得對(duì)一條邊緣進(jìn)行了繪制,則后續(xù)規(guī)則將不會(huì)使該邊緣被再次繪制。如果方便的話,例如,如果容器很小,并且圖標(biāo)彼此重疊或遮擋表示的其它特征,則可以按不同方式繪制圖標(biāo)或者省略圖標(biāo)。
繪制不固定邊緣的準(zhǔn)確位置,可以取決于容器的內(nèi)容。正如下文所述,使用“現(xiàn)場(chǎng)校對(duì)”,這意味著對(duì)內(nèi)容和文檔模板進(jìn)行合并,并且該內(nèi)容在用戶界面中是可見(jiàn)的。一種備選的實(shí)現(xiàn)方式能夠使用在所有文檔上平均的容器內(nèi)容區(qū)域,或者某些其它確定不固定邊緣在用戶界面上應(yīng)當(dāng)放置在何處的方法。
容器的這些表示提供了一種用于顯示容器邊緣狀態(tài)的圖形方法。該表示的解釋如下·虛線意味著文檔中那個(gè)邊緣的位置取決于容器的內(nèi)容。在圖4中,此類邊緣被標(biāo)記為410。
·實(shí)線意味著邊緣是受限制的,因?yàn)樵撨吘壥枪潭ǖ?諸如邊緣414),或者因?yàn)槿萜鞯膶挾群透叨仁枪潭ǖ?在容器408中二者都是固定的)。
·錨點(diǎn)意味著與該錨點(diǎn)相交的邊緣和/或軸是固定的。因此,錨點(diǎn)在所有文檔中將出現(xiàn)在相同的水平和垂直位置。因此,根據(jù)定義,錨點(diǎn)是固定的。圖4中的圖標(biāo)409是錨點(diǎn)圖標(biāo)的一個(gè)例子,它表示相交邊緣414是固定的。
·滑塊意味著相關(guān)聯(lián)邊緣是固定的,但容器可以位于沿該邊緣“縱向滑動(dòng)”的許多位置上。例如,在圖4中,滑塊413表示容器408的內(nèi)容在文檔中可以出現(xiàn)在特定圖中所看到的位置的左邊或右邊。
是否繪制這些圖標(biāo)或邊緣的某些或全部,取決于哪個(gè)工具或哪些容器被選擇、高亮顯示或者激活了。一般而言,在所印刷的文檔中不繪制容器的邊緣和圖標(biāo),因?yàn)樗鼈兪窃O(shè)計(jì)文檔模板的輔助工具。
可以在輔助對(duì)話窗口中顯示諸如最小和最大寬度和高度之類的設(shè)置。
在圖5A中,容器501的寬度和高度都是不固定的。用實(shí)線表示固定的邊緣503。用虛線表示不固定的邊緣504。增長(zhǎng)圖標(biāo)505是附加的或可選的指示符,表示相鄰邊緣504是不固定的。
在圖5B中,容器501的寬度和高度都是不固定的。錨點(diǎn)圖標(biāo)506附加地或可選地表示在該圖標(biāo)處相交的兩條邊緣503都是固定的。
在圖5C中,容器501的寬度和高度都是不固定的,圍繞著如可選錨點(diǎn)圖標(biāo)507所示的中心點(diǎn)同樣地進(jìn)行容器的擴(kuò)大或縮小。
在圖5D中,除了頂邊緣508是固定的外,容器501的寬度和高度都是不固定的。錨點(diǎn)圖標(biāo)509表示該圖標(biāo)位于其中心的頂邊緣508是固定的,并且還表示該容器的左邊緣和右邊緣圍繞著通過(guò)該圖標(biāo)垂直繪制的中心軸(垂直軸)進(jìn)行擴(kuò)大或縮小。
6.3.3用于在適當(dāng)位置編輯容器屬性的方法通過(guò)用鼠標(biāo)133和指示設(shè)備313點(diǎn)擊任一邊緣503、504或在其附近進(jìn)行點(diǎn)擊,使得邊緣503/504在固定和不固定的狀態(tài)之間進(jìn)行轉(zhuǎn)換,并且由此更新用戶界面301中的圖形表示。
使用鼠標(biāo)133和指示設(shè)備313的組合,可以對(duì)控制點(diǎn)502進(jìn)行拖動(dòng),從而使得相應(yīng)的一條或多條邊緣跟隨控制點(diǎn)502的位置。當(dāng)從利用鼠標(biāo)133/指針313的選擇中釋放控制點(diǎn)502時(shí),假定不存在使新位置無(wú)效的外部約束,則固定邊緣保持在已經(jīng)將其拖到的位置處,而不固定的邊緣將返回到其計(jì)算位置,其中該計(jì)算位置由諸如該容器內(nèi)內(nèi)容的尺寸和形狀之類的因素、以及可能應(yīng)用于該容器或邊緣的任何其它約束來(lái)進(jìn)行確定。對(duì)用于確定不固定邊緣和容器的位置的算法的完整描述,參見(jiàn)下文。
位于不固定邊緣的中心點(diǎn)或者兩條不固定邊緣的交點(diǎn)處的控制點(diǎn),可以是固定的,或者可以根本不對(duì)其進(jìn)行顯示,并且位于不固定邊緣的任一端處的控制點(diǎn),可以被限制為沿與該邊緣平行的方向進(jìn)行移動(dòng)。
另外,可以通過(guò)在容器的頂點(diǎn)或邊緣附近、或者在位于該頂點(diǎn)處的控制點(diǎn)上、或者在邊緣的中心用指示設(shè)備133進(jìn)行點(diǎn)擊,向容器的頂點(diǎn)或邊緣添加錨點(diǎn)。還可以通過(guò)在錨點(diǎn)圖標(biāo)附近進(jìn)行點(diǎn)擊,或者可選地通過(guò)選擇錨點(diǎn)而后激活該界面中的菜單項(xiàng)、按鈕或其它控件,對(duì)錨點(diǎn)進(jìn)行刪除。
以這種方式添加錨點(diǎn),將會(huì)使得與該錨點(diǎn)相交的一條或幾條邊緣、一條或幾條軸變?yōu)楣潭ǖ摹?br> 容器最好有至少一個(gè)固定的點(diǎn),除非另有外部約束,因?yàn)槿绻麤](méi)有該要求,則有可能會(huì)創(chuàng)建其水平和垂直位置沒(méi)有明確進(jìn)行定義的容器。例如,如果該容器沒(méi)有其它有效的外部約束,則沒(méi)有固定邊緣或軸的容器的內(nèi)容邏輯上可能出現(xiàn)在頁(yè)面上的任意位置。這使用戶很難對(duì)此類容器的內(nèi)容在文檔中將出現(xiàn)在何處進(jìn)行預(yù)測(cè)。因此,通過(guò)不允許將容器放置在這種未明確定義的狀態(tài)中的轉(zhuǎn)換,某些實(shí)現(xiàn)方式避免了上述可能性。
如上所述,倘若該容器具有外部約束,則容器可以有固定的寬度或高度而并不具有相應(yīng)的固定邊緣。例如,倘若能夠利用某種水平約束確定容器的水平位置,則盡管容器的左邊緣和右邊緣是不固定的,容器也可以有固定的寬度。以下將論述此類外部約束,并將其稱為“支柱”。
倘若將外部約束支柱附加到容器上,就能夠以與上述用于固定邊緣的方式類似的方式對(duì)邊緣進(jìn)行點(diǎn)擊,來(lái)固定寬度或高度。在該情況中,如果存在與該容器相連的水平支柱,則對(duì)不固定的左邊緣、右邊緣或在其附近進(jìn)行點(diǎn)擊,將會(huì)固定容器的寬度。如果存在與該容器相連的垂直支柱,則對(duì)不固定的頂邊緣、底邊緣或在其附近進(jìn)行點(diǎn)擊,將會(huì)固定其高度。
對(duì)邊緣、軸、寬度和高度的固定性進(jìn)行操作,相當(dāng)于在容器的邊緣狀態(tài)之間進(jìn)行轉(zhuǎn)換。其它操作,例如對(duì)固定邊緣或角的位置進(jìn)行改變,會(huì)修改其它容器狀態(tài)信息。
更佳地,為了確保各容器總是具有有效的邊緣狀態(tài),每當(dāng)向容器添加約束或從容器中刪除約束時(shí),都應(yīng)用一組規(guī)則,并且對(duì)其它約束進(jìn)行必要調(diào)整,以便解決所有問(wèn)題。通過(guò)更新屏幕顯示以顯示新的約束配置,立即向用戶指出有關(guān)調(diào)整。這使得用戶界面103能夠防止容器到達(dá)所不期望的狀態(tài)。
向每個(gè)容器的水平和垂直尺寸應(yīng)用如下規(guī)則1.如果任一邊緣變成固定的或受到外部約束的作用,則與該邊緣平行的軸變?yōu)椴还潭ǖ摹?br> 2.如果一個(gè)軸變成不固定的,則至少一條平行邊緣必須變成固定的或受到外部約束的作用。
3.如果相對(duì)邊緣變成不固定的,并且除去了那些邊緣上的所有外部約束,則與那些邊緣平行的軸變成固定的。
4.如果軸變成固定的,則與該軸平行的邊緣變成不固定的,并且除去在那些邊緣上起作用的外部約束。
5.如果寬度變成固定的,則左邊緣、右邊緣和垂直軸變成不固定的。
6.如果高度變成固定的,則頂邊緣、底邊緣和水平軸變成不固定的。
6.3.4備選的容器用戶界面獨(dú)立約束容器用戶界面的替換(第二種)實(shí)現(xiàn)方式,可以以將容器的邊緣狀態(tài)劃分為視覺(jué)上不同并且可獨(dú)立編輯的約束的方式,顯示并且允許對(duì)容器進(jìn)行編輯。
在該實(shí)現(xiàn)方式中,利用跨越容器內(nèi)容區(qū)域的條表示寬度和高度約束。邊緣只表示邊緣的固定或不固定性質(zhì)。
根據(jù)容器顯示方法,用于第二種實(shí)現(xiàn)方式的規(guī)則依次為1.對(duì)于每條邊緣或軸,如果其線條是固定的,則繪制成實(shí)線,否則繪制成虛線;2.如果寬度是固定的,則繪制一條跨越內(nèi)容區(qū)域的寬度條,否則繪制成虛線;3.如果高度是固定的,則沿著內(nèi)容區(qū)域向下繪制一條實(shí)心高度條,否則繪制成虛線;以及4.對(duì)于每對(duì)垂直邊緣和/或垂直軸,如果都是固定的,則在其交點(diǎn)繪制一個(gè)錨點(diǎn),否則繪制一個(gè)手柄。
在第二種實(shí)現(xiàn)方式中,不需要如前所述的滑塊,因?yàn)閷?shí)線已經(jīng)表示了與滑塊相同的行為。而前一種實(shí)現(xiàn)方式則不然,因?yàn)榍耙环N實(shí)現(xiàn)方式除了使用實(shí)線表示邊緣的固定性之外,還使用實(shí)線表示寬度和高度約束。
第二種實(shí)現(xiàn)方式中的寬度條和高度條,是分別對(duì)容器的寬度和高度約束進(jìn)行顯示和編輯的圖形方法。這些條可能看起來(lái)像邊緣,并具有分別表示固定性和不固定性的實(shí)線或虛線外觀。在圖38中,顯示了跨越兩個(gè)容器3802和3803的寬度條3805和高度條3806,其水平和垂直位置分別由容器3801的尺寸和連接支柱3804的長(zhǎng)度來(lái)確定??蛇x地,如果諸如固定邊緣之類的其它約束使得寬度或高度的固定無(wú)意義,則這些條可能不起作用,或者不對(duì)其進(jìn)行繪制。例如,如果容器的左邊緣是固定的,并且右邊緣是不固定的,則最好防止用戶固定寬度,因?yàn)檫@會(huì)使容器處于一種超出先前論述的36種首選邊緣狀態(tài)集合之外的邊緣狀態(tài)。在該情況中,可能不顯示寬度條。
為了在第二種實(shí)現(xiàn)方式中編輯容器,使用鼠標(biāo)133和指針313對(duì)邊緣、軸、寬度條或高度條進(jìn)行點(diǎn)擊,將邊緣從固定的改為不固定的,或者反之亦然。對(duì)邊緣、手柄或錨點(diǎn)的拖動(dòng),以與上述類似的方式起作用,并且對(duì)錨點(diǎn)進(jìn)行點(diǎn)擊,將會(huì)固定與其相交的任一不固定的邊緣或軸,或者如果兩條相交線已經(jīng)是固定的,則同時(shí)將它們變成不固定的。如果以上操作使容器的水平位置或垂直位置未明確定義,則固定任一或兩個(gè)中心軸可以對(duì)此問(wèn)題進(jìn)行糾正。例如,如果點(diǎn)擊錨點(diǎn)使得容器的所有邊緣變?yōu)椴还潭ǖ?,則存在多個(gè)可能的內(nèi)容位置,因此,為了糾正此問(wèn)題,通過(guò)固定其垂直軸和水平軸,可以錨定該容器的中點(diǎn)。其它外部約束或規(guī)則可能使得該步驟并非必要,或者只固定一個(gè)軸可能就足夠了。
6.3.5備選的容器用戶界面尺寸框在另一種(第三種)實(shí)現(xiàn)方式中,通過(guò)對(duì)最小和最大區(qū)域的直接操作控制容器的行為,其中最小和最大區(qū)域分別由一個(gè)單獨(dú)的矩形框表示。
圖6A-6C表示容器的第三示例性規(guī)則。
參照?qǐng)D6A,容器601包括其控制點(diǎn)603位于各頂點(diǎn)以及可選地位于各邊緣中心點(diǎn)的最小區(qū)域框602,和其控制點(diǎn)605位于各頂點(diǎn)以及可選地位于各邊緣中心點(diǎn)的最大區(qū)域框604。
最小區(qū)域框602在水平和垂直方向總是出現(xiàn)在最大區(qū)域框604之內(nèi),或與其相重合。
第三框606表示容器內(nèi)的內(nèi)容的實(shí)際區(qū)域。內(nèi)容框606總是出現(xiàn)在最大區(qū)域框之內(nèi)或與其重合,并且總是出現(xiàn)在最小區(qū)域框之外或與其重合。由諸如容器內(nèi)內(nèi)容的尺寸和形狀之類的因素、以及可能應(yīng)用于該容器的任何其它約束,對(duì)內(nèi)容框的首選尺寸進(jìn)行確定。
為了使用戶易于區(qū)分這三個(gè)框,可選地,可以通過(guò)不同線磅重、線型或顏色對(duì)各個(gè)框及其控制點(diǎn)進(jìn)行表示。
在查看包括一個(gè)或多個(gè)容器的文檔模板時(shí),為了減少視覺(jué)混亂,可以可選地隱藏最小和最大區(qū)域框602、604及其相關(guān)聯(lián)的控制點(diǎn)603、605、以及內(nèi)容框606,除非與它們關(guān)聯(lián)的特定容器是“有效的”,例如,通過(guò)把指針?lè)胖迷谠撊萜髡紦?jù)的區(qū)域內(nèi)或者利用鼠標(biāo)點(diǎn)擊該容器來(lái)實(shí)現(xiàn)。
通過(guò)使用指示設(shè)備133對(duì)其各自的控制點(diǎn)603或605進(jìn)行直接操作,可以調(diào)整最小區(qū)域框602和最大區(qū)域框604的大小。通過(guò)調(diào)整最小區(qū)域框602的大小,不管容器內(nèi)可能出現(xiàn)何種內(nèi)容,用戶都可以確定內(nèi)容框606的最小可能尺寸。通過(guò)調(diào)整最大區(qū)域框604的大小,不管容器內(nèi)可能出現(xiàn)何種內(nèi)容,用戶都可以確定內(nèi)容框606的最大可能尺寸。
在調(diào)整最小區(qū)域框602的大小時(shí),如果將該框的任一頂點(diǎn)或邊緣的位置拖放到最大區(qū)域框604的外部,則自動(dòng)移動(dòng)該頂點(diǎn)或邊緣,以便使它在釋放控制點(diǎn)后與最大區(qū)域框的相應(yīng)頂點(diǎn)或邊緣相同;或者該頂點(diǎn)或邊緣在它到達(dá)最大區(qū)域框604的相應(yīng)頂點(diǎn)或邊緣之后停止移動(dòng);或者自動(dòng)擴(kuò)大到最大區(qū)域框604的相應(yīng)頂點(diǎn)或邊緣,以便與當(dāng)前拖動(dòng)的頂點(diǎn)或邊緣重合或者在其之外。
在調(diào)整最大區(qū)域框604的大小時(shí),如果將該框的任一頂點(diǎn)或邊緣的位置拖動(dòng)到最小區(qū)域框602的內(nèi)部,則自動(dòng)移動(dòng)該頂點(diǎn)或邊緣,以便使它在釋放控制點(diǎn)后與最小區(qū)域框的相應(yīng)頂點(diǎn)或邊緣相同;或者該頂點(diǎn)或邊緣在它到達(dá)最小區(qū)域框602的相應(yīng)頂點(diǎn)或邊緣之后停止移動(dòng);或者自動(dòng)縮小最小區(qū)域框602的相應(yīng)頂點(diǎn)或邊緣,以便與當(dāng)前拖動(dòng)的頂點(diǎn)或邊緣重合或者在其內(nèi)部。
根據(jù)最小區(qū)域框602在最大區(qū)域框604中的相對(duì)位置,確定內(nèi)容框606在最大區(qū)域框604中的位置。
通過(guò)用指示設(shè)備133拖動(dòng)最小區(qū)域框602,可以將其移動(dòng)到最大區(qū)域框604內(nèi)的任意位置。
可選地,可以對(duì)最小區(qū)域框602進(jìn)行編程,以便在利用指示設(shè)備133拖動(dòng)該框時(shí),“咬住”最大區(qū)域框604內(nèi)的首選位置選擇中最靠近的位置,其中首選位置包括水平方向上的左對(duì)齊、右對(duì)齊和居中,以及垂直方向上的頂對(duì)齊、底對(duì)齊和居中。
圖6A中的水平尺寸a、b、c和d表示最大區(qū)域框604、內(nèi)容框606以及最小區(qū)域框602的各個(gè)垂直邊緣之間的距離。
假定內(nèi)容框606的任意尺寸在任何特定時(shí)刻由框內(nèi)的內(nèi)容所決定,則尺寸a、b、c和d總是符合以下等式a∶b=d∶c相應(yīng)等式適用于相應(yīng)的垂直尺寸,并且圖中未對(duì)垂直尺寸進(jìn)行標(biāo)記。
因此,根據(jù)求解的水平尺寸a、b、c和d以及相應(yīng)的垂直尺寸,對(duì)內(nèi)容框606在最大區(qū)域框604內(nèi)的位置進(jìn)行確定。
圖6B表示一種特殊情況,其中最小區(qū)域框602位于最大區(qū)域框604的左上角,并且因此內(nèi)容框606也位于最大區(qū)域的左上角。
圖6C表示另一種特殊情況,其中最小區(qū)域框602在水平和垂直方向上位于最大區(qū)域框604的中心,并且因此內(nèi)容框606同時(shí)在水平和垂直方向上也位于最大區(qū)域的中心。
圖6D和6E表示用于生成其中使用容器區(qū)域的可變數(shù)據(jù)文檔的方法620。在應(yīng)用程序121內(nèi)實(shí)現(xiàn)方法620,并且該方法的起始點(diǎn)為622,其后在步驟624中,對(duì)文檔模板進(jìn)行檢索,并且在顯示屏144上的GUI301內(nèi)對(duì)其進(jìn)行顯示。步驟626中,通常通過(guò)鼠標(biāo)133和相應(yīng)指針313的移動(dòng),對(duì)用戶繪制容器進(jìn)行檢測(cè)。
在默認(rèn)情況下,容器在繪制時(shí)具有兩個(gè)約束,即最小容器區(qū)域和最大容器區(qū)域,諸如圖6A-6C所示的最小容器區(qū)域和最大容器區(qū)域。在容器的初始狀態(tài)中,最小容器區(qū)域與最大容器區(qū)域相重合。在步驟634中,可以對(duì)任一區(qū)域的控制點(diǎn)進(jìn)行操作,以便由此對(duì)容器區(qū)域進(jìn)行修改。
為了形成版面,在模板中表示該容器,此后在步驟628中可以應(yīng)用各種約束。步驟628可以包括在該版面內(nèi)的容器當(dāng)中合并在此描述的多種類型的約束。在當(dāng)前論述的實(shí)現(xiàn)方式中,所應(yīng)用的約束是容器區(qū)域中的約束,諸如在圖6A-6C中所示的那些。在步驟630中,再次使用鼠標(biāo)133和指針313對(duì)容器區(qū)域進(jìn)行繪制,然后在步驟632中,將容器區(qū)域和版面中的容器進(jìn)行關(guān)聯(lián)。在步驟634中,可以選擇該區(qū)域的控制點(diǎn),并且對(duì)控制點(diǎn)進(jìn)行操作以便修改容器區(qū)域。此類修改包括設(shè)置該區(qū)域的一條或多條邊緣,以便與容器的邊緣相重合(圖6B),以及相對(duì)于相關(guān)聯(lián)的容器對(duì)區(qū)域框進(jìn)行移動(dòng)或定位。
接下來(lái)是步驟636,通過(guò)返回到步驟628,用戶可以應(yīng)用更多的約束。更多約束包括另一個(gè)區(qū)域框,由此提供了構(gòu)造最小和最大區(qū)域框的機(jī)會(huì)。還可以應(yīng)用其它約束。例如,在最大區(qū)域框和與最大區(qū)域框無(wú)關(guān)聯(lián)的另一個(gè)容器之間應(yīng)用支柱。這使得區(qū)域框能夠根據(jù)另一個(gè)容器的變化進(jìn)行動(dòng)態(tài)地移動(dòng),同時(shí)繼續(xù)限制與最大區(qū)域框相關(guān)聯(lián)的容器的尺寸。
在步驟636之后,通過(guò)步驟638的操作,用戶可以向版面中添加更多容器,直至版面完成為止。一旦版面完成,步驟640就將一條內(nèi)容記錄放置到版面中以便生成文檔。步驟642允許為所有內(nèi)容記錄重復(fù)該過(guò)程,從而創(chuàng)建一組可變數(shù)據(jù)文檔。一旦已經(jīng)用盡了所有記錄并生成文檔,就如在步驟644中請(qǐng)求的那樣,對(duì)文檔進(jìn)行校對(duì)(參見(jiàn)章節(jié)11.10-11.13)和/或印刷。方法620在步驟646中結(jié)束。
7.圖像容器圖像容器是特定類型的容器,其目的是用于包含諸如照片、插圖、徽標(biāo)或圖表之類的圖像。
最好是,圖像容器具有一個(gè)行為選擇,以便控制將要包含的圖像的縮放,其中行為選擇包括·“適合整幅圖像”,對(duì)圖像進(jìn)行放大或縮小,從而使得整幅圖像適合容器,并且圖像的縱橫比不變;·“使圖像適合容器的尺寸”,對(duì)圖像進(jìn)行放大或縮小,從而將該圖像填滿整個(gè)容器,并且圖像的縱橫比不變,而且從視圖中將圖像的剩余部分剪切掉;·“拉伸以適合”,對(duì)圖像進(jìn)行放大或縮小,以便在水平和垂直尺寸上完全適合容器的尺寸,忽略圖像的原始縱橫比;·“不進(jìn)行縮放”,不對(duì)圖像進(jìn)行縮放,并且從視圖中剪切掉任何超出容器范圍的圖像部分。
另外,可以對(duì)圖像容器進(jìn)行設(shè)置,以便使在該容器內(nèi)、并且其大小小于容器尺寸的任何圖像向特定方向?qū)R,包括水平方向上的左對(duì)齊、居中、右對(duì)齊以及垂直方向上的頂對(duì)齊、居中、底對(duì)齊的任意組合。
8.文本容器文本容器是特定類型的容器,其目的是用于包含一段文本,并且可以利用各種字體和段落樣式對(duì)其進(jìn)行格式化,并且可以向文本容器的各個(gè)邊緣進(jìn)行對(duì)齊或調(diào)整。
文本容器包含靜態(tài)文本、可變文本或者二者的組合??梢詫⒅T如圖像之類的其它對(duì)象插入到文本容器中,并且其它對(duì)象以與文本流動(dòng)相同的方式進(jìn)行流動(dòng)。
通過(guò)直接輸入將靜態(tài)文本輸入到容器中。如章節(jié)11中詳細(xì)說(shuō)明的那樣,通過(guò)將可變數(shù)據(jù)對(duì)象從庫(kù)中拖動(dòng)到容器中,對(duì)可變文本進(jìn)行添加。單個(gè)文本容器中可顯示一個(gè)以上的可變文本對(duì)象。
靜態(tài)文本的格式化可應(yīng)用于單個(gè)字母、詞語(yǔ)或整個(gè)段落,然而格式化選項(xiàng)只能應(yīng)用于整個(gè)可變文本項(xiàng)實(shí)例。
8.1文本格式化文本格式化包括以下選項(xiàng)·字體·字體大小·加粗·傾斜·下劃線·顏色·行間距·強(qiáng)制大寫字母·自動(dòng)斷字8.2對(duì)齊在某些特定實(shí)現(xiàn)方式中允許以下文本對(duì)齊選項(xiàng)·水平對(duì)齊左對(duì)齊(默認(rèn))、水平居中、右對(duì)齊或分散對(duì)齊。
·垂直對(duì)齊頂對(duì)齊(默認(rèn))、垂直居中、底對(duì)齊。
在不同的實(shí)現(xiàn)方式中,其它選項(xiàng)也是合適的,如垂直分散對(duì)齊文本。
8.3欄可以將文本容器中的文本排列為一欄、兩欄或多欄,通過(guò)稱為“間距”的間隔將每一欄的左右邊緣和相鄰的欄分開。
在現(xiàn)有技術(shù)中,通過(guò)拖動(dòng)相鄰欄之間的分界線來(lái)調(diào)整欄寬,是公知的,并且通過(guò)修改屬性表或?qū)υ捒蛑械闹?,或者通過(guò)類似的間接方法,可以預(yù)先對(duì)間距進(jìn)行設(shè)置。
圖7A-7B表示一個(gè)具有三個(gè)欄的文本容器701,以及通過(guò)利用諸如鼠標(biāo)133和指針313之類的指示設(shè)備的直接操作,來(lái)調(diào)整欄寬和間距寬度的方法。
參照?qǐng)D7A,將文本容器701劃分為三個(gè)文本欄702。如圖所示,線條703表示相鄰欄之間的中心分界線,線條704表示相鄰欄702之間的間距邊界。
通過(guò)利用鼠標(biāo)133和指示設(shè)備133拖動(dòng)中心分界線703,能夠調(diào)整相鄰欄的寬度。在拖動(dòng)操作期間,顯示一個(gè)特殊指針705代替默認(rèn)指針,以表示欄拖動(dòng)操作是有效的。
正如圖7B所示的那樣,通過(guò)利用指示設(shè)備拖動(dòng)間距邊界線704,可以調(diào)整間距的寬度。在拖動(dòng)操作期間,顯示一個(gè)特殊指針706代替默認(rèn)指針,以表示間距拖動(dòng)操作是有效的。
同時(shí)調(diào)整在同一欄間間隔內(nèi)的兩條間距邊界線,從而使每條間距邊界線和中心分界線之間總是保持相等間隔。
如在圖7B中所見(jiàn),其中可以多于兩欄,可以對(duì)每個(gè)間距進(jìn)行獨(dú)立操作。
8.4可變字體大小可以改變文本容器內(nèi)文本的字體大小,以允許通過(guò)減小或變大使各種容量的文本與容器相適合,并且允許容器的尺寸根據(jù)外部約束發(fā)生變化,同時(shí)仍然能夠使文本整體與容器相適合??梢詾槊總€(gè)文本容器設(shè)置最小和最大的字體大小,從而限定可能的字體大小范圍??梢允褂谜郯胨阉魉惴ù_定要使用的最佳字體大小,以便使所有文本與容器相適合。如果字體大小達(dá)到最小尺寸,而文本仍然不能與容器相適合,則向用戶顯示一個(gè)錯(cuò)誤信息。
8.5容器間的字體大小同步可以在兩個(gè)或多個(gè)文本容器之間創(chuàng)建一個(gè)約束,該約束規(guī)定無(wú)論是否對(duì)任何容器的字體大小進(jìn)行改變,所有容器中字體大小必須相等,以便允許某些文本內(nèi)容恰當(dāng)?shù)嘏c容器相適合。
更佳地,如果在添加約束前為上述同步所選擇的文本容器具有不同的字體大小,則首先對(duì)字體大小取平均,然后應(yīng)用于每個(gè)所選容器。一種備選的實(shí)現(xiàn)方式可以使用最初選擇的容器的字體大小,并且將該字體大小應(yīng)用于所有其它容器。另一種備選方案是將外部字體大小設(shè)置應(yīng)用于每個(gè)容器。
參照?qǐng)D8,應(yīng)用程序窗口301具有如前所述的工具欄區(qū)域303。工具欄區(qū)域303包含至少一個(gè)字體選擇器803、一個(gè)字體大小選擇器804和一個(gè)用于添加字體大小同步約束的按鈕805??梢岳米煮w選擇器803和字體大小選擇器804,來(lái)改變文本容器中文本的屬性。在選擇了若干文本容器后,點(diǎn)擊字體大小同步按鈕805將會(huì)使所有所選容器的字體大小同步。
已經(jīng)預(yù)先將多個(gè)文本容器806、807放置在文本模板309中。通過(guò)操作鼠標(biāo)133,通過(guò)用指針313點(diǎn)擊容器,通過(guò)在其周圍拖動(dòng)選擇矩形,或者通過(guò)其它方法,可以對(duì)容器進(jìn)行選擇??梢允褂每梢暦椒ū硎井?dāng)前選擇了文本容器,諸如通過(guò)在容器上顯示控制點(diǎn)來(lái)實(shí)現(xiàn)。
通過(guò)選擇兩個(gè)或多個(gè)文本容器806、807,以及通過(guò)激活同步按鈕805,對(duì)約束進(jìn)行添加。在其它實(shí)現(xiàn)方式中,可以通過(guò)下拉菜單、鍵盤命令或其它方法,應(yīng)用字體大小同步約束。
可選地,借助于在各個(gè)文本容器806、807上或在其附近的圖標(biāo)808或其它圖形表示,在用戶界面中示出該約束。另外,可選地,可以在由約束鏈接的文本容器的各個(gè)圖標(biāo)之間繪制連接線809,以表示哪些文本容器彼此鏈接。
在其它實(shí)現(xiàn)方式中,可以提供視頻顯示屏144的一個(gè)獨(dú)立區(qū)域,用于顯示所選對(duì)象的各種屬性,并且可以利用該區(qū)域表示所選的文本容器具有應(yīng)用于它的字體大小同步約束,并且標(biāo)識(shí)通過(guò)該約束鏈接了哪些其它容器。
可以通過(guò)選擇由該約束鏈接的一個(gè)或多個(gè)文本容器,并且重復(fù)最初用于應(yīng)用該約束的命令或序列,對(duì)字體大小約束進(jìn)行刪除。這可以通過(guò)下列方式實(shí)現(xiàn)激活同步按鈕805;選擇由該約束鏈接的一個(gè)或多個(gè)文本容器,并且應(yīng)用專為此目的提供的附加命令或序列;或者點(diǎn)擊表示圖標(biāo)808或連接線809,并且應(yīng)用命令或序列,諸如啟動(dòng)鍵盤132上的或者在顯示屏144上顯示的菜單命令中的“刪除(delete)”鍵。
如果用戶將字體大小約束應(yīng)用于已經(jīng)包含具有不同字體大小的文本的兩個(gè)或多個(gè)文本容器,則將最大字體大小、最小字體大小,或者平均字體大小應(yīng)用于所有文本容器??蛇x地,可利用彈出對(duì)話框或者類似方式,提示用戶對(duì)字體大小進(jìn)行選擇。
如果用戶手動(dòng)更改已經(jīng)由字體大小約束鏈接的任一容器的字體大小,例如通過(guò)從字體大小選擇器804中選擇新的字體大小來(lái)實(shí)現(xiàn),則將新的字體大小應(yīng)用于由該約束鏈接的所有容器。
8.6內(nèi)部邊距的自動(dòng)應(yīng)用根據(jù)文本容器是否有可視邊界和/或可視背景,可以自動(dòng)設(shè)置文本容器的內(nèi)部邊距。
參照?qǐng)D9,應(yīng)用程序窗口301具有如前所述的工具欄區(qū)域303。工具欄區(qū)域303包含至少一個(gè)邊界選擇器903和一個(gè)背景顏色選擇器904。
文本容器905沒(méi)有可視邊界或背景顏色,并且在容器的邊緣與容器內(nèi)的文本之間也沒(méi)有邊距。
文本容器906具有可視邊界,并且在容器的邊緣與容器內(nèi)的文本之間在四側(cè)都有邊距907。
在如圖9所示的系統(tǒng)狀態(tài)之前,通過(guò)用指針133點(diǎn)擊容器906,通過(guò)在其周圍拖動(dòng)選擇矩形,或者利用其它方法,對(duì)文本容器906進(jìn)行選擇,其中文本容器906處于與文本容器905類似的狀態(tài),沒(méi)有可視邊界或背景,并且沒(méi)有邊距。可以使用可視方法表示當(dāng)前選擇了文本容器,諸如通過(guò)在容器上顯示控制點(diǎn)來(lái)實(shí)現(xiàn)。
然后,利用邊界選擇器903來(lái)應(yīng)用可視邊界,或者可選地,利用背景顏色選擇器904來(lái)應(yīng)用背景顏色。
當(dāng)將可視邊界或背景應(yīng)用于文本容器時(shí),如果沒(méi)有設(shè)置內(nèi)部邊距,則將預(yù)定的內(nèi)部邊距907在四側(cè)自動(dòng)地應(yīng)用于文本容器。只要在文本容器的背景顏色與模板的主要環(huán)繞背景顏色間存在可視差別,就可以自動(dòng)添加內(nèi)部邊距。
可以為容器自動(dòng)設(shè)置內(nèi)部邊距的另一種情況,是在容器的背景顏色與頁(yè)面顏色不同時(shí)。在這種情況下,可以對(duì)內(nèi)部邊距進(jìn)行添加,以便提供內(nèi)容和頁(yè)面背景間的視差,而不是允許內(nèi)容移動(dòng)到容器的邊緣上。如果容器的背景顏色是完全透明的,則根據(jù)定義將其內(nèi)容繪制在與頁(yè)面相同的背景上,并且因此無(wú)需添加內(nèi)部邊距。
8.7容器之間的文本流可以將兩個(gè)或多個(gè)文本容器順序地鏈接起來(lái),以便如果文本容量超出前一個(gè)容器的尺寸,則允許文本從一個(gè)容器流動(dòng)到下一個(gè)容器中。
當(dāng)文本不適合所有此類鏈接容器的組合區(qū)域時(shí),必須為每一個(gè)容器找到一個(gè)允許文本與之相適合的字體大小,同時(shí)設(shè)法保持不同容器的字體大小之間的關(guān)系。
對(duì)一組鏈接的容器而言,實(shí)現(xiàn)上述處理的理想方法是,使用折半搜索算法以調(diào)節(jié)字體大小,直到文本恰好適合為止,或者直到所有鏈接容器到達(dá)小于其各自的最小字體大小的字體大小為止(此時(shí),向用戶顯示操作未完成的錯(cuò)誤或其它指示)。注意到,如果一個(gè)容器在其它容器之前到達(dá)其最小字體大小,則不一定會(huì)使該算法終止。在此類情況中,該算法試圖保持容器之間的字體大小關(guān)系,但并不保證這樣做。
實(shí)現(xiàn)上述處理的一種備選方法是,使用與上述方法類似的方法,但是,如果任一鏈接的容器到達(dá)了小于其最小字體大小的字體大小,則用錯(cuò)誤或其它指示進(jìn)行終止。該備選方法保持了鏈接容器之間的相對(duì)字體大小,但是可能產(chǎn)生錯(cuò)誤,并且與折半搜索算法相比,在大多數(shù)情況下不能產(chǎn)生解答。該備選方法將會(huì)用于實(shí)現(xiàn)文本流,其中也期望所有鏈接容器間的字體大小同步。
利用字體收縮來(lái)實(shí)現(xiàn)文本流的另一種方法是,簡(jiǎn)單地減小所鏈接集合中第一個(gè)容器的字體大小,直到文本與該組容器相適合、或者第一個(gè)容器到達(dá)其最小字體大小為止。如果是后一種情況,則通過(guò)縮小第二容器繼續(xù)該處理,諸如此類,直至文本相適合或者所有容器都到達(dá)其最小字體大小為止。如果文本仍然不能完全與容器相適合,則用某種方式對(duì)其進(jìn)行表示,可能會(huì)用錯(cuò)誤通知來(lái)表示。在該方法中,容器的排序是重要的,并且將其定義為文本流動(dòng)的順序,因此,如果文本從容器A開始并且在容器B中繼續(xù),則A是第一容器,B是第二容器。
9.導(dǎo)向?qū)蚴强缭巾?yè)面寬度或高度的垂直或水平線,以便輔助容器或其它導(dǎo)向的定位。有兩類導(dǎo)向,固定和不固定的(或浮動(dòng)的)。經(jīng)由支柱(距離約束,在稍后說(shuō)明)將導(dǎo)向連接到其它導(dǎo)向或容器。導(dǎo)向不出現(xiàn)在文檔中,只出現(xiàn)在文檔模板309中,作為設(shè)計(jì)的輔助工具。通過(guò)將指示設(shè)備從標(biāo)尺區(qū)拖動(dòng)到工作區(qū)中,可以對(duì)導(dǎo)向進(jìn)行創(chuàng)建。
9.1固定導(dǎo)向?qū)⒐潭▽?dǎo)向固定到頁(yè)面上,或頁(yè)面的某一部分上,諸如可印刷區(qū)域上。固定導(dǎo)向是固定的,是指它對(duì)于所有文檔來(lái)說(shuō)具有相同位置??梢韵鄬?duì)于頁(yè)面的特定邊緣或者頁(yè)面的可印刷部分,例如相對(duì)于左邊緣,對(duì)此類導(dǎo)向進(jìn)行固定。在本例中,如果調(diào)整頁(yè)面的大小(例如在不同大小的紙張上印刷),則導(dǎo)向與左邊緣的距離保持不變,但是與任何其它各邊緣的距離未必如此。
9.2不固定導(dǎo)向在不同的文檔中,或者當(dāng)文檔內(nèi)的數(shù)據(jù)變化時(shí),例如當(dāng)文檔模板與來(lái)自數(shù)據(jù)源的記錄進(jìn)行合并時(shí),不固定的或浮動(dòng)的導(dǎo)向可以具有不同的位置。在該例子中,當(dāng)對(duì)數(shù)據(jù)與文檔模板進(jìn)行合并時(shí),一個(gè)或多個(gè)容器可以保存來(lái)自數(shù)據(jù)源的數(shù)據(jù),該數(shù)據(jù)可能使得通過(guò)支柱的作用對(duì)不固定導(dǎo)向的位置進(jìn)行確定。在對(duì)該數(shù)據(jù)與文檔模板進(jìn)行合并前,不固定導(dǎo)向的位置可能是未知的,或者可以為編輯和設(shè)計(jì)的目的給出初始位置(可能是任意的)。在某些實(shí)現(xiàn)方式中,當(dāng)對(duì)來(lái)自數(shù)據(jù)源的數(shù)據(jù)與文檔模板進(jìn)行合并時(shí),浮動(dòng)導(dǎo)向總是具有可由用戶進(jìn)行編輯或者由版面引擎105進(jìn)行改變的位置。
9.3導(dǎo)向?qū)崿F(xiàn)方式在具體實(shí)現(xiàn)方式中,固定和不固定導(dǎo)向都由實(shí)線表示,其中實(shí)線可以延伸到位于工作空間的邊緣上的標(biāo)尺、頁(yè)面邊界或頁(yè)面的可印刷區(qū)域。利用顏色對(duì)固定和不固定導(dǎo)向進(jìn)行區(qū)分。可選地,可利用實(shí)線表示固定導(dǎo)向,而利用虛線或點(diǎn)線表示不固定導(dǎo)向。
參照?qǐng)D12,通過(guò)用指針133從標(biāo)尺308的水平部分進(jìn)行拖動(dòng),在GUI301中已經(jīng)預(yù)先創(chuàng)建了不固定導(dǎo)向1204。第一容器1201具有一條不固定邊緣1202。已經(jīng)從邊緣1202到不固定導(dǎo)向1204創(chuàng)建了一個(gè)支柱1203。依靠直接與導(dǎo)向1204對(duì)齊的容器1205的頂邊緣,直接將第二容器1205附加到導(dǎo)向1204。由支柱1207將第三容器1206連接到導(dǎo)向1204。同時(shí),由支柱1209將第四容器1208連接到導(dǎo)向1204。
當(dāng)不固定邊緣1202由于容器1201的高度變化而移動(dòng)時(shí),導(dǎo)向1204將改變其垂直位置,以便保持支柱約束1203。容器1205、1206和1208隨之移動(dòng),以便保持與導(dǎo)向1204相關(guān)的約束。類似地,如果由于數(shù)據(jù)與文檔模板的合并而對(duì)容器尺寸進(jìn)行確定或改變,則支柱的作用可能使得不固定導(dǎo)向根據(jù)哪些容器內(nèi)的內(nèi)容獲取位置。
用于在容器和導(dǎo)向之間添加支柱約束的方法,與說(shuō)明書其它部分描述的在容器之間添加支柱的方法類似。
用于添加約束從而將容器、例如圖12的容器1205的一條邊緣直接附加到導(dǎo)向上的首選方法是通過(guò)將容器或容器邊緣拖動(dòng)到距導(dǎo)向預(yù)定距離內(nèi)的某個(gè)位置上,其中在該位置上容器或容器邊緣可視地“咬住”到導(dǎo)向上;或者類似地,通過(guò)拖動(dòng)導(dǎo)向到距容器邊緣預(yù)定距離內(nèi)的某個(gè)位置上,其中在該位置上導(dǎo)向咬住容器邊緣。在咬住狀態(tài)下,當(dāng)從拖動(dòng)操作中釋放容器、邊緣或?qū)驎r(shí),將對(duì)約束進(jìn)行創(chuàng)建。
10.支柱支柱是一類約束,用于維持容器的特定邊緣與諸如導(dǎo)向和邊距之類的其它對(duì)象之間的固定距離。
更佳地,將每個(gè)支柱準(zhǔn)確地應(yīng)用到屬于同一文檔模板內(nèi)的兩個(gè)不同容器的兩條平行邊緣,或者應(yīng)用到容器的一條邊緣和一個(gè)平行導(dǎo)向,或者應(yīng)用到兩個(gè)平行導(dǎo)向之間。其它實(shí)現(xiàn)方式可以限制與支柱連接的對(duì)象,或者允許支柱連接一個(gè)容器的邊緣,作為規(guī)定其寬度或高度約束的方法,或者允許支柱把邊緣或?qū)蚝推叫许?yè)邊距或邊緣連接起來(lái)。
支柱是對(duì)稱的,是指就位置而言,由支柱所附加的邊緣都不優(yōu)于另一邊緣。
可以可視地或數(shù)字地或利用二者的組合,表示支柱的長(zhǎng)度。在一些實(shí)現(xiàn)方式中,所有支柱通過(guò)圖形表示(支柱圖標(biāo))的長(zhǎng)度可視地顯示其當(dāng)前長(zhǎng)度,而其它屬性作為對(duì)話框內(nèi)的數(shù)字或可視設(shè)置是可見(jiàn)的。
回到圖4,通過(guò)支柱約束將第一容器407的邊緣410連接到第二容器408的邊緣411。通過(guò)支柱圖標(biāo)412表示支柱約束,其中,可選地,可以在應(yīng)用程序的各種模式下,例如在預(yù)覽模式下,隱藏支柱圖標(biāo)。
在正常操作模式中,支柱圖標(biāo)通常是隱藏的,并且當(dāng)與鼠標(biāo)133相關(guān)聯(lián)的指針313位于該支柱、或者容器、或者邊緣、或者與該支柱相連的導(dǎo)向的附近時(shí),顯示支柱圖標(biāo)。其附近可以包括任何其它支柱、容器、邊緣、或者直接或經(jīng)由任何數(shù)目的支柱間接與該支柱相連的導(dǎo)向。
由于支柱只有一維長(zhǎng)度,因此可從與該支柱相連的邊緣的當(dāng)前位置導(dǎo)出在這一維方向上的支柱位置。因此,在邊緣410和411之間繪制支柱412??刹捎酶鞣N方式計(jì)算垂直方向上的支柱位置。一種方法是對(duì)相連邊緣的中點(diǎn)取平均,并且將支柱的中點(diǎn)定位在該平均值上。因此,支柱412的中點(diǎn)恰好在邊緣410和411的中點(diǎn)之間的正中位置處。
容器的內(nèi)容可能隨文檔變化,因此對(duì)于不同文檔來(lái)說(shuō),容器的任何不固定邊緣可能位于相對(duì)于頁(yè)面的不同位置。支柱約束的作用是保持邊緣或?qū)蛑g的距離,因此,由支柱所連接的邊緣或?qū)蚩梢跃哂性谖臋n內(nèi)的可能位置的有限范圍。
參照?qǐng)D4,如果容器407的第一條邊緣410移動(dòng)時(shí),例如如果用戶使用指示設(shè)備313通過(guò)用戶界面對(duì)某條邊緣進(jìn)行操作時(shí),可能“推動(dòng)”或“拉動(dòng)”第二條連接邊緣411,以便保持兩條邊緣之間的支柱約束(412)。在推動(dòng)或拉動(dòng)連接邊緣或?qū)驎r(shí),盡管用戶可以察覺(jué)到支柱的操作,但是用戶界面上的實(shí)際操作與生成文檔所用的操作相同。
在另一種實(shí)現(xiàn)方式中,當(dāng)激活支柱工具時(shí),可以對(duì)以上敘述的顯示支柱的方法進(jìn)行修改,以便在激活支柱工具時(shí)顯示所有支柱??蛇x地,只有當(dāng)指針直接在支柱上時(shí),才顯示支柱,而在那時(shí)不顯示其它支柱。
如圖4所示,盡管通過(guò)支柱412連接的邊緣410和411是相鄰的并彼此相對(duì),但是可以將支柱應(yīng)用于獨(dú)立容器的任意兩條平行邊緣,而不考慮兩條邊緣是否相鄰,或者是否彼此相對(duì),或者兩者都不是。
圖11表示容器之間的支柱,使用以上參照?qǐng)D6A-6C描述的容器的第三組示例性規(guī)則對(duì)其進(jìn)行說(shuō)明。第一容器1101具有一個(gè)最小區(qū)域框1103、一個(gè)最大區(qū)域框1105和一個(gè)內(nèi)容框1104。將支柱1106連接到內(nèi)容框1104的相應(yīng)邊緣。顯示了第二容器1102,其最小和最大區(qū)域是相同的。因此,在該配置中容器1102具有固定尺寸。支柱1106作用于整個(gè)容器1102上,因此,可以在水平方向上推動(dòng)或拉動(dòng)該容器。
因此,可以在第一容器的內(nèi)容框的任意一條邊緣與最大區(qū)域框或者第二容器的內(nèi)容框的一條平行邊緣之間,或者與平行導(dǎo)向、邊距或其它對(duì)象之間,創(chuàng)建支柱。
10.2在容器之間創(chuàng)建支柱參照?qǐng)D10,首先通過(guò)用鼠標(biāo)133和指針313點(diǎn)擊工具欄區(qū)域303中的支柱工具按鈕406,激活支柱工具,由此創(chuàng)建一個(gè)新支柱。接著,執(zhí)行兩步操作之一,以便鏈接兩個(gè)容器。首先,通過(guò)在第一容器1001內(nèi)的任意一點(diǎn)1003按下并保持鼠標(biāo)133,并且將指針313拖動(dòng)到第二容器1002內(nèi)的任意一個(gè)點(diǎn),并在該點(diǎn)釋放對(duì)鼠標(biāo)133的按壓,能夠?qū)β窂?004進(jìn)行拖動(dòng)。這通過(guò)圖10中的指針313的位置進(jìn)行說(shuō)明。可選地,如圖10中的指針313的位置所示,通過(guò)首先在第一容器1001內(nèi)的任意一點(diǎn)1003點(diǎn)擊(即按下后釋放)鼠標(biāo)133,然后在第二容器1002內(nèi)的任意一點(diǎn)點(diǎn)擊鼠標(biāo),可以形成容器1001和1002之間的支柱。
在具體實(shí)現(xiàn)方式中,所述支柱創(chuàng)建過(guò)程以及對(duì)將要連接的兩個(gè)容器進(jìn)行選擇的過(guò)程,基于路徑1004的起點(diǎn)和終點(diǎn)到各個(gè)容器的各個(gè)邊緣的最近距離,對(duì)容器的連接邊緣進(jìn)行選擇。例如,起點(diǎn)1003到第一容器1001的右邊緣1006的距離小于它到第一容器1001的左邊緣1005的距離,因此將對(duì)右邊緣1006進(jìn)行連接。類似地,對(duì)第二容器1002的左邊緣1007進(jìn)行連接。
在一種替換的實(shí)現(xiàn)方式中,所選擇的邊緣是兩個(gè)容器中最接近的一對(duì)平行相鄰邊緣,例如,如圖10所示的容器1001和1002中的邊緣1006和1007。
在另一種實(shí)現(xiàn)方式中,所選擇的邊緣是在指針從第一容器的內(nèi)部移動(dòng)到其外部時(shí)指針路徑第一次穿過(guò)的邊緣,以及在指針從第二容器的外部移動(dòng)到其內(nèi)部時(shí)指針路徑第一次穿過(guò)的邊緣。
為了幫助用戶選擇恰當(dāng)?shù)牡诙l邊緣,在定義了支柱的第一點(diǎn)1003后,當(dāng)指針進(jìn)入鄰近區(qū)域時(shí),以圖形方式對(duì)潛在的第二邊緣進(jìn)行表示,例如通過(guò)改變邊緣的線型、或者通過(guò)在邊緣的附近顯示一個(gè)圖標(biāo)來(lái)實(shí)現(xiàn)。只對(duì)將潛在地創(chuàng)建有效支柱的邊緣進(jìn)行表示,包括除了第一點(diǎn)定義的容器之外的容器上的平行邊緣。
另外,如果支柱是不對(duì)稱的,例如,如果由于某些原因支柱必須以不同方式處理與其連接的每一條邊緣,則上述支柱創(chuàng)建過(guò)程可用圖形方式對(duì)此進(jìn)行表示。例如,由于起點(diǎn)1003在第一容器1001內(nèi),終點(diǎn)在第二容器1002內(nèi),所以支柱操作以不同于邊緣1007的方式對(duì)第一容器的邊緣1006進(jìn)行處理,并且支柱可以以圖形方式對(duì)該情況進(jìn)行表示。
10.3在導(dǎo)向之間創(chuàng)建支柱導(dǎo)向之間的支柱創(chuàng)建類似于上述在容器邊緣之間的支柱創(chuàng)建。由于導(dǎo)向不像容器那樣具有寬度和高度,因此可能的用戶界面較少。另一種方法允許對(duì)支柱工具406進(jìn)行選擇,然后對(duì)第一導(dǎo)向進(jìn)行選擇,并且拖動(dòng)指示設(shè)備,以便將這樣創(chuàng)建的支柱附加到第二導(dǎo)向。
另一種實(shí)現(xiàn)方式允許對(duì)兩個(gè)導(dǎo)向進(jìn)行選擇,然后選擇支柱創(chuàng)建按鈕(圖標(biāo)),由此創(chuàng)建導(dǎo)向之間的不定向支柱。可以通過(guò)將導(dǎo)向的選擇順序考慮作為一種區(qū)分主動(dòng)邊緣和從動(dòng)邊緣的方式的另一種實(shí)現(xiàn)方式,來(lái)創(chuàng)建定向支柱。
10.4在導(dǎo)向和容器之間創(chuàng)建支柱在一種實(shí)現(xiàn)方式中,將導(dǎo)向拖動(dòng)到容器的一條邊緣上,會(huì)創(chuàng)建一個(gè)距離約束,它通常規(guī)定導(dǎo)向和邊緣之間為零距離。可以由支柱表示這個(gè)距離約束,因此,拖動(dòng)導(dǎo)向的方法(或者在構(gòu)造導(dǎo)向或容器期間,或者在編輯時(shí))可能實(shí)際上創(chuàng)建了一個(gè)支柱。
最好是,可以以與在容器邊緣之間創(chuàng)建支柱類似的方式(選擇工具、點(diǎn)擊邊緣或?qū)颉⑼蟿?dòng)、釋放),在導(dǎo)向和容器邊緣之間創(chuàng)建支柱。
10.5創(chuàng)建到達(dá)邊距的支柱可能也期望在頁(yè)邊距和導(dǎo)向或容器邊緣之間存在距離約束。支柱可用于上述目的。在一些實(shí)現(xiàn)方式中,這是不必要的,因?yàn)榭梢栽谙鄬?duì)于頁(yè)面的一條邊緣的位置對(duì)導(dǎo)向和容器邊緣進(jìn)行固定,其作用與支柱相同。頁(yè)邊距和導(dǎo)向或容器邊緣之間的支柱也是不必要的,因?yàn)榭梢詣?chuàng)建相對(duì)于所需頁(yè)邊距固定的導(dǎo)向,并且可能經(jīng)由支柱將其它導(dǎo)向和容器邊緣與其進(jìn)行鏈接。因此,支柱不必將頁(yè)邊距鏈接到導(dǎo)向或容器邊緣。
在另一種實(shí)現(xiàn)方式中,導(dǎo)向和容器邊緣可能不具有相對(duì)于頁(yè)邊距固定的能力。在這種情況下,最好使用支柱表示到頁(yè)邊距的距離約束。
10.6支柱和容器之間的交互作用支柱以多種方式與容器進(jìn)行交互作用。作為確定在文檔中將內(nèi)容放置在何處的方式,支柱的最簡(jiǎn)單操作是限制容器邊緣和導(dǎo)向所處的位置。然而,支柱到容器的連接還可能對(duì)容器的狀態(tài)進(jìn)行修改,特別是對(duì)容器的邊緣狀態(tài)進(jìn)行修改,以便將容器保持在允許的狀態(tài)集合之內(nèi)。
在具體實(shí)現(xiàn)方式中,保證將支柱附加到容器的規(guī)則為1.如果把支柱連接在兩條固定邊緣之間,則所選定邊緣變?yōu)椴还潭ǖ摹?br> 2.如果將支柱連接到兩條固定邊緣之間,則第二條選定邊緣變成不固定的,并且如果在與支柱方向相對(duì)應(yīng)的一維方向上容器的長(zhǎng)度是固定的,則與支柱垂直的兩條邊緣都是不固定的,而所述一維方向上的容器長(zhǎng)度保持不變。例如,如果第二條選定邊緣是固定寬度容器的垂直邊緣,則該容器的兩條垂直邊緣將變成不固定的,以便使該容器可水平移動(dòng),而其寬度保持不變。
3.如果附加到支柱的兩條容器邊緣和/或?qū)蜃兂晒潭ǖ?,則刪除該支柱。
4.如果用戶對(duì)固定容器邊緣或?qū)蜻M(jìn)行移動(dòng),則可以修改附加到它的任何支柱的長(zhǎng)度設(shè)置,以便使與該支柱相連的其它邊緣或?qū)虮3植蛔儭?br> 11.可變數(shù)據(jù)用戶界面103允許用戶將數(shù)據(jù)源和可變文檔模板相關(guān)聯(lián),并且設(shè)計(jì)該模板以便在數(shù)據(jù)源和模板進(jìn)行合并時(shí)生成有效文檔。合并是以交互方式在后臺(tái)執(zhí)行的,或者在軟件應(yīng)用程序121的版面引擎105組件要求時(shí)執(zhí)行的。
更佳地,以交互方式將數(shù)據(jù)源和可變文檔模板相關(guān)聯(lián),并且在用戶以交互方式瀏覽所合并的文檔時(shí),版面引擎105根據(jù)請(qǐng)求合并并且布置文檔頁(yè)面。另一種實(shí)現(xiàn)方式可以對(duì)數(shù)據(jù)和模板進(jìn)行合并,并且印刷所合并的文檔,而在合并處理期間不需要交互的用戶界面。另一種實(shí)現(xiàn)方式可以在后臺(tái)合并數(shù)據(jù)和模板,以生成合并的文檔,并且通過(guò)消息提醒用戶合并處理期間出現(xiàn)的問(wèn)題,其中該消息與用戶對(duì)合并文檔的瀏覽異步地出現(xiàn)。
11.1數(shù)據(jù)源選擇為了對(duì)可變文檔模板和數(shù)據(jù)源合并,必須將適當(dāng)?shù)臄?shù)據(jù)源和模板相關(guān)聯(lián)。實(shí)現(xiàn)上述關(guān)聯(lián)的一種方法是,使用圖13所示的數(shù)據(jù)源選擇窗口,其中該窗口構(gòu)成了用戶界面103的一部分。
圖13表示由UI應(yīng)用程序103在顯示屏114上顯示的GUI窗口,該窗口允許用戶以交互方式對(duì)數(shù)據(jù)源進(jìn)行選擇,其中數(shù)據(jù)源可以是數(shù)據(jù)庫(kù)、文件、多個(gè)數(shù)據(jù)庫(kù)的聯(lián)合、或某些其它信息源。如圖14所示,一旦選定了數(shù)據(jù)源,就將數(shù)據(jù)源和模板相關(guān)聯(lián)起來(lái),直到明確或隱含地解除關(guān)聯(lián)為止。
11.2數(shù)據(jù)過(guò)濾有可能數(shù)據(jù)源內(nèi)的所有數(shù)據(jù)對(duì)于特定合并操作而言不是都有效的。當(dāng)出現(xiàn)此類情況時(shí),對(duì)于用戶來(lái)說(shuō)可以有許多可能的方式來(lái)限制將要使用的數(shù)據(jù)的范圍。一種實(shí)現(xiàn)方式是允許算法數(shù)據(jù)過(guò)濾,以便限制將要使用數(shù)據(jù)的種類和數(shù)量。例如,可以選擇郵政編碼的范圍,以便只使用與所需地理區(qū)域相關(guān)聯(lián)的記錄來(lái)生成文檔。這類算法過(guò)濾在本領(lǐng)域中是非常公知的。另一種實(shí)現(xiàn)方式可以是,當(dāng)數(shù)據(jù)源和模板相關(guān)聯(lián)之后,用戶經(jīng)由用戶界面選擇并標(biāo)記將要使用的數(shù)據(jù)。
圖17表示在通過(guò)選擇菜單項(xiàng)將數(shù)據(jù)源和可變文檔模板相關(guān)聯(lián)之后,用戶能夠經(jīng)由用戶界面103的GUI301訪問(wèn)數(shù)據(jù)過(guò)濾操作的首選方法。
11.3數(shù)據(jù)排序與過(guò)濾有關(guān)的是對(duì)數(shù)據(jù)集進(jìn)行排序以便找到相關(guān)數(shù)據(jù)的能力。一種實(shí)現(xiàn)方式允許用戶基于用戶選擇的數(shù)據(jù)源的“關(guān)鍵字”變量,對(duì)數(shù)據(jù)源記錄的排序方法進(jìn)行選擇。按照所選關(guān)鍵字變量的字母表升序?qū)λ杏涗涍M(jìn)行排序。例如,如果關(guān)鍵字是變量“名稱(Name)”,則在執(zhí)行排序操作后,將會(huì)遇到名稱以字母A開始的記錄,然后遇到名稱以字母B開始的記錄(在英語(yǔ)文本的情況下)。圖15表示一個(gè)適合的用戶界面的一部分,該圖表示排序可作為數(shù)據(jù)源選擇處理的一部分。通過(guò)如圖17所示的菜單選擇,也有可能在關(guān)聯(lián)數(shù)據(jù)源之后進(jìn)行排序。
另一種實(shí)現(xiàn)方式可以允許用戶為不同種類的數(shù)據(jù)選擇排序方法,諸如數(shù)字的或語(yǔ)言特定的方法。另一種實(shí)現(xiàn)方式可以基于所存儲(chǔ)的信息的種類和所選的關(guān)鍵字變量,自動(dòng)對(duì)排序方法進(jìn)行選擇,在自動(dòng)選擇的方法是一個(gè)較差的選擇時(shí),可能需要借助忽略(override)機(jī)制。
11.4記錄瀏覽一個(gè)數(shù)據(jù)源包含許多記錄,每條記錄是相關(guān)信息的集合。例如,數(shù)據(jù)庫(kù)可能包含描述客戶的記錄,或者可能包含產(chǎn)品記錄。如果能夠?qū)?shù)據(jù)庫(kù)內(nèi)的記錄排序成為一個(gè)序列,并且由用戶進(jìn)行瀏覽,則這是有益的。
首選的瀏覽方法是,顯示可由指示設(shè)備313和鼠標(biāo)133激活的一組GUI按鈕,如圖18中的符號(hào)1805所示。每個(gè)按鈕要么在記錄序列中前進(jìn)或后退一條記錄,要么到達(dá)序列的開始或結(jié)尾處,要么跳過(guò)某幾條記錄。一種方法還包括一個(gè)由指示設(shè)備313/鼠標(biāo)133或者鍵盤132所激活的菜單,其中菜單顯示這些選項(xiàng)(如圖17所示),并且除此以外還允許用戶對(duì)特定編號(hào)的記錄進(jìn)行瀏覽。
當(dāng)瀏覽到特定記錄時(shí),軟件應(yīng)用程序121在顯示屏144上以某種方式顯示當(dāng)前記錄。通過(guò)對(duì)該記錄與可變文檔模板進(jìn)行合并,并且對(duì)該序列內(nèi)的當(dāng)前記錄的索引進(jìn)行顯示,可能產(chǎn)生上述處理。
11.5變量各數(shù)據(jù)源可由許多命名變量組成,其中命名變量適用于數(shù)據(jù)源內(nèi)的記錄。例如,客戶數(shù)據(jù)源可能具有用于客戶名稱和客戶地址的變量。它們是變量,原因在于盡管對(duì)每條記錄來(lái)說(shuō)變量名稱可能是相同的,但是每條記錄的值可以不同。
具有顯示變量的方法,以便使用戶可以對(duì)數(shù)據(jù)源內(nèi)的記錄進(jìn)行檢查,并且對(duì)與可變文檔模板相關(guān)聯(lián)的變量進(jìn)行選擇,是有用的。
用于顯示變量的首選方法是,如圖18所示,在浮動(dòng)窗口內(nèi),按名稱和當(dāng)前值垂直地列出每個(gè)變量。通過(guò)檢查當(dāng)前記錄,以及在數(shù)據(jù)源內(nèi)查找該記錄的各個(gè)變量的值,來(lái)對(duì)當(dāng)前值進(jìn)行確定??梢匀缜八瞿菢永糜涗洖g覽對(duì)當(dāng)前記錄進(jìn)行選擇。注意到,不是所有的值或變量名稱都需要顯示。如果信息太多以致于不適應(yīng)窗口時(shí),可以有瀏覽機(jī)制以便允許用戶對(duì)各變量或值進(jìn)行查看。另一種實(shí)現(xiàn)方式可以使用類似顯示,它是另一個(gè)窗口的一部分(換句話說(shuō),子窗口)。如果沒(méi)有與文檔模板相關(guān)聯(lián)的數(shù)據(jù)源,則窗口將不會(huì)包含變量,如圖16所示。
變量可以包含若干種類的數(shù)據(jù)。變量可以存儲(chǔ)文本值,或者可以存儲(chǔ)圖像。在下文中,這些變量分別稱為文本變量和圖像變量。
更佳地,數(shù)據(jù)源的變量具有一種類型的值,因此變量可顯示文本或圖像,但不能同時(shí)對(duì)其二者進(jìn)行顯示。不同的實(shí)現(xiàn)方式允許數(shù)據(jù)源的變量對(duì)每個(gè)記錄存儲(chǔ)不同類型的數(shù)據(jù)。例如,在一條記錄中產(chǎn)品描述變量可能包含文本描述,而在同一數(shù)據(jù)源的另一條記錄中同一變量具有圖像值。
11.6文本變量文本變量包括數(shù)據(jù)源內(nèi)的每條記錄的文本值。應(yīng)用程序121通過(guò)在數(shù)據(jù)源的變量列表內(nèi)在變量名稱附近放置不同的標(biāo)簽,如圖18中的標(biāo)簽1801所示,來(lái)向用戶通知變量是文本變量。另一種實(shí)現(xiàn)方式可能在變量名稱的附近對(duì)變量的值進(jìn)行顯示,以此作為通知變量類型的方式,如文本1802所示,盡管此方法本身不能保證是明確的,因?yàn)樵谝恍┣闆r中圖像數(shù)據(jù)可能看起來(lái)與文本數(shù)據(jù)相同。應(yīng)用程序121只使用該技術(shù)作為顯示變量數(shù)據(jù)的輔助方法,而不是作為區(qū)分變量類型的主要方法。
11.7圖像變量圖像變量包含在數(shù)據(jù)源的每條記錄中的圖像值。該值可以是壓縮格式或非壓縮格式的圖像數(shù)據(jù)、或者文件名稱、或者其它用于定位圖像資源的存取方法。應(yīng)用程序121通過(guò)在數(shù)據(jù)源的變量列表內(nèi)在變量名稱附近放置不同標(biāo)簽,如圖18中的標(biāo)簽1803所示,來(lái)向用戶通知該變量是圖像變量。另一種方法是在變量名稱的附近顯示變量的值,如文本1804所示,盡管該方法不能保證是明確的,因?yàn)閳D像文件名稱(例如)可能與文本數(shù)據(jù)相混淆。
11.8拖放到容器當(dāng)數(shù)據(jù)源的變量可見(jiàn)時(shí),具有用于允許用戶構(gòu)建可變文檔模板的方法,以便使用戶能夠了解存在哪些變量,是有用的。允許根據(jù)給定變量創(chuàng)建適當(dāng)類型的容器,也是有用的。
通過(guò)允許用戶使用鼠標(biāo)133和指示設(shè)備313直接操作變量列表中的變量(如圖19所示),應(yīng)用程序121經(jīng)由用戶界面103允許創(chuàng)建適當(dāng)類型的容器。用戶使用指示設(shè)備313選擇一個(gè)變量(例如用1902標(biāo)記的矩形區(qū)域中的一個(gè)),并且將其拖動(dòng)到設(shè)計(jì)表面上,然后釋放該選擇1906。這作為將創(chuàng)建適當(dāng)類型的容器并用該變量進(jìn)行初始化的信號(hào)。例如,按上述方式拖動(dòng)到設(shè)計(jì)表面上的文本變量(如標(biāo)簽1901所示),將生成一個(gè)文本容器,該文本容器顯示當(dāng)前記錄的變量值(如文本1903所示)。如果將圖像變量1904拖動(dòng)到設(shè)計(jì)表面上,生成一個(gè)圖像容器,該圖像容器顯示文件名稱1905和/或圖像本身,并根據(jù)用戶使用的設(shè)置進(jìn)行縮放、剪切和對(duì)齊處理。
這樣生成的文本容器的初始狀態(tài)是用戶可配置的,但是另一種方法是利用用戶釋放選擇時(shí)的位置作為線索,將該容器錨定到頁(yè)面上。
也許不可能使用該位置作為容器的精確位置,因?yàn)樵撐恢每赡苁菬o(wú)效的,諸如在設(shè)計(jì)窗口外或在頁(yè)面外(如果是無(wú)效的話),因此該位置可以是線索。容器可以以該位置為中心;或者其一角接近于該位置;或者在不違反其它約束的情況下,將該容器放置得盡可能靠近該位置,例如完全在頁(yè)面內(nèi);或者只將容器放置到一個(gè)默認(rèn)位置或隨機(jī)位置上,并且忽略該位置。有多種可能的實(shí)現(xiàn)方式對(duì)由于拖動(dòng)指示設(shè)備而新建的對(duì)象進(jìn)行定位。
應(yīng)用程序121還創(chuàng)建一個(gè)足夠大的容器,以便對(duì)拖動(dòng)到該設(shè)計(jì)上的變量的所有當(dāng)前記錄內(nèi)容進(jìn)行存儲(chǔ)。因此大段文本將生成一個(gè)大的文本容器。另一種方法可以預(yù)先計(jì)算被拖動(dòng)變量中的數(shù)據(jù)的中值大小,并且生成足以顯示中值大小的容器。其它方法能夠使用該方法的派生方法,以創(chuàng)建大到足以存儲(chǔ)最大記錄數(shù)據(jù)或最小記錄數(shù)據(jù)的容器,或使用某些其它算法。
另一種方法是將變量拖動(dòng)到設(shè)計(jì)空間中,然后為保存該變量值的容器清除一個(gè)矩形。再一種方法是選擇變量,然后為該容器清除一個(gè)矩形,而無(wú)需首先執(zhí)行拖動(dòng)操作。另一種備選方案是利用指示設(shè)備對(duì)變量表示進(jìn)行雙擊,并且使相應(yīng)容器在該設(shè)計(jì)中出現(xiàn)在隨機(jī)位置或由算法選擇的位置上。
另一種實(shí)現(xiàn)方式是一旦數(shù)據(jù)源和設(shè)計(jì)相關(guān)聯(lián)后,就使數(shù)據(jù)源內(nèi)的所有變量均在設(shè)計(jì)中出現(xiàn)作為容器,并且使用戶根據(jù)需要對(duì)容器進(jìn)行定位或刪除。按此方式創(chuàng)建的容器的初始位置和尺寸,取決于數(shù)據(jù)源內(nèi)的數(shù)據(jù)的排序以及各變量中內(nèi)容的相對(duì)尺寸。在此類實(shí)現(xiàn)方式中,如果表示特定變量的容器已經(jīng)存在,則把數(shù)據(jù)源和現(xiàn)有設(shè)計(jì)相關(guān)聯(lián),將不會(huì)為該變量創(chuàng)建容器。該方法不是首選方法,因?yàn)樗槐阌趯?duì)引用同一變量的多個(gè)容器進(jìn)行創(chuàng)建。
具體實(shí)現(xiàn)方式還支持?jǐn)?shù)據(jù)源變量與已經(jīng)創(chuàng)建的容器的鏈接。該方法允許用戶對(duì)設(shè)計(jì)進(jìn)行創(chuàng)建而不必首先關(guān)聯(lián)數(shù)據(jù)源。此類實(shí)現(xiàn)方式還可以提供任意順序的數(shù)據(jù)源的關(guān)聯(lián)、容器的創(chuàng)建、以及變量與容器的鏈接,以支持靈活的工作流。
此類方法還允許利用拖放機(jī)制對(duì)現(xiàn)有容器的內(nèi)容進(jìn)行修改,其中可利用鼠標(biāo)133和指針313的組合實(shí)現(xiàn)拖放機(jī)制,以便使拖動(dòng)變量到容器內(nèi)可以重新指定容器顯示的內(nèi)容,或者增加容器保存的內(nèi)容。例如,已構(gòu)建包含靜態(tài)文本“Dear”的容器,然后將名稱為“FirstName”的變量拖動(dòng)到該容器中,接著將名稱為“Last Name”的變量拖動(dòng)到該容器中。取決于操作模式和容器的設(shè)置,這可以產(chǎn)生一個(gè)對(duì)所有數(shù)據(jù)進(jìn)行顯示的容器,或者可以產(chǎn)生一個(gè)只對(duì)最后變量的值進(jìn)行顯示的容器。
11.9顯示和瀏覽多個(gè)文檔由于文檔是對(duì)文檔模板和數(shù)據(jù)源中的數(shù)據(jù)進(jìn)行合并的產(chǎn)物,因此作為單個(gè)合并操作的結(jié)果,能夠生成許多文檔??墒褂枚喾N方法對(duì)此類文檔進(jìn)行瀏覽和顯示。
一種實(shí)現(xiàn)方式包含許多顯示和瀏覽文檔的方式,并依賴于“現(xiàn)場(chǎng)校對(duì)”(在下文進(jìn)行描述),其中在現(xiàn)場(chǎng)校對(duì)中,在需要時(shí)將數(shù)據(jù)源的每條記錄與文檔模板進(jìn)行合并,以便生成文檔模板的約束和給定合并文檔的數(shù)據(jù)的視圖。對(duì)此類實(shí)現(xiàn)方式,取決于用戶設(shè)置和/或生成的文檔的性質(zhì),存在幾種可能的用戶界面。此類用戶界面的概要如下·在與字處理文檔或電子表格類似的垂直和/或水平組織的流動(dòng)文檔中,對(duì)每篇文檔進(jìn)行顯示,并且通過(guò)滾動(dòng)機(jī)制、指示設(shè)備和/或鍵盤對(duì)其進(jìn)行瀏覽??墒褂弥T如圖18中的按鈕1805之類的獨(dú)立機(jī)制,對(duì)數(shù)據(jù)源中的記錄進(jìn)行瀏覽。
·合并時(shí)每條記錄能夠產(chǎn)生有許多頁(yè)面的文檔。按垂直方式和/或水平方式對(duì)這些頁(yè)進(jìn)行組織并顯示??梢允褂锚?dú)立機(jī)制瀏覽數(shù)據(jù)源中的記錄。
·如果與每條記錄合并時(shí)文檔模板生成很少的頁(yè)面,則可以按垂直方式和/或水平方式對(duì)幾篇文檔進(jìn)行顯示。例如,如果每篇文檔在長(zhǎng)度上只有一個(gè)頁(yè)面,則有可能將所有文檔按線性順序排列,使用分窗系統(tǒng)顯示它們,并使用滾動(dòng)機(jī)制來(lái)瀏覽文檔。這將文檔內(nèi)的瀏覽和數(shù)據(jù)源的記錄之間的瀏覽映射到空間瀏覽上。
·如果每篇文檔具有一個(gè)或多個(gè)頁(yè)面,則可以按水平方式對(duì)其進(jìn)行組織,然后通過(guò)把每個(gè)后續(xù)文檔放置到表示前一條記錄的文檔的下面,能夠使用垂直方向遍歷數(shù)據(jù)源的記錄,因此使用一個(gè)方向?qū)ξ臋n空間進(jìn)行瀏覽??梢曰Q水平方向和垂直方向,其作用相似。
在上述每種情況下,可以有其它方法在記錄之間以及頁(yè)面和/或文檔之間進(jìn)行瀏覽,如通過(guò)按鈕、菜單等來(lái)實(shí)現(xiàn)。
在替換的實(shí)現(xiàn)方式中,可以獨(dú)立于合并文檔對(duì)文檔模板進(jìn)行顯示。只在“印刷預(yù)覽”形式下才生成合并文檔,其中在印刷預(yù)覽中,只能對(duì)單條記錄與模板的合并結(jié)果進(jìn)行顯示而不能進(jìn)行編輯。在另一種備選方案中,文檔模板可以是可見(jiàn)的,并且非交互的印刷預(yù)覽以及現(xiàn)場(chǎng)校對(duì)預(yù)覽也是可見(jiàn)的,其中現(xiàn)場(chǎng)校對(duì)預(yù)覽允許對(duì)文檔模板以及合并文檔的預(yù)覽進(jìn)行編輯。上述工作方式的其它組合也是可能的。
11.10校對(duì)在使用可變數(shù)據(jù)的屏上作業(yè)和印刷作業(yè)中,通過(guò)有效地對(duì)表示正在合并的記錄的全部范圍的記錄進(jìn)行查找,特別是從一組可變數(shù)據(jù)記錄中進(jìn)行查找的極端情況,能夠顯著提高生產(chǎn)率,以便使用戶理解最終的合并文檔將如何出現(xiàn)。
預(yù)覽和試印許多記錄,以查看不同大小的可變圖像和不同長(zhǎng)度的文本如何對(duì)合并文檔進(jìn)行影響,是有用的。用于印刷的最有用的樣本記錄包括·將如何印刷大部分的記錄;以及·有很少或很多正在顯示的內(nèi)容的記錄。
該原則的更復(fù)雜的擴(kuò)展包括·當(dāng)文本已經(jīng)縮小到很小或到達(dá)其最小尺寸時(shí);·當(dāng)不對(duì)任何可變數(shù)據(jù)文本進(jìn)行顯示時(shí);·當(dāng)圖像放大太大時(shí)(印刷質(zhì)量可能變差);以及·當(dāng)圖像的縱橫比失真太多時(shí)。
當(dāng)處理可變數(shù)據(jù)時(shí),文檔中記錄或版本的數(shù)目可能很大,并且沒(méi)有自動(dòng)校對(duì)機(jī)制,用戶必須對(duì)每條記錄進(jìn)行手工審查,以便檢查所有合并文檔的最終外觀是否是可接受的。例如,可能數(shù)據(jù)庫(kù)中只有一條記錄包含將會(huì)生成讓人不愉快的外觀的內(nèi)容,并且很難對(duì)該記錄進(jìn)行查找。對(duì)于記錄數(shù)目很大的可變數(shù)據(jù)作業(yè)來(lái)說(shuō)更是如此。
公開了一種預(yù)覽和試印可變數(shù)據(jù)印刷作業(yè)的有效方法,該方法確保了每篇文檔的最終外觀都是可接受的,并且將正確地進(jìn)行印刷。選擇有限數(shù)目的記錄用于進(jìn)行屏上預(yù)覽和/或試印,所述記錄表示最終印刷的所有其它記錄。通過(guò)對(duì)每條記錄的合并外觀進(jìn)行分析,并且通過(guò)使用預(yù)定規(guī)則集合確定對(duì)文檔外觀有最重要影響的記錄,來(lái)對(duì)這些記錄進(jìn)行選擇。
選擇性預(yù)覽和校對(duì)提供了包含極端情況在內(nèi)的輸出結(jié)果的輪廓,從而在印刷整個(gè)作業(yè)時(shí)用戶不會(huì)感到驚訝。顯示極端情況,即顯示具有最短和最長(zhǎng)顯示尺寸的那些記錄,是一種有價(jià)值并且經(jīng)濟(jì)的方法,可以推廣該方法以包括“典型”情況、最極端情況以及在中間和最極端情況之間的許多記錄的短列表,其中典型情況包括中間顯示尺寸。
11.11現(xiàn)場(chǎng)校對(duì)現(xiàn)場(chǎng)校對(duì)是在需要時(shí)以交互方式與可變文檔模板合并的可變數(shù)據(jù)對(duì)進(jìn)行顯示的過(guò)程。圖20表示圖形用戶界面2000,在該界面上將具有項(xiàng)目2010-2020的數(shù)據(jù)源的記錄與模板對(duì)進(jìn)行合并,以便說(shuō)明(2002)如果印刷的話該記錄的部分看上去會(huì)是什么樣。對(duì)額外邊界2004和顏色2006進(jìn)行添加,以便使可變文檔模板內(nèi)定義的約束是可見(jiàn)的,但并不印刷此類人為產(chǎn)物。
現(xiàn)場(chǎng)校對(duì)比單獨(dú)的合并過(guò)程更加有利,因?yàn)橥ㄟ^(guò)交互瀏覽很可能及早地發(fā)現(xiàn)模板設(shè)計(jì)中的錯(cuò)誤。
應(yīng)用程序121的具體實(shí)現(xiàn)方式應(yīng)用了現(xiàn)場(chǎng)校對(duì)。替換的實(shí)現(xiàn)方式應(yīng)用現(xiàn)場(chǎng)校對(duì)作為一個(gè)可選項(xiàng),或者根本不使用現(xiàn)場(chǎng)校對(duì)。
11.12選擇性校對(duì)選擇性校對(duì)是在可變數(shù)據(jù)印刷應(yīng)用程序121中僅查看選定記錄的一種方法,選定記錄要么是典型的普通文檔,要么最不像普通文檔。
在選擇性校對(duì)期間,如果用戶能夠規(guī)定要測(cè)量的多種類型的項(xiàng)目,則將是有用的。以下度量可以應(yīng)用于單獨(dú)的容器、鏈接容器的支柱、頁(yè)面、數(shù)據(jù)源中的記錄、或數(shù)據(jù)源中的變量。在以下選擇性校對(duì)的描述中這些一并稱為“設(shè)計(jì)項(xiàng)”。術(shù)語(yǔ)“合并尺寸”是指將來(lái)自數(shù)據(jù)源的記錄與可變文檔模板進(jìn)行合并后設(shè)計(jì)項(xiàng)的尺寸度量。稍后將論述各種尺寸度量。
當(dāng)激活選擇性預(yù)覽或選擇性校對(duì)時(shí),用戶以交互方式或者根據(jù)首選項(xiàng)設(shè)置選擇設(shè)計(jì)項(xiàng)。對(duì)每一條記錄和可變文檔模板進(jìn)行獨(dú)立合并。對(duì)于每一條記錄,對(duì)選定設(shè)計(jì)項(xiàng)的合并尺寸進(jìn)行記錄(存儲(chǔ))。將這些合并尺寸進(jìn)行比較,以找到選定設(shè)計(jì)項(xiàng)的合并尺寸是以下尺寸的記錄·最小值;·中值、平均值或集合中項(xiàng)的一些其它度量;以及·最大值。
為了找到最相關(guān)的記錄,應(yīng)用程序121檢查每條記錄的實(shí)際顯示尺寸,而不是僅僅檢查字符數(shù)。例如,“w”比“i”占據(jù)更多空間,并且其對(duì)于容器尺寸和文檔的整體外觀有更大的影響。
一旦識(shí)別了這些記錄后,就把它們提供給用戶用于進(jìn)行屏上預(yù)覽和/或印刷。
用戶還可以預(yù)覽或者試印合并文檔中的附加記錄,以提高他們對(duì)可變數(shù)據(jù)印刷作業(yè)中的所有記錄都將正確顯示的信心。最好是,使用與集合中項(xiàng)之間的偏差對(duì)設(shè)計(jì)項(xiàng)進(jìn)行排序,以便首先或以最顯著的方式向用戶提供其選定設(shè)計(jì)項(xiàng)的合并尺寸最不相同的記錄。
11.12.1最小和最大內(nèi)容尺寸設(shè)計(jì)項(xiàng)尺寸的有用度量是對(duì)其最小或者最大寬度、高度或內(nèi)容面積進(jìn)行考慮。關(guān)于獨(dú)立容器來(lái)說(shuō),上述度量容易計(jì)算。對(duì)于鏈接容器的支柱而言,寬度或者高度是有意義的,但二者不是同時(shí)有意義的,因此面積不是有意義的度量。對(duì)于獨(dú)立頁(yè)面而言,可使用容器的寬度之和、或容器的高度之和、或容器的面積之和作為度量。對(duì)于記錄而言,可使用為顯示該記錄所需的所有頁(yè)面的這些度量之和作為度量。對(duì)于變量而言,可使用部分或全部顯示該變量值的所有容器作為度量。還可以使用其它方法來(lái)選擇度量并計(jì)算度量之和。
11.12.2典型尺寸內(nèi)容尺寸的另一種有用度量是對(duì)其給定設(shè)計(jì)項(xiàng)的典型尺寸進(jìn)行考慮。典型尺寸可以是平均寬度或高度、或者平均面積、或者面積之和的平均值、或者寬度和高度的平方和的平均值、或者其它可能性。另一種度量是使用中值代替以上各項(xiàng)的平均值??梢允褂闷渌y(tǒng)計(jì)方法。
可以使用這些度量中的任何一個(gè)或全部來(lái)定位特定設(shè)計(jì)項(xiàng)的典型實(shí)例。例如,可以定位其特定容器面積與平均面積最接近的記錄。
11.12.3空白(white-space)尺寸空白是確定合并文檔集合內(nèi)的設(shè)計(jì)項(xiàng)的典型性的另一種有用度量。可以用多種方式定義空白。例如,可以將空白定義為由容器約束定義的容器面積與在和特定記錄合并時(shí)該容器內(nèi)的內(nèi)容面積之間的面積差,例如,當(dāng)容器具有最小尺寸并且內(nèi)容與該尺寸不相適應(yīng)時(shí),可以這樣進(jìn)行定義??蛇x地,可以將空白定義為容器的尺寸與該容器中內(nèi)容的尺寸在一維方向、諸如寬度或高度方向上的差。
空白的最大化類似但又不同于內(nèi)容尺寸的最小化,反之亦然。由于諸如最小尺寸之類的容器約束在計(jì)算中起作用,所以它們并不相同。例如,查找具有最大內(nèi)容面積的記錄與查找具有最小空白面積的記錄未必相同。
11.12.4最不同的尺寸最影響可變數(shù)據(jù)印刷的是對(duì)與眾不同的文檔進(jìn)行定位。因此需要異常性(unusualness)度量??梢杂枚喾N方式定義此度量。此度量的一個(gè)例子是計(jì)算與設(shè)計(jì)項(xiàng)的中值尺寸的最大偏差。將尺寸定義為寬度、高度、面積、寬度和高度之和、寬度和高度的平方和等中的某個(gè)度量。中值尺寸可以通過(guò)下列方式進(jìn)行計(jì)算對(duì)于數(shù)據(jù)源中的每一條記錄,檢查正在討論的各設(shè)計(jì)項(xiàng),查找該設(shè)計(jì)項(xiàng)的尺寸,然后查找這樣確定的所有尺寸的中值。接著計(jì)算各設(shè)計(jì)項(xiàng)的尺寸與中值尺寸的最大差值,從而能夠找到具有最大偏差的設(shè)計(jì)項(xiàng)。
圖21A和21B表示用于利用各文檔的容器的寬度和高度計(jì)算普通文檔和最大差異文檔的方法2100。方法2100可以執(zhí)行作為應(yīng)用程序121的子模塊。
該過(guò)程在步驟2101開始。首先,方法2100對(duì)數(shù)據(jù)源中的所有記錄進(jìn)行迭代,在步驟2102中從第一條記錄開始,并且使用由步驟2103、2104和2105構(gòu)成的循環(huán)過(guò)程,對(duì)該文檔內(nèi)的每個(gè)容器的位置和尺寸進(jìn)行計(jì)算。
在步驟2106中,方法2100通過(guò)在所有文檔上將寬度和高度進(jìn)行相加,然后除以文檔數(shù),來(lái)計(jì)算文檔模板中各容器的平均寬度和高度。
一旦已知文檔模板內(nèi)各容器的寬度和高度的平均值后,方法2100在步驟2107中從第一條記錄開始,并經(jīng)由由步驟2108、2113和2116構(gòu)成的循環(huán),對(duì)所有記錄進(jìn)行迭代處理。對(duì)于由步驟2108、2111和2115組成的另一個(gè)循環(huán)定義的文檔內(nèi)的每個(gè)容器,方法2100在步驟2109中對(duì)該容器的寬度與平均寬度的差值進(jìn)行計(jì)算,在步驟2110中該容器的高度與平均高度的差值對(duì)進(jìn)行計(jì)算。步驟2110計(jì)算上述每個(gè)值的平方,然后將它們加在一起,以便提供該文檔的數(shù)值。將結(jié)果求平方,意味著值距離平均值越遠(yuǎn)其權(quán)重越大。
對(duì)于任意給定文檔上的任意給定容器來(lái)說(shuō),一旦計(jì)算出上述數(shù)值后,就有可能計(jì)算出該容器與平均尺寸的接近程度。如果該容器具有最小值,則其最接近平均值。另一方面,如果該容器具有最大值,則其距離平均值最遠(yuǎn)。
如果用戶希望知道哪個(gè)文檔是最普通的文檔,或者哪個(gè)文檔是最大差異的文檔,則在步驟2112中將每篇文檔上的每個(gè)容器的值加在一起。由此形成一個(gè)列表,然后在步驟2114中對(duì)其進(jìn)行排序,從而結(jié)束方法2100。
具有最小值的文檔最接近各容器上的普通文檔。具有最大值的文檔最不像普通文檔。然后根據(jù)需要可以向用戶顯示許多此類文檔,諸如5個(gè)最差文檔、或者10個(gè)最差文檔。
其它方法能夠在不同于容器的寬度和高度的屬性上能夠執(zhí)行上述計(jì)算。其它有用的屬性是內(nèi)容的尺寸、字體大小(用于字體變大和縮小的容器)、文檔上的空白面積、支柱的長(zhǎng)度或者容器邊緣的位置。
11.13印前檢查(Pre-Flight Check)上述類型的尺寸度量可以用于發(fā)現(xiàn)典型的、非典型的或有問(wèn)題的設(shè)計(jì)項(xiàng)?!坝∏皺z查”是在可變數(shù)據(jù)印刷領(lǐng)域內(nèi)使用的一個(gè)術(shù)語(yǔ),用來(lái)描述自動(dòng)預(yù)印刷過(guò)程,該過(guò)程試圖在將整個(gè)作業(yè)提交給硬拷貝印刷之前發(fā)現(xiàn)合并文檔的問(wèn)題或其它特征。
上述檢查可以是簡(jiǎn)單地對(duì)將會(huì)可接受地印刷所有記錄進(jìn)行確定而不作其它額外工作,報(bào)告不存在問(wèn)題,或者以某種方式引起對(duì)有問(wèn)題記錄的注意。
更佳地,根據(jù)用戶的請(qǐng)求執(zhí)行印前檢查,并且提醒用戶該檢查是否發(fā)現(xiàn)問(wèn)題。如果發(fā)現(xiàn)問(wèn)題,則向用戶顯示遇到的第一個(gè)問(wèn)題,同時(shí)通過(guò)可視或文本方法向用戶顯示對(duì)該問(wèn)題特性的解釋。
另一個(gè)實(shí)現(xiàn)方式能夠發(fā)現(xiàn)并列出全部問(wèn)題,然后由用戶進(jìn)行調(diào)查。當(dāng)用戶編輯可變文檔模板時(shí),在后臺(tái)進(jìn)行上述檢查,以便在窗口或子窗口中提供問(wèn)題的連續(xù)更新列表。如果列表為空,則用表示沒(méi)有發(fā)現(xiàn)問(wèn)題的條目將其替代。這個(gè)后臺(tái)檢查可以僅僅在該軟件空閑時(shí)出現(xiàn),可以連續(xù)出現(xiàn),或者在其它時(shí)間點(diǎn)或情形時(shí)出現(xiàn)。
12.版面方法概述本公開的一個(gè)方面是在頁(yè)面上布置項(xiàng)目的方法。版面包括要布置的項(xiàng)目的集合,以及定義該項(xiàng)目在版面上的布置位置的一組規(guī)則或約束。描述了幾種版面方法,包括
1.用于定義版面的模型。版面模型定義了能夠出現(xiàn)在版面中的項(xiàng)目的類型和屬性,以及用來(lái)定義應(yīng)當(dāng)如何布置項(xiàng)目的允許規(guī)則或約束。利用數(shù)據(jù)結(jié)構(gòu)在計(jì)算機(jī)101的工作存儲(chǔ)器中存儲(chǔ)版面。以下將詳細(xì)說(shuō)明幾種版面模型。
2.創(chuàng)建和編輯版面的方法。它包括能夠用于創(chuàng)建版面的一組操作??梢杂密浖δ艿姆绞綄?shí)現(xiàn)此類操作,可以對(duì)軟件功能進(jìn)行調(diào)用以便根據(jù)版面模型構(gòu)建數(shù)據(jù)結(jié)構(gòu)。以下將詳細(xì)說(shuō)明此類操作。
3.計(jì)算版面中項(xiàng)目的位置和尺寸的方法。給定一個(gè)由一組項(xiàng)目和規(guī)則定義的版面,這種版面計(jì)算方法對(duì)根據(jù)規(guī)則如何布置項(xiàng)目進(jìn)行了規(guī)定,并且它可以由在計(jì)算機(jī)101上執(zhí)行的軟件105形成。以下將詳細(xì)說(shuō)明計(jì)算版面的方法。
最好是,將根據(jù)特定版面模型創(chuàng)建和編輯版面的方法、以及為該版面模型計(jì)算項(xiàng)目位置的方法合起來(lái)實(shí)現(xiàn)為一個(gè)軟件組件,即先前提及的版面引擎105。注意到,版面引擎105不包括用戶界面103??梢詫⒃S多不同的用戶界面同先前參照?qǐng)D1A所描述的版面引擎105一起使用。
13.版面模型概述版面模型包括基礎(chǔ)版面模型和基礎(chǔ)模型的幾種擴(kuò)展?;A(chǔ)版面模型定義了版面項(xiàng)目的基本屬性,以及用來(lái)定義版面的規(guī)則。還定義了幾條附加規(guī)則,用于擴(kuò)展基礎(chǔ)版面模型。規(guī)則的某些組合是益處的,因?yàn)樗鼈儺a(chǎn)生了簡(jiǎn)單的版面模型。其它組合是有益處的,因?yàn)樗鼈円子谑拱婷婺P偷挠脩衾斫狻?br> 以下說(shuō)明基礎(chǔ)版面模型和附加規(guī)則。將會(huì)說(shuō)明包含特定規(guī)則組合的幾種實(shí)現(xiàn)方式。
14.版面創(chuàng)建和編輯概述版面通常與文檔中的一個(gè)頁(yè)面部分相關(guān)聯(lián)。假定創(chuàng)建和編輯操作對(duì)最初被創(chuàng)建為空版面的版面起作用,并且創(chuàng)建和編輯操作是由用戶界面軟件103所調(diào)用的功能。在組合數(shù)據(jù)和文檔模板以生成文檔時(shí),也可以由服務(wù)器軟件執(zhí)行此類操作,而無(wú)需用戶的直接輸入。
更佳地,用于創(chuàng)建或編輯版面的操作不直接對(duì)應(yīng)于軟件用戶執(zhí)行的操作。通常由用戶界面軟件103或更佳地由另一層軟件,將用戶的單個(gè)操作翻譯成多個(gè)版面創(chuàng)建操作,其中另一層軟件向版面引擎105提供比版面引擎105直接支持的操作更高層的接口。
創(chuàng)建和編輯版面的方法至少包括以下操作1.添加項(xiàng)目;2.刪除項(xiàng)目;3.添加規(guī)則;以及4.刪除規(guī)則。
可以增加其它操作以便對(duì)項(xiàng)目或規(guī)則進(jìn)行修改。編輯操作的準(zhǔn)確形式取決于所使用的具體版面模型。許多不同形式都是可能的。以下詳細(xì)說(shuō)明此類操作。
在向版面中添加項(xiàng)目和規(guī)則時(shí),容易添加矛盾的規(guī)則組合,矛盾的含義是指無(wú)論怎樣放置項(xiàng)目均不能滿足所有規(guī)則。此類版面稱為過(guò)約束的。相反,規(guī)則的給定組合可能容許多種可能的解決方案,也是有可能。例如,該項(xiàng)目的多種可能放置方式均滿足所有規(guī)則。此類版面稱為欠約束的。最好確保每個(gè)版面只有一種解決方案。因此,除用于創(chuàng)建版面的操作之外,應(yīng)用程序121還包括用來(lái)確保只有一種解決方案的方法。該方法被合并到版面創(chuàng)建方法和用于計(jì)算版面的方法之中。
由于需要防止用戶對(duì)沒(méi)有解決方案或有多種解決方案的版面進(jìn)行創(chuàng)建,所以可以協(xié)同編輯操作一起執(zhí)行一致性和唯一性檢查??梢栽诿總€(gè)編輯操作后執(zhí)行此類檢查,以便測(cè)試該操作是否有效。如果無(wú)效,則不允許改變,并且立即向用戶提供適合的反饋。
因此,一致性和/或唯一性檢查可以被包括作為編輯操作的一部分??蛇x的,版面計(jì)算能夠確保為使用版面創(chuàng)建和編輯操作所創(chuàng)建的每個(gè)可能版面計(jì)算出一個(gè)定義明確的解決方案。
以下將詳細(xì)說(shuō)明確保版面解決方案存在并且唯一的方法。
15.版面計(jì)算概述對(duì)于每個(gè)版面模型,都有對(duì)版面項(xiàng)目的位置和尺寸進(jìn)行計(jì)算的相應(yīng)方法??梢栽趯?duì)于該問(wèn)題而言方便的任意二維坐標(biāo)系中對(duì)位置和尺寸進(jìn)行定義。
可以使用多種方法對(duì)版面項(xiàng)目的位置和尺寸進(jìn)行計(jì)算,它們包括1.樹遍歷方法;2.單形法;3.帶有二次目標(biāo)函數(shù)的改進(jìn)型單形法;以及4.基于圖的版面。
樹遍歷方法適用于由基礎(chǔ)版面模型所組成的有限版面模型。其它方法用于基礎(chǔ)模型的各種擴(kuò)展。對(duì)于解決各種優(yōu)化問(wèn)題來(lái)說(shuō),方法2、3和4是等效的。
優(yōu)化問(wèn)題包括一組約束和一個(gè)必須被最小化或最大化的目標(biāo)函數(shù)。在應(yīng)用程序121中,對(duì)版面進(jìn)行定義的某些規(guī)則表示約束,而一些規(guī)則用于對(duì)目標(biāo)函數(shù)進(jìn)行定義。
單形法是用于求解特定類型的優(yōu)化問(wèn)題的公知方法。單形法適合于與作為本公開一部分的一些版面模型一起使用。
單形法只支持線性目標(biāo)函數(shù),因此需要有一個(gè)嚴(yán)格的凸函數(shù),以確保版面有唯一的解決方案。通常使用二次目標(biāo)函數(shù),因?yàn)榇嬖谟糜谇蠼饩哂芯€性約束和二次目標(biāo)函數(shù)的優(yōu)化問(wèn)題的公知技術(shù)。最簡(jiǎn)單的方法是對(duì)單形法進(jìn)行修改。此類方法在求解優(yōu)化問(wèn)題領(lǐng)域中是非常公知的,并且可以使用任意方法,而并不背離本公開的范圍。
16.版面模型的詳細(xì)描述16.1基礎(chǔ)版面模型應(yīng)用程序121的一個(gè)方面包括一種布置版面項(xiàng)目集合的方法。通常,根據(jù)一組規(guī)則或約束將項(xiàng)目布置在矩形空間內(nèi)。圖22表示一組項(xiàng)目和約束的例子。
為了定義此類版面,描述了一個(gè)基礎(chǔ)版面模型?;A(chǔ)版面模型用于定義版面的基本結(jié)構(gòu)、以及對(duì)版面可變性的限制。例如,使用基礎(chǔ)版面模型,來(lái)定義版面項(xiàng)目之間的基本關(guān)系,設(shè)置項(xiàng)目的最小和最大尺寸,以及對(duì)項(xiàng)目的位置設(shè)置限制。使用基礎(chǔ)版面模型的擴(kuò)展,來(lái)提供對(duì)版面的精確控制。基礎(chǔ)版面模型的優(yōu)點(diǎn)是1.版面設(shè)計(jì)者易于理解諸如剛性對(duì)象和可移動(dòng)對(duì)象之類的物理模擬;2.易于通過(guò)圖形用戶界面進(jìn)行表示和操作;3.軟件表示簡(jiǎn)單,可以通過(guò)明確定義的操作集合來(lái)進(jìn)行操作。
如圖22所示,在基礎(chǔ)版面模型中,版面包括一個(gè)或多個(gè)被稱為盒子的矩形版面項(xiàng)2201;由水平邊緣2215和垂直邊緣2216定義的、用于放置盒子的版面矩形;以及零條或多條規(guī)則2207、2211。
通常,將要在其中布置項(xiàng)目的矩形空間,表示文檔中一個(gè)頁(yè)面或一個(gè)頁(yè)面一部分的可印刷區(qū)域,其中每個(gè)項(xiàng)目表示一個(gè)圖形圖像或一個(gè)文本塊,盡管在基礎(chǔ)版面模型的某些應(yīng)用中該版面矩形可能并不存在。
版面中每個(gè)盒子的大小和位置,由它的外接矩形的四條邊緣的位置來(lái)定義??梢杂冒婷鎲挝灰?guī)定大小和位置,其中版面單位通常與諸如毫米之類的絕對(duì)度量單位有關(guān)。規(guī)則2207、2209、2211和2213對(duì)項(xiàng)目或版面矩形的各條邊緣之間的關(guān)系進(jìn)行定義。規(guī)則可以定義同一個(gè)項(xiàng)目的相對(duì)邊緣之間的關(guān)系,諸如規(guī)則2211、2213;可以定義某個(gè)項(xiàng)目的邊緣與另一個(gè)項(xiàng)目的邊緣之間的關(guān)系,諸如規(guī)則2209;可以定義某個(gè)項(xiàng)目的邊緣與版面矩形的一條邊緣之間的關(guān)系,諸如規(guī)則2207;或者,可以定義版面矩形的相對(duì)邊緣之間的關(guān)系,諸如規(guī)則2217。在這個(gè)說(shuō)明書中,邊緣是指項(xiàng)目或?qū)ο蟮淖筮吘?、右邊緣、頂邊緣或底邊緣?br> 在基礎(chǔ)版面模型中,將每個(gè)盒子的邊緣與稱為“對(duì)齊標(biāo)記”或僅稱為“標(biāo)記”的抽象版面項(xiàng)相關(guān)聯(lián)。還把版面區(qū)域的邊緣與標(biāo)記相關(guān)聯(lián)。因此,基礎(chǔ)版面模型支持兩種類型的版面項(xiàng)盒子和標(biāo)記。
術(shù)語(yǔ)“對(duì)齊標(biāo)記”是對(duì)印刷機(jī)所使用的對(duì)準(zhǔn)標(biāo)記的抽象和概括,以使將要印刷的多幅圖像彼此頂端對(duì)齊。有兩種類型的對(duì)齊標(biāo)記水平標(biāo)記和垂直標(biāo)記。水平標(biāo)記表示頁(yè)面或版面上的垂直位置,并且可以看作是具有不確定長(zhǎng)度或無(wú)限長(zhǎng)的水平線。垂直標(biāo)記表示頁(yè)面上的水平位置,并且在概念上是具有不確定長(zhǎng)度或無(wú)限長(zhǎng)的垂直線。
通常并不希望對(duì)對(duì)齊標(biāo)記進(jìn)行印刷--它們僅僅用于對(duì)盒子之間的定位和關(guān)系進(jìn)行定義。用戶界面可采用多種方式顯示對(duì)齊標(biāo)記(或者根本不顯示)。
將版面與二維坐標(biāo)系相關(guān)聯(lián)。版面引擎105的任務(wù)是,確定所選坐標(biāo)系中每個(gè)標(biāo)記的位置或坐標(biāo)。垂直標(biāo)記具有水平坐標(biāo),而水平標(biāo)記具有垂直坐標(biāo)。更佳地,通過(guò)向一個(gè)指定的垂直標(biāo)記和一個(gè)指定的水平標(biāo)記分配坐標(biāo),對(duì)坐標(biāo)系進(jìn)行規(guī)定。通過(guò)相對(duì)于所指定標(biāo)記的偏移值,確定所有其它標(biāo)記的坐標(biāo)。如果版面是具有固定尺寸的,則用于規(guī)定坐標(biāo)系的標(biāo)記通常是版面矩形的兩條邊緣。
盒子是通常與某些文本或圖形相關(guān)聯(lián)的矩形區(qū)域。在計(jì)算版面時(shí),可利用盒子對(duì)容器進(jìn)行表示。每個(gè)盒子與四個(gè)標(biāo)記相關(guān)聯(lián),其中四個(gè)標(biāo)記對(duì)盒子的邊緣進(jìn)行定義。盒子實(shí)質(zhì)上是四個(gè)標(biāo)記之間的關(guān)系。在基礎(chǔ)版面模型的擴(kuò)展中,可以將附加標(biāo)記與盒子相關(guān)聯(lián)。在基礎(chǔ)版面模型中,完全用與盒子的邊緣相關(guān)聯(lián)的標(biāo)記來(lái),對(duì)用于確定盒子的位置和尺寸的版面規(guī)則進(jìn)行描述,但是在模型擴(kuò)展中,將附加規(guī)則與盒子相關(guān)聯(lián)。
盒子和標(biāo)記還用于對(duì)與文檔中出現(xiàn)的對(duì)象的形狀和位置不直接相對(duì)應(yīng)的形狀和位置進(jìn)行表示。例如,也用盒子表示項(xiàng)目的理想尺寸,該尺寸可能與版面引擎105所計(jì)算的尺寸不同??梢允褂脴?biāo)記來(lái)定義有關(guān)其它項(xiàng)目放置的限制,例如,可以將標(biāo)記放置在表示頁(yè)邊距的位置上,并且可以添加規(guī)則以確保版面引擎105不會(huì)把項(xiàng)目放置到頁(yè)邊距之外。
在基礎(chǔ)模型中,每條規(guī)則表示垂直偏移2209或者水平偏移2213,并且每條規(guī)則具有規(guī)定的大小2207,或者具有未知的非負(fù)大小2213(如虛線所示)。固定偏移規(guī)則對(duì)版面中的兩個(gè)標(biāo)記之間的垂直或水平偏移的大小和方向進(jìn)行了規(guī)定。未知偏移約束只規(guī)定兩個(gè)標(biāo)記之間偏移的方向。例如,偏移2211指示盒子2219的邊緣2221必須總在同一盒子的邊緣2223之上。未知偏移約束的大小,表示需要由版面方法計(jì)算的值。
因此,在基礎(chǔ)模型中,有兩種類型的規(guī)則固定偏移規(guī)則和非負(fù)偏移規(guī)則。每種類型的偏移規(guī)則定義了與一對(duì)標(biāo)記的相對(duì)位置相關(guān)的約束。
固定偏移規(guī)則指示第一標(biāo)記位置和第二標(biāo)記位置之間的偏移必須具有規(guī)定的值。例如,給定標(biāo)記m和n,固定偏移規(guī)則是由fixed(m,n,d)所表示的約束,其由以下等式定義pos(n)-pos(m)=d,其中d為非負(fù)數(shù)。將支柱412表示為版面引擎內(nèi)的固定偏移規(guī)則。而且,如果容器具有固定寬度,則通過(guò)添加與表示該容器的左邊緣和右邊緣的標(biāo)記相關(guān)的固定偏移約束,將其指示給版面引擎。類似地,如果容器具有固定高度,則通過(guò)在表示該容器的頂邊緣和底邊緣的標(biāo)記之間的固定偏移約束,在版面引擎中進(jìn)行表示。
距離d表示從一個(gè)標(biāo)記到另一個(gè)標(biāo)記的偏移,并且pos(u)表示標(biāo)記u的位置。水平標(biāo)記的位置是從版面坐標(biāo)系的原點(diǎn)到該標(biāo)記的垂直距離。垂直標(biāo)記的位置是從版面坐標(biāo)系的原點(diǎn)到該標(biāo)記的水平距離??梢允褂萌魏伪阌诙x版面的坐標(biāo)系。在固定偏移規(guī)則中,兩個(gè)標(biāo)記必須是相同方向的。在這一點(diǎn)上,標(biāo)記必須同為水平標(biāo)記或者同為垂直標(biāo)記。
注意到,上下文中的術(shù)語(yǔ)“固定的”,是指作為版面計(jì)算方法的輸入的值,并且版面引擎105不能對(duì)其進(jìn)行改變。
非負(fù)偏移規(guī)則是這樣一個(gè)約束,該約束規(guī)定了兩個(gè)標(biāo)記之間的偏移是非負(fù)的。標(biāo)記m和標(biāo)記n之間的非負(fù)規(guī)則,是由non-negative(m,n)所表示的約束,并且其由以下不等式定義pos(n)≥pos(m)。
在非負(fù)偏移規(guī)則中,兩個(gè)標(biāo)記必須是相同方向的。例如,標(biāo)記必須同為水平標(biāo)記或者同為垂直標(biāo)記。
在基礎(chǔ)版面模型中,水平規(guī)則獨(dú)立于垂直約束,因此可以將計(jì)算版面的問(wèn)題分成兩個(gè)獨(dú)立問(wèn)題。圖23僅僅表示與圖22所示的版面相對(duì)應(yīng)的垂直偏移。在該實(shí)現(xiàn)方式中,用邏輯單位對(duì)距離進(jìn)行規(guī)定。在圖23中,固定偏移規(guī)則已經(jīng)標(biāo)記了以邏輯單位表示的偏移大小。在這種情況下,為了簡(jiǎn)單起見(jiàn)假定每個(gè)邏輯單位相當(dāng)于1mm。邏輯單位可以是任何對(duì)于該應(yīng)用來(lái)說(shuō)方便的尺寸,但是通常一個(gè)邏輯單位會(huì)小于最小可獨(dú)立尋址的印刷點(diǎn)??刹捎萌鐖D24所示的有向圖2400表示如圖23所示的垂直偏移規(guī)則。在圖24中,每個(gè)頂點(diǎn)2401表示一個(gè)水平標(biāo)記,并且每個(gè)箭頭2403表示一條規(guī)則。用實(shí)線表示固定偏移規(guī)則(例如2402),并且用虛線表示非負(fù)偏移規(guī)則(例如2405)。在圖24中,例如,在根節(jié)點(diǎn)2404和終端節(jié)點(diǎn)2406之間的箭頭2402,表示圖23中的固定偏移規(guī)則2217,并且該規(guī)則定義了圖22中的版面矩形的高度。另外,非負(fù)偏移規(guī)則在由固定偏移規(guī)則所建立的邊界之內(nèi)是可變的。例如,增加h1的值,將使得h2和h3的值相應(yīng)減小,其二者均依賴于h1的終端節(jié)點(diǎn)2408。
通常,版面區(qū)域是具有固定大小的。通過(guò)將與具有固定偏移規(guī)則的版面區(qū)域的相對(duì)邊緣相關(guān)聯(lián)的標(biāo)記進(jìn)行連接,對(duì)其進(jìn)行規(guī)定。在某些應(yīng)用程序中,還使版面引擎105根據(jù)版面區(qū)域的邊緣和版面內(nèi)的項(xiàng)目之間的關(guān)系,計(jì)算版面矩形的大小。通常,向該版面中添加規(guī)則,以便確保表示可印刷項(xiàng)目的盒子被限制在版面區(qū)域內(nèi),但是在某些實(shí)現(xiàn)方式中,這可能并不適用,并且可能不需要版面區(qū)域矩形。在基礎(chǔ)版面模型的某些應(yīng)用中,可能缺少版面矩形。
16.2基礎(chǔ)版面模型的替換表示在另一種實(shí)現(xiàn)方式中,以與上述方法不同但等效的方式,對(duì)基礎(chǔ)版面模型進(jìn)行表示。這里,僅僅使用一種類型的規(guī)則、即最小偏移規(guī)則對(duì)基礎(chǔ)版面模型進(jìn)行表示。
最小偏移規(guī)則規(guī)定了在第一標(biāo)記和第二標(biāo)記之間的最小允許偏移。在標(biāo)記m和標(biāo)記n之間的最小偏移規(guī)則,是由min(m,n,d)所表示的約束,并且其由以下不等式定義pos(n)-pos(m)≥d,其中d是一個(gè)表示最小允許偏移的數(shù)。在該表示中,數(shù)d可以是正數(shù)、負(fù)數(shù)或零,并且與最小偏移規(guī)則相關(guān)的兩個(gè)標(biāo)記必須具有相同方向(即,同為水平標(biāo)記或者同為垂直標(biāo)記)。
在另一種等效實(shí)現(xiàn)方式中,可以使用最大偏移規(guī)則代替最小偏移規(guī)則。由max(m,n,d)所表示的最大偏移規(guī)則,由以下不等式定義pos(n)-pos(m)≤d,其中d是一個(gè)表示最大允許偏移的數(shù)。
為了證明只需要以上兩類規(guī)則中的一類規(guī)則,注意到,由于以下恒等式存在,所以任意最大偏移規(guī)則可以由等效的最小偏移規(guī)則所代替max(m,n,d)≡min(n,m,-d)。
為了證明基礎(chǔ)版面模型的替換表示與先前描述的表示等效,注意到,如以下恒等式所示的那樣,非負(fù)偏移規(guī)則是最小偏移規(guī)則的特例nonnegative(m,n)≡min(m,n,0),并且,正如以下恒等式所示,任意固定偏移規(guī)則等效于兩個(gè)最小偏移規(guī)則fixed(m,n,d)≡min(m,n,d)和max(m,n,d)≡min(m,n,d)和min(n,m,-d)。
相反,任意最小偏移規(guī)則可以使用額外標(biāo)記t、固定偏移規(guī)則以及非負(fù)偏移來(lái)進(jìn)行表示,如以下恒等式所示min(m,n,d)≡fixed(m,t,d)和nonnegative(t,n),如果d>0
≡fixed(t,m,-d)和nonnegative(n,t),如果d<0,其中t為一個(gè)額外標(biāo)記,用于標(biāo)記相對(duì)于m的n的允許位置的限制。在d=0的特殊情況下,可以用m替代t,并且固定偏移規(guī)則是冗余的。
因此,存在許多允許對(duì)最小和最大偏移、固定偏移和非負(fù)偏移進(jìn)行規(guī)定的等效表示。最小偏移規(guī)則可以用于表示所有這些類型的規(guī)則,因?yàn)樵撘?guī)則簡(jiǎn)化了用于表示版面的數(shù)據(jù)結(jié)構(gòu)、以及用于處理該數(shù)據(jù)結(jié)構(gòu)的軟件。
更佳地,使用有向圖表示符合基礎(chǔ)版面模型的版面,其中圖的每個(gè)頂點(diǎn)對(duì)應(yīng)于一個(gè)標(biāo)記,并且通過(guò)一個(gè)數(shù)字標(biāo)記圖的每條邊緣,其中數(shù)字表示從由該邊緣的源頂點(diǎn)表示的標(biāo)記到由該邊緣的目的頂點(diǎn)表示的標(biāo)記之間的最小允許偏移。因此,對(duì)于任何給定版面,可生成一個(gè)圖形表示,其中由圖中的一個(gè)相應(yīng)頂點(diǎn)表示該版面中的每個(gè)標(biāo)記,并且由一條相應(yīng)的有向邊緣表示每個(gè)最小偏移規(guī)則。在基礎(chǔ)版面模型中,可以在其表示中忽略盒子,因?yàn)槊總€(gè)盒子完全由與其邊緣相對(duì)應(yīng)的標(biāo)記來(lái)進(jìn)行描述。
有多種方法在計(jì)算機(jī)的存儲(chǔ)器中表示一個(gè)圖形,并且可以使用任何合適的表示。通常,為了進(jìn)行顯示和編輯,采用除圖形表示之外的形式對(duì)包括項(xiàng)目和約束的版面進(jìn)行存儲(chǔ),是方便的,因此在交互式應(yīng)用程序中,通常不總是采用圖形的形式來(lái)對(duì)版面進(jìn)行直接表示。圖形表示可以包括根據(jù)需要用數(shù)字或其它信息對(duì)圖形的邊緣和頂點(diǎn)進(jìn)行標(biāo)記的方法。
圖33A-33C顯示了如何可以只使用固定偏移規(guī)則和非負(fù)偏移規(guī)則以及只使用最小偏移規(guī)則來(lái)表示容器的最小和最大高度。在圖33A中,顯示了一個(gè)容器3300,它具有40個(gè)單位的最小允許高度、和100個(gè)單位的最大高度。通過(guò)一個(gè)其頂邊緣與標(biāo)記3301相關(guān)聯(lián)并且其底邊緣與標(biāo)記3303相關(guān)聯(lián)的盒子,在版面引擎105中對(duì)容器3300進(jìn)行表示。圖33B中的有向圖具有四個(gè)頂點(diǎn)3305、3307、3309和3311。頂點(diǎn)3305表示標(biāo)記3301,頂點(diǎn)3307表示標(biāo)記3303。其它兩個(gè)頂點(diǎn)3309和3311表示額外標(biāo)記,該額外標(biāo)記對(duì)標(biāo)記3303相對(duì)于標(biāo)記3301的允許移動(dòng)范圍進(jìn)行了定義。使用由該圖中的實(shí)線邊緣3317所表示的固定偏移規(guī)則,相對(duì)于標(biāo)記3301對(duì)以上標(biāo)記的位置進(jìn)行固定。使用由該圖中的虛線邊緣3319所表示的兩個(gè)非負(fù)偏移規(guī)則,以便將標(biāo)記3303的位置限制在兩個(gè)額外標(biāo)記3311和3309之間。圖33C中的第二有向圖表示只使用兩個(gè)頂點(diǎn)3313和3315的相同約束,其中頂點(diǎn)3313表示標(biāo)記3301,并且頂點(diǎn)3315表示標(biāo)記3303。使用兩條邊緣3319來(lái)表示最小偏移規(guī)則。從頂點(diǎn)3313到3315的邊緣,表示最小值為40的最小偏移規(guī)則。從頂點(diǎn)3315到3313的邊緣,表示具有最小偏移-100的最小偏移規(guī)則。這等效于最大值為100的從3313到3315的最大偏移規(guī)則。
16.3形狀規(guī)則在可變數(shù)據(jù)印刷應(yīng)用程序中,能夠定義盒子的寬度和高度之間的關(guān)系,是方便的。但在基礎(chǔ)版面模型中無(wú)法實(shí)現(xiàn)。
例如,一個(gè)盒子可以對(duì)應(yīng)于將要被插入到版面中的一幅圖像,并且可能需要對(duì)圖像的大小進(jìn)行調(diào)整,以便與可用空間相適應(yīng)。這種情況下,最好是能夠?qū)凶拥目v橫比進(jìn)行規(guī)定,并且使版面引擎105根據(jù)該版面中其它項(xiàng)目的尺寸確定盒子的最佳大小。另一個(gè)例子是,盒子可以對(duì)應(yīng)于未規(guī)定其高度和寬度的文本塊的外接框,因此需要由版面引擎105對(duì)其高度和寬度進(jìn)行確定。
可以擴(kuò)展基礎(chǔ)版面模型,以便允許稱為形狀規(guī)則的附加規(guī)則,該規(guī)則定義盒子的寬度和高度之間的關(guān)系,并且包括兩種類型的形狀規(guī)則幅形(aspect)規(guī)則和文本規(guī)則。
幅形規(guī)則規(guī)定盒子必須具有特定的縱橫比。文本規(guī)則規(guī)定盒子的外形應(yīng)該是特定文本框的外接框。通過(guò)專用模塊處理文本的版面。稍后說(shuō)明文本版面的例子。
以下詳細(xì)描述形狀規(guī)則的行為,因?yàn)槠錅?zhǔn)確的行為取決于計(jì)算版面所用的方法。取決于為計(jì)算項(xiàng)目的位置和尺寸所選的方法,在不同的實(shí)現(xiàn)方式中,上述規(guī)則可以具有不同的行為。
16.4相同偏移規(guī)則在規(guī)定版面時(shí)便于擁有的另一類約束,是能夠規(guī)定兩個(gè)距離相等的約束。利用由標(biāo)記m、n、s和t的equal(m,n,s,t)所表示的相同偏移規(guī)則,來(lái)對(duì)該約束進(jìn)行規(guī)定,其中m和n具有相同方向,s和t具有相同方向。通過(guò)以下等式對(duì)相同偏移規(guī)則equal(m,n,s,t)進(jìn)行定義offset(m,n)=offset(s,t),其中offset(a,b)表示從第一標(biāo)記a到第二標(biāo)記b的偏移,從而offset(a,b)=pos(b)-pos(a)。
通過(guò)添加相同偏移規(guī)則,可以擴(kuò)展基礎(chǔ)版面模型。在版面模型中允許相同偏移規(guī)則,能夠非常容易地對(duì)過(guò)約束的版面進(jìn)行創(chuàng)建。
并非所有實(shí)現(xiàn)方式都支持相同偏移規(guī)則,因?yàn)橄嗤埔?guī)則需要更通用的版面方法,該方法不如版面引擎105中首選方法有效。更佳地,版面引擎105包括下面定義的最小化距離規(guī)則,取代相同偏移規(guī)則作為用于使各個(gè)偏移相等的備選方法。
16.5涉及盒子的中心的規(guī)則在基礎(chǔ)版面模型中,只有盒子的邊緣參與版面規(guī)則。還希望能夠?qū)凶拥闹行闹g的關(guān)系進(jìn)行定義。在基礎(chǔ)版面模型的擴(kuò)展中,每個(gè)盒子總是與兩個(gè)附加標(biāo)記相關(guān)聯(lián)。這些標(biāo)記包括通過(guò)盒子的中心的垂直標(biāo)記和水平標(biāo)記。
在允許相同偏移規(guī)則的模型中,通過(guò)使用相同偏移規(guī)則,可以把標(biāo)記和每個(gè)盒子的中心相關(guān)聯(lián),因此并不需要向模型中增加規(guī)則來(lái)支持涉及盒子中心的規(guī)則。
16.6固定中心規(guī)則作為涉及盒子中心的規(guī)則的特殊情況,在另一種實(shí)現(xiàn)方式中,存在對(duì)基礎(chǔ)版面模型的擴(kuò)展,該擴(kuò)展允許相對(duì)于頁(yè)面、或者相對(duì)于頁(yè)面或版面區(qū)域的邊緣,對(duì)每個(gè)盒子的中心的垂直或水平位置進(jìn)行固定。這個(gè)特殊情況避免了對(duì)相同偏移規(guī)則的需求,因此可以使用更簡(jiǎn)單的計(jì)算版面的方法。
可以把固定中心規(guī)則認(rèn)為是與盒子的相對(duì)邊緣相關(guān)聯(lián)的一對(duì)標(biāo)記之間的關(guān)系,因此不需要向版面中添加通過(guò)盒子中心的附加標(biāo)記。
16.7最大化偏移和最小化偏移規(guī)則到目前為止所描述的基礎(chǔ)模型版面規(guī)則和附加規(guī)則,對(duì)于規(guī)定準(zhǔn)確約束、諸如項(xiàng)目的精確尺寸和項(xiàng)目之間的間隔,以及對(duì)于規(guī)定項(xiàng)目的位置和尺寸變化性限制來(lái)說(shuō),是有用的。借助上述規(guī)則,能夠容易地實(shí)現(xiàn)對(duì)過(guò)約束或欠約束的版面進(jìn)行定義。為了更精確地控制版面,一種好的策略是,使用基礎(chǔ)模型規(guī)則以及諸如相同偏移規(guī)則和固定中心規(guī)則之類的其它精確規(guī)則,來(lái)定義欠約束的版面,并且添加附加的、更靈活的規(guī)則,用于對(duì)項(xiàng)目的尺寸和位置的首選項(xiàng)進(jìn)行規(guī)定。為此,可使用兩種附加類型的規(guī)則最小化和最大化規(guī)則。
到目前為止所定義的規(guī)則對(duì)版面方法必須遵守的約束進(jìn)行定義。與上面定義的規(guī)則不同,最小化和最大化規(guī)則為版面方法定義目標(biāo)函數(shù)。
由minimizeoffset(m,n)所表示的最小化偏移規(guī)則,向版面引擎105指示從標(biāo)記m到標(biāo)記n的偏移應(yīng)該盡可能小(即,為負(fù))。以下詳細(xì)定義該規(guī)則的行為,因?yàn)槠淙Q于計(jì)算版面的方法。
由maximizeoffset(m,n)所表示的最大化偏移規(guī)則,向版面引擎105指示從標(biāo)記m到標(biāo)記n的偏移應(yīng)該盡可能大(即,為正)。以下詳細(xì)定義該規(guī)則的行為,因?yàn)槠淙Q于計(jì)算版面的方法。
最小化偏移和最大化偏移規(guī)則對(duì)于包括在線性目標(biāo)函數(shù)中來(lái)說(shuō),是有用的,并且由此可以被包括在適合使用單形法進(jìn)行計(jì)算的版面模型中。如果使用線性目標(biāo)函數(shù),則每個(gè)最小化規(guī)則或最大化規(guī)則貢獻(xiàn)一個(gè)線性項(xiàng)給目標(biāo)函數(shù)。在這種情況下,這兩類規(guī)則中只有一類規(guī)則是必需的,因?yàn)橐?guī)則minimizeoffset(m,n)等效于maximizeoffset(n,m)。因此,包括這些類規(guī)則的版面模型的數(shù)據(jù)表示只需要對(duì)其中一類規(guī)則進(jìn)行支持。例如,數(shù)據(jù)結(jié)構(gòu)可能只支持最小化偏移規(guī)則,并且使用等效的最小化偏移規(guī)則對(duì)每個(gè)最大化偏移規(guī)則進(jìn)行表示。
16.8最小化距離規(guī)則最大化偏移和最小化偏移規(guī)則的使用,可能產(chǎn)生其中兩個(gè)標(biāo)記之間的理想間隔為無(wú)窮大的版面,因此上述規(guī)則并不總是產(chǎn)生明確定義的版面。為了避免此問(wèn)題,可以用其它類型的規(guī)則代替最大化偏移規(guī)則和最小化偏移規(guī)則。可選地,利用由minimizedist(m,n)所表示的稱為最小化距離規(guī)則的另一類規(guī)則,來(lái)對(duì)距離進(jìn)行規(guī)定。例如,兩個(gè)標(biāo)記m和n之間的偏移的絕對(duì)值應(yīng)盡可能小。最小化距離規(guī)則僅僅應(yīng)用于具有相同方向的標(biāo)記之間。在具體實(shí)現(xiàn)方式中,使用下文描述的稱為首選偏移規(guī)則的另一類規(guī)則代替最小化距離規(guī)則。
注意到,通過(guò)使用以下恒等式,可以使用固定偏移規(guī)則、最小化和最大化偏移規(guī)則以及非負(fù)偏移規(guī)則對(duì)最小化距離規(guī)則進(jìn)行近似minimizedist(m,n)≡minimizeoffset(m,t)和minimizeoffset(n,t)和nonnegative(m,t)和nonnegative(n,t),其中t是添加到版面中的額外標(biāo)記,并且在任何其它規(guī)則中都不涉及。上述近似可能是不精確的,并且它取決于所使用的精確版面計(jì)算方法。特別地,版面方法計(jì)算的項(xiàng)目的精確布置取決于所選的目標(biāo)函數(shù)。
還會(huì)注意到,通過(guò)使用以下恒等式,還可使用最小化距離規(guī)則對(duì)最小化偏移規(guī)則進(jìn)行近似minimizeoffset(m,n)≡minimizedist(t,m)和fixed(t,n,d);其中t是添加到版面中的額外標(biāo)記,并且d是一個(gè)大的正數(shù),表示比m和n之間的最大期望距離更大的距離。上述近似是不精確的,并且項(xiàng)目的精確布置取決于版面計(jì)算方法的精確實(shí)現(xiàn),但是可以證明,通過(guò)向允許固定偏移和非負(fù)偏移規(guī)則的任何版面模型中僅僅添加最小化距離規(guī)則,能夠提供與最大化和最小化偏移規(guī)則類似的功能。
在某些實(shí)現(xiàn)方式中,最小化距離規(guī)則還可以包括表示規(guī)則強(qiáng)度的額外值??梢詫⒋艘?guī)則表示為minimizeoffset(m,n,s),其中m和n是與該規(guī)則相關(guān)的標(biāo)記,s是表示規(guī)則強(qiáng)度的正數(shù)。在這種情況下,當(dāng)一條以上的最小化距離規(guī)則影響標(biāo)記的位置時(shí),較強(qiáng)的規(guī)則與較弱的規(guī)則相比對(duì)位置的影響更大。
16.9首選偏移規(guī)則在具體實(shí)現(xiàn)方式中,使用稱為“首選偏移規(guī)則”的另一類規(guī)則,代替使用最小化距離規(guī)則。由preferred(m,n,d)所表示的首選偏移規(guī)則,規(guī)定從標(biāo)記m到標(biāo)記n的首選偏移為d。通過(guò)以下恒等式,可以用最小化距離規(guī)則表示首選規(guī)則preferred(m,n,d)≡fixed(m,t,d)和minimizedist(t,n),其中t是添加到版面中的額外標(biāo)記,以便表示相對(duì)于m的位置來(lái)說(shuō)n的首選位置。
相反,通過(guò)以下恒等式,可以利用首選偏移規(guī)則表示最小化距離規(guī)則minimizedist(m,n)≡preferred(m,n,0)。
因此,向基礎(chǔ)版面模型的擴(kuò)展添加最小化距離規(guī)則或者首選偏移規(guī)則,將生成等效的模型。使用首選偏移規(guī)則代替最小化距離規(guī)則,因?yàn)閷?duì)于通常規(guī)定版面關(guān)系來(lái)說(shuō),這種表示通常需要較少的標(biāo)記和較少的規(guī)則。
根據(jù)需要,首選偏移規(guī)則也可以包括表示規(guī)則強(qiáng)度的額外值??梢詫⒋艘?guī)則表示為preferred(m,n,d,s),其中m和n是與規(guī)則相關(guān)的標(biāo)記,d為表示從m到n的首選偏移的數(shù),并且s是表示規(guī)則強(qiáng)度的正數(shù)。在這種情況下,當(dāng)一條以上的首選偏移規(guī)則影響一個(gè)標(biāo)記的位置時(shí),較強(qiáng)的規(guī)則與較弱的規(guī)則相比對(duì)該位置的影響更大。通過(guò)以下恒等式,帶有強(qiáng)度的首選偏移規(guī)則等效于帶有強(qiáng)度的最小化距離規(guī)則
preferred(m,n,d,s)≡fixed(m,t,d)和minimizedist(t,n,s),其中t為添加到版面中的額外標(biāo)記,用于表示相對(duì)于m的位置來(lái)說(shuō)n的首選位置,并且minimizedist(m,n,s)≡preferred(m,n,0,s)。
16.10首選版面模型一個(gè)理想的版面模型包括為添加以下類型的上述規(guī)則而擴(kuò)展的基礎(chǔ)版面模型1.用于水平或垂直地固定盒子的中心的規(guī)則;2.用于支持包括文本和圖像的盒子的形狀規(guī)則;以及3.首選偏移規(guī)則。
該版面模型是足夠靈活的,以支持通常所需要的全部版面特征,同時(shí)也是足夠簡(jiǎn)單的,以方便用戶理解,以具有一個(gè)簡(jiǎn)單的數(shù)據(jù)表示,并且它還能夠支持對(duì)版面項(xiàng)的位置和尺寸進(jìn)行計(jì)算的快速方法。
16.11示例版面圖37A顯示了通過(guò)使用盒子、標(biāo)記和規(guī)則,在版面引擎105的一種實(shí)現(xiàn)方式中如何對(duì)圖4所示的示例版面進(jìn)行表示。通過(guò)標(biāo)記3701、3703、3705和3707對(duì)版面區(qū)域的邊界進(jìn)行表示。版面區(qū)域通常表示模板中一個(gè)頁(yè)面的一部分。通過(guò)固定偏移規(guī)則3709對(duì)版面區(qū)域的高度進(jìn)行表示。通過(guò)固定偏移規(guī)則3711對(duì)版面區(qū)域的寬度進(jìn)行表示。利用圖37A所示的兩個(gè)盒子3702和3704,在版面引擎105中對(duì)圖4所示的兩個(gè)容器進(jìn)行表示。將標(biāo)記3701和3705指定作為原點(diǎn)標(biāo)記。
由標(biāo)記3713、3715、3717和3719對(duì)第一個(gè)盒子3702的四條邊緣進(jìn)行表示。盒子3702的左上角在頁(yè)面上有固定位置,其在版面區(qū)域的左邊緣的右側(cè)150個(gè)邏輯單位處,并且在版面區(qū)域的頂邊之下200個(gè)單位處。由兩條規(guī)則3735和3737對(duì)其進(jìn)行表示。規(guī)則3735確保了盒子3702的左邊緣在版面區(qū)域的左邊緣的右側(cè)150個(gè)單位處,并且規(guī)則3737確保了盒子3702的頂邊緣在版面區(qū)域的頂邊之下的200個(gè)單位處。盒子3743的高度和寬度是不固定的,并因此由版面引擎105對(duì)其進(jìn)行計(jì)算。最小偏移規(guī)則3744指示該盒子的最小寬度為120個(gè)邏輯單位。規(guī)則3742指示該盒子的最小高度為100個(gè)邏輯單位。首選偏移規(guī)則3741向版面引擎105指示盒子3702的首選高度為550個(gè)邏輯單位。另一個(gè)首選偏移規(guī)則3743向版面引擎105指示盒子3702的首選寬度也是550個(gè)邏輯單位。盒子的首選寬度和高度是根據(jù)該盒子所表示的容器的內(nèi)容來(lái)確定的。最小偏移規(guī)則3739向版面引擎105告知盒子3702的底邊緣不能在由標(biāo)記3703所表示的版面區(qū)域底邊的下面。
通過(guò)標(biāo)記3721、3723、3725和3727對(duì)第二個(gè)盒子3704的四條邊緣進(jìn)行表示。將盒子3704的頂邊緣和底邊緣的位置相對(duì)于版面區(qū)域進(jìn)行固定。通過(guò)標(biāo)記3725表示頂邊緣的位置。通過(guò)固定偏移規(guī)則3731將頂邊緣固定在版面區(qū)域頂邊以下的200個(gè)邏輯單位處。同樣,通過(guò)規(guī)則3733將盒子的底邊緣固定在版面區(qū)域頂邊以下的750個(gè)邏輯單位處。
利用固定偏移規(guī)則3729將盒子3704的寬度固定為550個(gè)邏輯單位,但是盒子的左邊緣和右邊緣的位置是不固定的,并且必須由版面引擎105對(duì)其進(jìn)行計(jì)算。最小偏移規(guī)則3747向版面引擎指示由標(biāo)記3723所表示的盒子的右邊緣不能超過(guò)由標(biāo)記3707所表示的版面區(qū)域的右邊緣。
附加的最小偏移規(guī)則3748和3749確??勺冞吘壉A粼诎婷鎱^(qū)域內(nèi)。在本例中,這些規(guī)則是冗余的,并且在某些實(shí)現(xiàn)方式中,可以在計(jì)算版面之前刪除冗余規(guī)則??梢酝ㄟ^(guò)下列方式檢測(cè)冗余規(guī)則臨時(shí)刪除該規(guī)則,并且使用推動(dòng)操作來(lái)確定對(duì)受影響的標(biāo)記進(jìn)行推動(dòng)是否違反該規(guī)則。如果使用推動(dòng)操作不違反該規(guī)則,則該規(guī)則是冗余的。
通過(guò)固定偏移規(guī)則3745對(duì)支柱412進(jìn)行表示。該規(guī)則向版面引擎105指示兩個(gè)盒子3702和3704之間的距離表示是200個(gè)邏輯單位。
圖37B顯示了表示如圖37A所示的水平偏移規(guī)則的圖。可以使用另一個(gè)類似的圖(未示出)對(duì)垂直偏移規(guī)則進(jìn)行表示。頂點(diǎn)3751表示與版面區(qū)域的左邊緣相對(duì)應(yīng)的標(biāo)記3705。頂點(diǎn)3761表示與版面區(qū)域的右邊緣相對(duì)應(yīng)的標(biāo)記3707。頂點(diǎn)3753表示與盒子3702的左邊緣相對(duì)應(yīng)的標(biāo)記3713。頂點(diǎn)3755表示與盒子3702的右邊緣相對(duì)應(yīng)的標(biāo)記3715。頂點(diǎn)3757表示與盒子3704的左邊緣相對(duì)應(yīng)的標(biāo)記3721。頂點(diǎn)3759表示與盒子3704的右邊緣相對(duì)應(yīng)的標(biāo)記3723。
通過(guò)由圖的邊緣3767和3769表示的一對(duì)最小偏移規(guī)則,對(duì)固定偏移規(guī)則3735進(jìn)行表示。通過(guò)圖的邊緣3771對(duì)最小偏移規(guī)則3744進(jìn)行表示,并且通過(guò)圖的邊緣3773對(duì)最大偏移規(guī)則3746進(jìn)行表示。通過(guò)圖的邊緣3775和3777對(duì)固定偏移規(guī)則3745進(jìn)行表示。通過(guò)圖的邊緣3779和3781對(duì)固定偏移規(guī)則3729進(jìn)行表示。通過(guò)圖的邊緣3783對(duì)最小偏移規(guī)則3747進(jìn)行表示。
圖37C表示用于存儲(chǔ)入37B所示的圖的存儲(chǔ)器結(jié)構(gòu)。通過(guò)一個(gè)數(shù)據(jù)結(jié)構(gòu)、例如3791對(duì)圖的各頂點(diǎn)進(jìn)行表示,該數(shù)據(jù)結(jié)構(gòu)至少包括該頂點(diǎn)所表示的標(biāo)記的位置、以及一個(gè)表示離開該頂點(diǎn)的所有邊緣的鄰接列表。鄰接列表由記錄組成,每條記錄表示一條邊,并且包含至少一個(gè)指向目的頂點(diǎn)的指針(諸如指針3793)、以及從源頂點(diǎn)到目的頂點(diǎn)的最小允許偏移(例如3794)。由于鄰接列表的大小是變化的,所以用鏈表對(duì)其進(jìn)行存儲(chǔ)。圖37C沒(méi)有明確地顯示相鄰記錄之間的鏈接。
在如圖37D所示的單獨(dú)的圖中對(duì)首選偏移進(jìn)行存儲(chǔ)。通過(guò)該圖中的一條邊緣,諸如邊緣3795,對(duì)各首選偏移進(jìn)行表示。用于存儲(chǔ)首選偏移圖的數(shù)據(jù)結(jié)構(gòu),與用于存儲(chǔ)最小偏移規(guī)則的數(shù)據(jù)結(jié)構(gòu)類似。通過(guò)指針(未明確示出)鏈接兩個(gè)圖中的相應(yīng)頂點(diǎn)。在某些實(shí)現(xiàn)方式中,向每個(gè)圖添加額外邊緣,以確保每條邊緣都有一條逆向邊緣。這使得有可能高效地沿正方向或反方向遍歷該圖。
17.版面創(chuàng)建和編輯的詳細(xì)描述17.1創(chuàng)建和編輯版面的基本操作創(chuàng)建和編輯版面的最簡(jiǎn)單方法是允許對(duì)各類的項(xiàng)目進(jìn)行添加、刪除,以及允許對(duì)由所支持的版面模型允許的各類規(guī)則進(jìn)行添加、刪除。在該方法中,當(dāng)通過(guò)對(duì)涉及正在刪除的項(xiàng)目的任何規(guī)則進(jìn)行自動(dòng)刪除,而從版面中刪除一個(gè)項(xiàng)目時(shí),只需要最小一致性檢查,就能防止版面數(shù)據(jù)結(jié)構(gòu)變得矛盾。在該方法中,不保證能夠確定滿足所有規(guī)則的項(xiàng)目的位置和尺度。
避免包含冗余信息的版面也是有用的,因?yàn)檫@能降低版面的復(fù)雜度,從而使它更容易而便于用戶理解,并且刪除冗余信息的過(guò)程可以向用戶提供反饋,以便使版面對(duì)于用戶來(lái)說(shuō)更清楚。冗余信息還能夠增加表示版面的數(shù)據(jù)結(jié)構(gòu)的大小,并且通知減緩版面計(jì)算。
上述用于表示涉及來(lái)自于基礎(chǔ)版面模型中的規(guī)則的版面的有向圖結(jié)構(gòu)(圖24),自動(dòng)地提供了用于禁用某些類型的冗余信息的方法。圖中不允許有一條以上具有相同源頂點(diǎn)和目的頂點(diǎn)的有向邊緣。這防止將多條最小偏移規(guī)則應(yīng)用于同一偏移。如果在同一對(duì)標(biāo)記之間有一條以上的最小偏移規(guī)則(以相同的順序,即具有相同的第一標(biāo)記和相同的第二標(biāo)記),則其中一條規(guī)則是冗余的,因?yàn)橹恍枰哂凶钚〉呢?fù)的最小偏移值規(guī)則。
更佳地,用于添加最小偏移規(guī)則的操作,自動(dòng)地用新增規(guī)則代替已經(jīng)由相同源頂點(diǎn)和目的頂點(diǎn)表示的任何現(xiàn)有的最小偏移規(guī)則。可選地,如果就同一偏移已經(jīng)存在最小偏移值更小(即更小的負(fù)值)的最小偏移規(guī)則,則向現(xiàn)有版面中添加最小偏移規(guī)則的操作不進(jìn)行任何處理。
在具體實(shí)現(xiàn)方式中,支持用于添加和刪除由基礎(chǔ)版面模型所支持的所有種類規(guī)則的操作。上述規(guī)則包括固定偏移規(guī)則、非負(fù)偏移規(guī)則和最小偏移規(guī)則,盡管它們都是用最小偏移規(guī)則進(jìn)行表示的。例如,通過(guò)添加兩條相應(yīng)的最小偏移規(guī)則,實(shí)現(xiàn)添加固定偏移規(guī)則的操作。提供了用于對(duì)任意標(biāo)記的位置進(jìn)行固定或解除固定的操作。對(duì)標(biāo)記的位置進(jìn)行固定,等效于在該標(biāo)記和同方向的原點(diǎn)標(biāo)記之間添加一個(gè)固定偏移規(guī)則。還提供了用于獨(dú)立地固定任一盒子的中心的水平位置或垂直位置的操作。版面創(chuàng)建和編輯操作的多種組合也是可能的。
由于各種原因,可以對(duì)盒子中心的水平位置進(jìn)行有效地固定。例如,如果盒子的兩條垂直邊緣的水平位置相對(duì)于版面區(qū)域是固定的,則盒子的水平位置以及寬度是完全確定的,因此,盒子中心的水平位置也是固定的。在這種情況下,用于使盒子中心的水平位置相對(duì)于版面固定的操作(即,添加固定中心規(guī)則),可以不進(jìn)行任何處理,因?yàn)樵撘?guī)則是冗余的。這同樣適用于對(duì)盒子中心的垂直位置進(jìn)行固定。
在一種實(shí)現(xiàn)方式中,也支持用于添加和刪除首選偏移規(guī)則和最小化距離規(guī)則的操作。在該實(shí)現(xiàn)方式中,利用等效的首選偏移規(guī)則對(duì)最小化距離規(guī)則進(jìn)行表示??梢杂糜邢驁D表示首選偏移規(guī)則,在有向圖中,一個(gè)頂點(diǎn)表示一個(gè)標(biāo)記,并且通過(guò)將對(duì)應(yīng)于與首選偏移規(guī)則相關(guān)的標(biāo)記的頂點(diǎn)進(jìn)行連接的一條邊緣,對(duì)每條首選偏移規(guī)則進(jìn)行表示。由于有向圖只允許具有相同源頂點(diǎn)和目的頂點(diǎn)的邊緣,所以這看起來(lái)好像不適合表示具有一條以上與相同的兩個(gè)標(biāo)記有關(guān)的首選偏移規(guī)則的版面,但其結(jié)果是,在其中首選偏移規(guī)則包括強(qiáng)度的具體實(shí)現(xiàn)方式中,借助于以下恒等式,可以用一條等效的首選偏移規(guī)則代替與相同的兩個(gè)標(biāo)記有關(guān)的任意兩條首選偏移規(guī)則preferred(m,n,d,s)和preferred(m,n,d’,s’)≡preferred(m,n,D,S),其中D=sd+s′d′s+s′,]]>并且S=s+s′。
在執(zhí)行首選版面計(jì)算時(shí),以上恒等式是有效的。
17.2基于示例的版面創(chuàng)建和編輯在創(chuàng)建和編輯版面時(shí),希望避免創(chuàng)建過(guò)約束的版面,因?yàn)榇祟惏婷娌焕谏晌臋n。避免沖突規(guī)則的處理可以向用戶提供反饋,以便增進(jìn)用戶對(duì)正在創(chuàng)建的版面的理解。通過(guò)自動(dòng)地防止錯(cuò)誤,在創(chuàng)建版面期間避免矛盾的規(guī)則還能減少用戶的工作量。
在一些實(shí)現(xiàn)方式中,可以使用基于示例的編輯,以避免過(guò)約束的版面。基于示例的編輯是,用于創(chuàng)建和編輯版面的操作總是在遵守所有約束的版面示例上進(jìn)行操作。注意到,最小化偏移規(guī)則、最大化偏移規(guī)則、最小化距離規(guī)則和首選偏移規(guī)則不對(duì)版面強(qiáng)加約束,并且可以將其忽略以便避免過(guò)約束的版面。在可變數(shù)據(jù)印刷應(yīng)用程序中,可以通過(guò)允許用戶構(gòu)建顯示文檔預(yù)覽的示例版面,來(lái)完成以上處理。預(yù)覽可以是通過(guò)將實(shí)際數(shù)據(jù)和文檔模板進(jìn)行組合而生成的一篇文檔的顯示,或者預(yù)覽可以包含只是與期望插入到文檔模板中的數(shù)據(jù)類似的樣本數(shù)據(jù),或者可選地,只有項(xiàng)目的大小和位置可能與將從該模板生成的實(shí)際文檔中的期望尺寸和位置近似相同。
在創(chuàng)建項(xiàng)目時(shí),最好是規(guī)定新建項(xiàng)目的位置和尺寸,所以項(xiàng)目的示例位置總是已知的。為了對(duì)這些值進(jìn)行存儲(chǔ),通過(guò)相應(yīng)標(biāo)記的位置,對(duì)用于表示版面的圖中的各個(gè)頂點(diǎn)進(jìn)行標(biāo)記。另外,只有規(guī)則與項(xiàng)目的當(dāng)前位置和尺寸不發(fā)生沖突時(shí),才可以對(duì)規(guī)則進(jìn)行添加。例如,只有所涉及標(biāo)記的當(dāng)前位置服從最小偏移規(guī)則時(shí),才可以向版面中添加最小偏移規(guī)則。類似地,在添加固定偏移規(guī)則時(shí),偏移值必須和與該規(guī)則有關(guān)的標(biāo)記之間的偏移相等。當(dāng)盒子中心的水平或垂直位置是固定的時(shí),根據(jù)在執(zhí)行添加規(guī)則的操作時(shí)盒子中心的實(shí)際位置,盒子的位置和尺寸是已知的,并且水平或垂直中心是固定的。
用戶可以經(jīng)由界面103,指示可能需要向版面中添加規(guī)則的、對(duì)版面的改變。如果用戶所指示的示例版面不滿足將要添加的規(guī)則,則如果可能的話,就對(duì)該版面進(jìn)行自動(dòng)調(diào)整,以便使新增規(guī)則與該版面一致。例如,當(dāng)用戶通過(guò)對(duì)話框或者通過(guò)拖動(dòng)盒子的一條邊緣而改變具有固定寬度的容器的寬度時(shí),對(duì)項(xiàng)目的位置進(jìn)行修改,并且還更新規(guī)則。這可能需要若干版面操作,諸如刪除某些現(xiàn)有規(guī)則、改變所涉及標(biāo)記的位置、以及添加新規(guī)則。例如,當(dāng)改變標(biāo)記的位置時(shí),應(yīng)用程序121首先刪除如果對(duì)該標(biāo)記的位置進(jìn)行改變就會(huì)違反的任何規(guī)則,更新該標(biāo)記的位置,并添加與該標(biāo)記的新位置一致的新規(guī)則。
在編輯或創(chuàng)建版面時(shí),有時(shí)必須在不違反任何約束的情況下,相對(duì)于另一個(gè)標(biāo)記或者相對(duì)于版面原點(diǎn),對(duì)一個(gè)標(biāo)記或一個(gè)以上的標(biāo)記進(jìn)行移動(dòng)。如果需要移動(dòng)的標(biāo)記受到許多約束的影響,則上述處理可能是一項(xiàng)非常復(fù)雜的操作。版面引擎105最好是提供一個(gè)稱為“推動(dòng)”的操作,該操作在不違反任何約束的情況下,沿水平方向或垂直方向?qū)⒁唤M標(biāo)記移動(dòng)一個(gè)給定距離,并且在必要時(shí)還移動(dòng)不在原始組的其它標(biāo)記,以實(shí)現(xiàn)請(qǐng)求的結(jié)果。
17.3推動(dòng)操作版面引擎105響應(yīng)于來(lái)自用戶界面103的輸入,實(shí)現(xiàn)推動(dòng)操作,以便在不違反任何約束的情況下,沿水平方向或垂直方向?qū)⒁唤M標(biāo)記移動(dòng)一個(gè)給定距離,并且必要時(shí)還移動(dòng)不在原始組中的其它標(biāo)記,以實(shí)現(xiàn)請(qǐng)求的結(jié)果。
推動(dòng)操作在一組具有相同方向的標(biāo)記上起作用,并且可以利用稱為推動(dòng)圖的圖對(duì)其進(jìn)行描述。給定由標(biāo)記和最小偏移規(guī)則的集合定義的示例版面、連同分配給該版面中的每個(gè)標(biāo)記的位置,可以對(duì)相應(yīng)的推動(dòng)圖進(jìn)行定義。推動(dòng)圖是一個(gè)有向圖,其中每個(gè)頂點(diǎn)相應(yīng)于版面中的一個(gè)標(biāo)記,并且每一條邊緣相應(yīng)于一條最小偏移規(guī)則,其中實(shí)際偏移等于最小偏移規(guī)則允許的最小值。
版面的推動(dòng)圖是一個(gè)有向圖,有向圖的邊緣指示哪些標(biāo)記可以直接推動(dòng)構(gòu)成該版面的其它標(biāo)記。如果增加第一個(gè)標(biāo)記的坐標(biāo)值導(dǎo)致違反第一個(gè)和第二個(gè)標(biāo)記之間的最小偏移規(guī)則,即當(dāng)它們之間的偏移已經(jīng)是允許的最小值時(shí),第一個(gè)標(biāo)記能夠直接推動(dòng)第二個(gè)標(biāo)記(沿正方向)。注意到,假定在創(chuàng)建或編輯版面時(shí),已經(jīng)用等效的最小偏移規(guī)則代替了所有基礎(chǔ)模型規(guī)則。
當(dāng)沿正方向移動(dòng)標(biāo)記時(shí)(即,增加其坐標(biāo)值時(shí)),還必須將與推動(dòng)圖中可以從其相應(yīng)頂點(diǎn)到達(dá)的頂點(diǎn)相對(duì)應(yīng)的任何標(biāo)記移動(dòng)相同距離,以便避免違反任何最小偏移規(guī)則。
當(dāng)沿負(fù)方向移動(dòng)標(biāo)記時(shí)(即,減小其坐標(biāo)值時(shí)),還必須將與反向推動(dòng)圖中可以從其相應(yīng)頂點(diǎn)到達(dá)的任一標(biāo)記沿相同方向移動(dòng)相同距離,以便避免違反任何最小偏移規(guī)則。除了邊緣的方向相反之外,反向推動(dòng)圖與推動(dòng)圖相同。
可以利用對(duì)有向圖中的可到達(dá)頂點(diǎn)進(jìn)行確定的各種方法來(lái)實(shí)現(xiàn)上述處理。
推動(dòng)操作通過(guò)在不違反任何最小偏移規(guī)則的情況下移動(dòng)多組標(biāo)記來(lái)起作用。為了計(jì)算一組標(biāo)記的允許移動(dòng)范圍,為每個(gè)最小偏移規(guī)則定義一個(gè)稱為“松弛(slack)”的量。給定任一最小偏移規(guī)則min(m,n,d),則該規(guī)則的松弛由offset(m,n)-d給出。松弛是在違反該規(guī)則前標(biāo)記m能夠移動(dòng)的最大距離(沿正方向),并且也是在違反該規(guī)則前標(biāo)記n能夠沿負(fù)方向移動(dòng)的最大距離(即,坐標(biāo)能夠減少的最大值)。如果在示例版面中不違反該規(guī)則,則最小偏移規(guī)則的松弛總是一個(gè)非負(fù)數(shù)。推動(dòng)圖中的每條邊緣對(duì)應(yīng)于松弛為0的規(guī)則。
對(duì)于一組標(biāo)記來(lái)說(shuō),允許的最大正向移動(dòng)是所有最小偏移規(guī)則min(m,n,d)的松弛值中的最小值,其中m在該組中,而n不在該組中。這是在不移動(dòng)該組外的任何其它標(biāo)記并且不違反任何最小偏移規(guī)則的情況下,能夠沿正方向移動(dòng)該標(biāo)記的最大距離。能夠沿反方向移動(dòng)一組標(biāo)記的最大距離,可以類似地定義為min(n,m,d)形式的所有最小偏移規(guī)則的松弛值中的最小值,其中m在該組中,而n不在該組中。如果沒(méi)有對(duì)沿給定方向移動(dòng)一組標(biāo)記進(jìn)行限制的最小偏移規(guī)則,則最大距離是無(wú)窮大的(即,對(duì)標(biāo)記能夠移動(dòng)多遠(yuǎn)沒(méi)有限制)。
推動(dòng)操作對(duì)將要移動(dòng)的當(dāng)前一組標(biāo)記以及一個(gè)推動(dòng)距離進(jìn)行跟蹤,其中推動(dòng)距離是它必須將當(dāng)前組內(nèi)的標(biāo)記推動(dòng)的剩余距離。在執(zhí)行操作步驟時(shí),對(duì)該組標(biāo)記和推動(dòng)距離進(jìn)行更新。推動(dòng)操作在一次或多次增加中對(duì)標(biāo)記進(jìn)行移動(dòng)。根據(jù)由當(dāng)前組標(biāo)記的最大允許移動(dòng)值,對(duì)每次增加中的移動(dòng)距離進(jìn)行確定。在每次增加前,將可由該組中的標(biāo)記推動(dòng)的附加標(biāo)記添加到該組中,因此在每次增加時(shí)對(duì)不同組的標(biāo)記進(jìn)行移動(dòng)。
圖25表示在推動(dòng)操作的第一實(shí)現(xiàn)方式中包含的方法2500。推動(dòng)操作在步驟2501中開始,在該步驟中保存版面的原點(diǎn)。由于推動(dòng)操作能夠改變定義坐標(biāo)系的標(biāo)記的位置,所以對(duì)該標(biāo)記及其位置進(jìn)行記錄,以便能夠稍后在步驟2513中恢復(fù)坐標(biāo)系。在步驟2501之后,推動(dòng)操作繼續(xù)到步驟2502,在該步驟中將剩余推動(dòng)距離和0進(jìn)行比較。如果剩余推動(dòng)距離為0,則不執(zhí)行任何處理,并且操作進(jìn)入步驟2513,在該步驟中對(duì)坐標(biāo)系的原點(diǎn)進(jìn)行恢復(fù)。這提高下列方式實(shí)現(xiàn)將版面中的所有標(biāo)記移動(dòng)一個(gè)適當(dāng)值,以便恢復(fù)在步驟2501中所保存的原點(diǎn)標(biāo)記的原始位置。如果在步驟2502中所測(cè)試的推動(dòng)距離不為0,則操作進(jìn)入步驟2503,在該步驟中,根據(jù)版面中該標(biāo)記的當(dāng)前位置更新推動(dòng)圖。接著,操作進(jìn)入步驟2505。在步驟2505中,通過(guò)添加可由當(dāng)前組中的任意標(biāo)記沿推動(dòng)方向推動(dòng)的任意附加標(biāo)記,對(duì)將要移動(dòng)的這組標(biāo)記進(jìn)行更新。例如,將其相應(yīng)頂點(diǎn)在推動(dòng)圖(或者如果移動(dòng)距離是反方向的話,則為反向推動(dòng)圖)中可以從與當(dāng)前組內(nèi)的任意標(biāo)記相對(duì)應(yīng)的頂點(diǎn)到達(dá)的標(biāo)記,添加到當(dāng)前標(biāo)記組中。操作繼續(xù)到步驟2507,在該步驟中,計(jì)算當(dāng)前增加的距離。增加的距離是給定方向上當(dāng)前組標(biāo)記的剩余推動(dòng)距離和最大允許移動(dòng)距離中的較小者。如果推動(dòng)距離是正的,則該距離總是正的。在計(jì)算出移動(dòng)距離之后,操作繼續(xù)到步驟2509,在該步驟中,將當(dāng)前組內(nèi)的所有標(biāo)記移動(dòng)一個(gè)距離,該距離是在步驟2507中所計(jì)算的距離。在步驟2509之后,操作進(jìn)入步驟2511,在該步驟中,通過(guò)從中減去移動(dòng)距離而計(jì)算出剩余推動(dòng)距離。在步驟2511之后,操作返回到步驟2502,在該步驟中,對(duì)在步驟2511中所計(jì)算的距離進(jìn)行測(cè)試,以便確定是否需要另一次迭代。
圖25所描述的推動(dòng)操作方案從不會(huì)失敗,但是如果在操作期間移動(dòng)了原點(diǎn)標(biāo)記,則操作的行為是不直觀的。例如,如果將一組標(biāo)記向右推動(dòng),而不是將該標(biāo)記向右移動(dòng),則其它標(biāo)記可能會(huì)向左移動(dòng)。該行為是由恢復(fù)原點(diǎn)的步驟2513造成的。實(shí)際上,該行為有時(shí)是有用的。例如,為了使盒子的寬度增加10個(gè)距離單位,即使不能將右邊緣移動(dòng)10個(gè)單位之多,將盒子的右邊緣向右推10個(gè)單位,如果可能的話,這也將會(huì)使盒子的寬度增加10個(gè)單位。在這一點(diǎn)上,如果右邊緣只能向右移動(dòng)3個(gè)單位,但是左邊緣能夠向左移動(dòng)7個(gè)單位,則推動(dòng)操作將自動(dòng)地向左移動(dòng)左邊緣。副作用是其它項(xiàng)目可能也會(huì)移動(dòng)。
有另一種形式的、不會(huì)移動(dòng)原點(diǎn)標(biāo)記的推動(dòng)操作,也是有用的。通過(guò)圖26中的方法2600對(duì)其進(jìn)行了說(shuō)明。推動(dòng)操作的此種實(shí)現(xiàn)方式除了省略了步驟2501和2513之外,按相同的方式進(jìn)行,省略步驟2501和2513是因?yàn)樗鼈兪嵌嘤嗟?,但是該?shí)現(xiàn)方式包括了附加測(cè)試,即,在步驟2505和2507之間所插入的步驟2606。測(cè)試步驟2606確定當(dāng)前標(biāo)記組是否包括原點(diǎn)標(biāo)記。假如包括,則操作停止并且失敗,因?yàn)樵诓灰苿?dòng)原點(diǎn)標(biāo)記的情況下,不能將該標(biāo)記推動(dòng)請(qǐng)求的距離。
圖27A和27B、27C和27D、以及27E和27F共同給出了推動(dòng)操作如何起作用的示例。這些圖表示由兩個(gè)容器構(gòu)成的版面,這兩個(gè)版面是最小寬度為15個(gè)單位的可變寬度容器2701、以及寬度為20個(gè)單位的固定寬度容器2704。通過(guò)具有與標(biāo)記A和B關(guān)聯(lián)的左邊緣和右邊緣的盒子,對(duì)容器2701進(jìn)行表示。通過(guò)具有與標(biāo)記C和D關(guān)聯(lián)的左邊緣和右邊緣的盒子,對(duì)容器2704進(jìn)行表示。這些圖還顯示了由標(biāo)記E表示的頁(yè)面邊緣2707。
圖27A表示在開始推動(dòng)操作前版面的初始狀態(tài)。項(xiàng)目2701具有由最小偏移規(guī)則2702所表示的15個(gè)單位的最小寬度。項(xiàng)目2704具有由固定偏移規(guī)則2705所表示的20個(gè)單位的固定寬度。通過(guò)由固定偏移規(guī)則2703所表示的長(zhǎng)為6個(gè)版面單位的支柱對(duì)兩個(gè)項(xiàng)目2701和2704進(jìn)行連接。在項(xiàng)目2704和由標(biāo)記E表示的頁(yè)面邊緣2707之間,有一條附加的最小偏移規(guī)則2706,它具有15個(gè)單位的最小長(zhǎng)度。該規(guī)則防止項(xiàng)目2704到頁(yè)面邊緣的距離小于15個(gè)單位。在調(diào)用推動(dòng)操作之前,實(shí)際距離為20個(gè)單位。說(shuō)明了用于將標(biāo)記A向右推動(dòng)15個(gè)單位的推動(dòng)操作的步驟。圖27B還顯示了該版面的推動(dòng)圖2709。圖2709顯示了表示標(biāo)記B和C的頂點(diǎn),由于固定偏移規(guī)則2703,這兩個(gè)頂點(diǎn)通過(guò)兩個(gè)方向上的邊緣相連接。表示B和C的頂點(diǎn)還由于固定偏移規(guī)則2705在兩個(gè)方向上相連接。
圖27C表示該循環(huán)的第一次迭代的結(jié)果。在第一次迭代中,在步驟2503中,對(duì)推動(dòng)圖2709進(jìn)行計(jì)算。在步驟2505中,從推動(dòng)圖中確定標(biāo)記A沒(méi)有對(duì)任何其它標(biāo)記進(jìn)行推動(dòng),并且可自己移動(dòng)。在步驟2507中,確定在不違反最小偏移規(guī)則2702的情況下標(biāo)記A可以移動(dòng)的最大距離為3個(gè)單位。由于該距離小于所請(qǐng)求距離,所以在步驟2509中將標(biāo)記A移動(dòng)3個(gè)單位,從而產(chǎn)生如圖27B所示的版面。在步驟2511中所計(jì)算的剩余距離現(xiàn)在為12個(gè)單位。在該循環(huán)的第二次迭代中,在步驟2503中,對(duì)圖27D所示的推動(dòng)圖2711進(jìn)行計(jì)算。在該圖中,標(biāo)記A現(xiàn)在推動(dòng)標(biāo)記B,因?yàn)橐?guī)則2702的松弛現(xiàn)在為零,并且因此標(biāo)記A也推動(dòng)標(biāo)記C和D。
圖27E表示該循環(huán)的第二次迭代的結(jié)果,在該迭代中確定標(biāo)記B、C和D現(xiàn)在全由標(biāo)記A進(jìn)行推動(dòng),因此必須一起移動(dòng)四個(gè)標(biāo)記。在步驟2507中,確定標(biāo)記A、B、C和D能夠移動(dòng)的最大距離為5個(gè)單位,而不違反標(biāo)記D和由標(biāo)記E表示的頁(yè)面邊緣2707之間的第二最小偏移規(guī)則2706。剩余距離為12個(gè)單位,但是標(biāo)記D只能移動(dòng)5個(gè)單位,所以分別將標(biāo)記A、B、C和D移動(dòng)5個(gè)單位。在步驟2511中,計(jì)算剩余距離為7個(gè)單位。在該循環(huán)的第三次迭代中,在步驟2503中,計(jì)算圖27F所示的推動(dòng)圖2713。在該圖中,標(biāo)記A推動(dòng)所有的標(biāo)記。
在圖26所示的第二種形式的推動(dòng)操作中,測(cè)試2606確定在將要移動(dòng)的標(biāo)記組中包含原點(diǎn)標(biāo)記E,因此停止該操作。在圖25所示的第一種形式的推動(dòng)操作中,循環(huán)的第三次迭代使得在步驟2509中將所有標(biāo)記移動(dòng)了剩余的7個(gè)單位,并且在隨后的步驟2511中,計(jì)算剩余距離為零,因此,步驟2502中的測(cè)試使得該過(guò)程轉(zhuǎn)到步驟2513,在該步驟中,通過(guò)將所有標(biāo)記左移7個(gè)單位,對(duì)原點(diǎn)標(biāo)記E的位置進(jìn)行恢復(fù)。在該例中,兩種形式的推動(dòng)操作產(chǎn)生了相同結(jié)果。在該例中,總共只能將標(biāo)記A推動(dòng)8個(gè)單位,而不是所請(qǐng)求的15個(gè)單位。
17.4帶有固定中心的推動(dòng)操作在包含固定中心規(guī)則的版面模型中,需要對(duì)推動(dòng)操作進(jìn)行修改,以便知道固定中心。如果盒子中心的水平位置是固定的,則必須總是沿相反方向?qū)⒑凶拥淖筮吘壓陀疫吘壱苿?dòng)相同距離,此類標(biāo)記是彼此“相對(duì)的”,或者是“相對(duì)”標(biāo)記。類似地,如果盒子中心的垂直位置是固定的,則必須總是沿相反方向?qū)⒑凶拥捻斶吘壓偷走吘壱苿?dòng)相同距離。
為了修改推動(dòng)操作以包含固定中心,用兩組標(biāo)記代替將要推動(dòng)的標(biāo)記組。一組標(biāo)記、即正向組是沿正方向推動(dòng)的,另一組標(biāo)記、即相對(duì)組是沿負(fù)方向推動(dòng)的。在步驟2505中,向這兩組標(biāo)記中每一組添加標(biāo)記如下。如果一個(gè)標(biāo)記與兩組之一中包含的標(biāo)記相對(duì),則向另一個(gè)組中添加相對(duì)標(biāo)記、以及由該相對(duì)標(biāo)記推動(dòng)的任何標(biāo)記。
圖32詳細(xì)表示了當(dāng)允許固定中心規(guī)則、諸如在步驟2505使用固定中心規(guī)則時(shí),如何確定兩組標(biāo)記的方法3200。在圖32中,假定要推動(dòng)的初始組標(biāo)記是垂直標(biāo)記,并且正將其向右推動(dòng),同時(shí)假定坐標(biāo)系正向右增加。類似地實(shí)現(xiàn)沿其它方向和朝向推動(dòng)標(biāo)記。在步驟3201中,將由當(dāng)前組標(biāo)記所推動(dòng)的所有標(biāo)記添加到正向組中(忽略固定中心規(guī)則)。通過(guò)查找可從表示正向組標(biāo)記的那組頂點(diǎn)到達(dá)的所有頂點(diǎn),使用推動(dòng)圖計(jì)算步驟3201。另外,如果任何兩個(gè)相對(duì)標(biāo)記被包含在正向組中,則也將原點(diǎn)標(biāo)記添加到該組中。在步驟3201之后,在步驟3203中,將與當(dāng)前組內(nèi)的任一標(biāo)記相對(duì)的所有標(biāo)記添加到相對(duì)標(biāo)記組中。另外,如果相對(duì)組中包含兩個(gè)相對(duì)標(biāo)記,則將原點(diǎn)標(biāo)記添加到相對(duì)組中。將原點(diǎn)標(biāo)記添加到任一組中,會(huì)有效地使推動(dòng)操作在步驟2606的測(cè)試之后終止。在步驟3203之后,在步驟3205中,把由相對(duì)組內(nèi)的標(biāo)記向左推動(dòng)的所有標(biāo)記添加到相對(duì)組中。由于正在沿負(fù)方向推動(dòng)標(biāo)記(即,正在減小它們的坐標(biāo)值),所以除了使用反向推動(dòng)圖之外,上述步驟是以與步驟3201中相同的方式來(lái)實(shí)現(xiàn)的。在步驟3205之后,在步驟3207中,將與相對(duì)組中的標(biāo)記相對(duì)的所有標(biāo)記添加到正向組中。步驟3207與步驟3203相反。在步驟3207之后,在步驟3209中,執(zhí)行一個(gè)測(cè)試,以檢查在步驟3207中是否將新標(biāo)記添加到正向組中。假如添加了,則計(jì)算返回到步驟3201,以便重復(fù)步驟3201、3203、3205和3207,直到不再向兩個(gè)組的任一組中添加更多的新標(biāo)記為止。
在步驟2507中,為這兩組獨(dú)立地計(jì)算移動(dòng)距離,并且兩個(gè)距離中的較小者(即,其數(shù)量較小者)變?yōu)橐苿?dòng)的距離。在步驟2509中,將標(biāo)記沿相反方向移動(dòng)相同距離。沿正方向移動(dòng)一組中的標(biāo)記,并且沿負(fù)方向移動(dòng)另一組中的標(biāo)記。
17.5帶有形狀規(guī)則的推動(dòng)操作由于形狀規(guī)則涉及水平和垂直標(biāo)記,所以為包含帶有形狀規(guī)則的版面模型而修改推動(dòng)操作,可能是復(fù)雜的。問(wèn)題是在推動(dòng)標(biāo)記時(shí),由于形狀規(guī)則和其它規(guī)則的組合,在相同方向的標(biāo)記之間可能產(chǎn)生復(fù)雜的相互作用。特別地,有可能造成沒(méi)有唯一解答的循環(huán)依賴。為避免此問(wèn)題,對(duì)版面模型設(shè)置進(jìn)行限制,只對(duì)這樣的盒子應(yīng)用形狀規(guī)則,在該盒子中在最小偏移規(guī)則中出現(xiàn)至多一個(gè)與一條垂直邊緣相對(duì)應(yīng)的標(biāo)記、以及至多一個(gè)與一條水平邊緣相對(duì)應(yīng)的標(biāo)記。即,形狀規(guī)則盒子的每一對(duì)相對(duì)邊緣中的至少一條邊緣,一定不受最小偏移規(guī)則的限制。該限制避免了由形狀規(guī)則引起的標(biāo)記之間的復(fù)雜關(guān)系。利用該限制,可以對(duì)推動(dòng)算法進(jìn)行修改,從而每當(dāng)在步驟2509中對(duì)涉及形狀規(guī)則的盒子的邊緣進(jìn)行移動(dòng)時(shí),就應(yīng)用形狀規(guī)則。通過(guò)移動(dòng)盒子的自由邊緣,應(yīng)用形狀規(guī)則,其中自由邊緣是任何最小偏移規(guī)則中不涉及的邊緣。
17.6使用推動(dòng)操作編輯文檔模板當(dāng)用戶正在對(duì)文檔模板進(jìn)行編輯時(shí),GUI301使用推動(dòng)操作來(lái)修改示例版面。圖34表示GUI301如何允許用戶移動(dòng)容器的固定邊緣的示例方法3400。在步驟3401中,用戶指示應(yīng)當(dāng)移動(dòng)邊緣,例如通過(guò)用鼠標(biāo)133和指針313對(duì)邊緣進(jìn)行選擇并拖動(dòng)來(lái)實(shí)現(xiàn)。在步驟3401之后,在步驟3402中,應(yīng)用程序103對(duì)與正在移動(dòng)的邊緣相對(duì)應(yīng)的標(biāo)記的位置解除固定。通常,通過(guò)添加固定偏移規(guī)則來(lái)固定邊緣的位置,其中固定偏移規(guī)則對(duì)表示該邊緣的標(biāo)記和與該邊緣相同方向的原點(diǎn)標(biāo)記之間的偏移進(jìn)行固定。為了對(duì)該邊緣解除固定,刪除固定偏移規(guī)則,以便允許對(duì)該邊緣的位置進(jìn)行改變。在步驟3402之后,在步驟3403中,向版面引擎105添加額外約束,以便限制該邊緣緣的允許位置。當(dāng)一條邊緣是固定的時(shí),不能移動(dòng)該邊緣,因此不需要對(duì)該邊緣有任何移動(dòng)附加約束。然而,當(dāng)使用版面引擎105對(duì)邊緣的位置進(jìn)行改變時(shí),通常對(duì)該邊緣的移動(dòng)范圍進(jìn)行限制。例如,可以向版面引擎105告知不能將該邊緣移出版面區(qū)域的邊緣之外。另一個(gè)例子是,如果該邊緣是容器的左邊緣,則可以在表示版面矩形的左邊緣的標(biāo)記和表示容器的該邊緣的標(biāo)記之間,添加非負(fù)偏移約束。此外,還應(yīng)該強(qiáng)制保持容器的最小和最大寬度??梢允褂梦臋n模板,以獨(dú)立于版面引擎105對(duì)各個(gè)容器的最小和最大寬度、以及最小和最大高度進(jìn)行存儲(chǔ)。當(dāng)用戶正在拖動(dòng)容器的邊緣時(shí),通過(guò)在表示容器的左邊緣和右邊緣的標(biāo)記之間添加最小偏移約束和最大偏移約束,版面引擎105能夠強(qiáng)制保持容器的最小和最大寬度設(shè)置。
在步驟3403之后,在步驟3405中,應(yīng)用程序121調(diào)用推動(dòng)操作以便對(duì)該邊緣進(jìn)行移動(dòng)。推動(dòng)操作確保該邊緣的移動(dòng)不會(huì)違反任何約束,并且將移動(dòng)限定在版面規(guī)則所允許的范圍之內(nèi)。在推動(dòng)操作之后,在步驟3407中,刪除在步驟3403中添加的約束,然后在步驟3411中,將該邊緣的位置固定在新位置。在步驟3411之后,應(yīng)用程序121使用版面引擎105,以在步驟3413中如圖28、29、30A和30B所述重新計(jì)算版面。步驟3413確保應(yīng)用所有的最小化距離規(guī)則和首選偏移規(guī)則。步驟3411是必需的,以便在執(zhí)行步驟3413時(shí),防止版面引擎105把該邊緣移動(dòng)到其它位置。最后,在步驟3413中已經(jīng)對(duì)版面進(jìn)行重新計(jì)算后,應(yīng)用程序121更新顯示屏144,以便顯示改變邊緣位置的結(jié)果,并且該更新是完全的。當(dāng)用戶用鼠標(biāo)拖動(dòng)容器的邊緣時(shí),重復(fù)圖34所示的步驟,以便在拖動(dòng)時(shí)提供即時(shí)的反饋。
圖35表示如何利用推動(dòng)操作來(lái)編輯文檔模板的另一種方法3500。方法3500在步驟3501中開始,在該步驟中,用戶請(qǐng)求對(duì)固定寬度容器的寬度進(jìn)行改變。假定容器的位置是可變的,其左邊緣和右邊緣都是不固定的。通過(guò)利用鍵盤132在GUI301顯示的屬性對(duì)話框中輸入一個(gè)新的寬度,可以實(shí)現(xiàn)上述處理。在一種實(shí)現(xiàn)方式中,利用鼠標(biāo)133的右鍵點(diǎn)擊該容器,將顯示一個(gè)與調(diào)色板311類似的上下文菜單。然后可以從上下文菜單中選擇“屬性…”圖標(biāo),以便對(duì)屬性對(duì)話框進(jìn)行顯示。在步驟3501之后,在步驟3503中,計(jì)算容器的當(dāng)前寬度與新寬度的差值。在步驟3503之后,在步驟3505中,將容器的寬度從固定的改變?yōu)椴还潭ǖ摹Mㄟ^(guò)在表示容器的左邊緣和右邊緣的標(biāo)記之間添加固定偏移規(guī)則,使得容器的寬度變成固定的。同樣,步驟3505包括刪除固定偏移規(guī)則。在步驟3505之后,在步驟3507中,向版面中添加約束,以便對(duì)容器的邊緣的移動(dòng)進(jìn)行限制。在文檔模板中可以有各容器的最小和最大寬度。通過(guò)向版面中添加規(guī)則來(lái)強(qiáng)制保持上述限制。通過(guò)添加與表示該容器的左邊緣和右邊緣的標(biāo)記相關(guān)的最小偏移規(guī)則,強(qiáng)制保持最小值,并且通過(guò)添加與表示該容器的左邊緣和右邊緣的標(biāo)記相關(guān)的最大偏移規(guī)則,強(qiáng)制保持最大值。
在步驟3507之后是步驟3509。在步驟3509中,利用推動(dòng)操作將與該容器的右邊緣相對(duì)應(yīng)的標(biāo)記向右推動(dòng)一個(gè)距離,該距離為寬度的差。如果寬度變化為負(fù),表示用戶請(qǐng)求更小的寬度,則將該標(biāo)記推動(dòng)一個(gè)負(fù)距離--因此將其向左推動(dòng)而不是向右推動(dòng)。在下一步3511中,對(duì)剩余請(qǐng)求寬度變化進(jìn)行計(jì)算。如果步驟3509中的推動(dòng)操作成功地將右邊緣推動(dòng)了所計(jì)算的距離,則容器的寬度將會(huì)已經(jīng)變成正確的尺寸了,并且剩余距離將為零。如果步驟3509中的推動(dòng)操作不成功,則當(dāng)前寬度將不等于請(qǐng)求的寬度,并且剩余距離不為零。在步驟3511之后,在步驟3513中,利用推動(dòng)操作將左邊緣向左推動(dòng)一個(gè)距離,該距離是在步驟3511中所計(jì)算的剩余變化尺寸。如果剩余寬度變化為負(fù),則將左邊緣向左推動(dòng)一個(gè)負(fù)距離。即,將該邊緣向右推動(dòng)。
如果在步驟3513中成功地將左邊緣推動(dòng)了在步驟3511中所計(jì)算的距離,則當(dāng)前的寬度將等于所請(qǐng)求的寬度。否則,該寬度將盡可能地接近所請(qǐng)求的寬度。在步驟3513之后,在步驟3515中,刪除在步驟3507中所添加的約束,并且在步驟3517中,通過(guò)添加與表示該容器的左邊緣和右邊緣的標(biāo)記相關(guān)的固定偏移約束,將寬度固定為新的寬度。在步驟3517之后,在步驟3519中對(duì)版面進(jìn)行重新計(jì)算,并且在步驟3521中更新顯示屏,以反映最新計(jì)算的版面,從而完成對(duì)容器的寬度進(jìn)行改變的操作。下文詳細(xì)解釋計(jì)算版面的過(guò)程。在圖35所示的示例中,假定使用圖26中所概括的第二種形式的推動(dòng)操作。如果使用圖25中所概括的形式,則步驟3511和3513將是不必要的。
18.版面計(jì)算的詳細(xì)描述18.1用單形算法計(jì)算版面在一種實(shí)現(xiàn)方式中,允許的規(guī)則是基礎(chǔ)模型中的規(guī)則,連同相同偏移規(guī)則、幅形規(guī)則、最小偏移規(guī)則和最大偏移規(guī)則。這里,基礎(chǔ)模型規(guī)則等效于線性不等式約束,并且相同偏移規(guī)則是線性約束,并且最小偏移規(guī)則和最大偏移規(guī)則用于定義線性目標(biāo)函數(shù)。在該模型中,規(guī)則定義了線性規(guī)劃,因此,可以使用單形算法或者求解線性規(guī)劃的任何其它方法,來(lái)執(zhí)行版面計(jì)算。
在該實(shí)現(xiàn)方式中,通過(guò)將與最小偏移規(guī)則相關(guān)的一對(duì)標(biāo)記之間的每個(gè)偏移相加在一起,然后從這個(gè)總和中減去與最大偏移規(guī)則相關(guān)的一對(duì)標(biāo)記之間的每個(gè)偏移,來(lái)計(jì)算目標(biāo)函數(shù)。如果規(guī)則具有強(qiáng)度,則在相加或相減前首先用相應(yīng)規(guī)則的強(qiáng)度乘以偏移值。
可惜的是,在不對(duì)單形法進(jìn)行重大修改的情況下,在使用單形法對(duì)其版面進(jìn)行計(jì)算的模型中,不存在包括文本規(guī)則的已知方法。
18.2改進(jìn)的單形法在另一種實(shí)現(xiàn)方式中,所允許的規(guī)則是基礎(chǔ)模型中的規(guī)則、以及相同偏移規(guī)則、幅形規(guī)則、最小距離規(guī)則和首選偏移規(guī)則。在該實(shí)現(xiàn)方式中,將最小偏移規(guī)則和相同偏移規(guī)則轉(zhuǎn)換為線性約束,并且最小距離規(guī)則和首選偏移規(guī)則用于定義二次目標(biāo)函數(shù)。在該模型中,約束是線性恒等式或者為線性不等式,并且目標(biāo)函數(shù)是一個(gè)二次函數(shù)??梢允褂枚蝺?yōu)化領(lǐng)域中普通技術(shù)人員已知的方法,對(duì)此類問(wèn)題進(jìn)行求解??梢允褂酶倪M(jìn)的單形法來(lái)計(jì)算該模型中的版面。
正如單形法一樣,在不對(duì)二次規(guī)劃進(jìn)行重大修改的情況下,沒(méi)有利用二次規(guī)劃來(lái)處理允許具有可變寬度和高度的文本框的模型的已知方法。
18.3基于圖的版面計(jì)算在另一種實(shí)現(xiàn)方式中,所使用的版面模型允許所有基礎(chǔ)模型規(guī)則、首選偏移規(guī)則和形狀規(guī)則。該模型與首選版面模型相同,只是不允許固定中心規(guī)則。在該實(shí)現(xiàn)方式中,使用最小偏移規(guī)則表示基礎(chǔ)模型規(guī)則,并且將其存儲(chǔ)為有向圖。將首選偏移規(guī)則存儲(chǔ)為單獨(dú)的有向圖。對(duì)形狀規(guī)則進(jìn)行單獨(dú)存儲(chǔ)。與單形法和二次規(guī)劃方法相比,該方法的優(yōu)點(diǎn)是它同時(shí)包含幅形規(guī)則和文本規(guī)則,并且可對(duì)該方法進(jìn)行修改以便包含其它形狀規(guī)則。
另外,在該實(shí)現(xiàn)方式中,每個(gè)容器與一個(gè)盒子相關(guān)聯(lián)。對(duì)于某些容器,可以將另一個(gè)單獨(dú)的盒子與該容器相關(guān)聯(lián),并且將其用于表示該容器的理想尺寸和/或形狀。利用最小偏移規(guī)則,告知版面引擎105使表示容器的印刷或顯示形狀的盒子盡可能地接近表示理想形狀的盒子的尺寸和形狀。通過(guò)對(duì)相關(guān)聯(lián)的盒子應(yīng)用形狀規(guī)則,定義容器的理想尺寸和形狀。版面計(jì)算方法使容器的尺寸和形狀盡可能地接近理想尺寸和形狀。不是總有可能使容器正好具有理想尺寸和形狀,因?yàn)槠湓诶硐氤叽绾托螤顣r(shí)可能不能與版面中的可用空間相適應(yīng)。例如,約束可能防止其成為理想尺寸或形狀。
使用最小偏移規(guī)則定義約束,其中約束對(duì)標(biāo)記的可能位置進(jìn)行限制,首選偏移規(guī)則用于定義目標(biāo)函數(shù),其中利用版面計(jì)算方法對(duì)目標(biāo)函數(shù)進(jìn)行最小化,并且利用形狀規(guī)則計(jì)算方法對(duì)該計(jì)算方法進(jìn)行動(dòng)態(tài)控制。為了定義目標(biāo)函數(shù),將每條首選偏移規(guī)則和一個(gè)能量值相關(guān)聯(lián)。首選偏移規(guī)則的能量是首選偏移和實(shí)際偏移間差值平方的一半。稱為總能量的目標(biāo)函數(shù),是所有首選偏移規(guī)則的全部能量之和。如果為首選偏移規(guī)則指定了強(qiáng)度,則將強(qiáng)度和能量相乘??梢哉J(rèn)為首選偏移規(guī)則是一個(gè)彈簧,該彈簧具有固有長(zhǎng)度,并且在壓縮或拉伸時(shí)受到張力作用。首選偏移規(guī)則的張力是規(guī)則的強(qiáng)度與實(shí)際偏移和首選偏移間差值的乘積。規(guī)則的強(qiáng)度類似于彈簧的剛度。版面引擎105通過(guò)平衡所有首選偏移規(guī)則的張力而使總能量最小化,來(lái)計(jì)算版面。
圖28表示在計(jì)算版面時(shí)所涉及的主要步驟。版面計(jì)算方法2800在不違反任何最小偏移規(guī)則的情況下,對(duì)標(biāo)記進(jìn)行移動(dòng)(即,改變其位置),直到總能量最小化為止。方法2800在步驟2801中開始,在該步驟中,版面引擎105搜索能夠移動(dòng)的一組標(biāo)記,以便在不違反任何基礎(chǔ)模型規(guī)則的情況下減小目標(biāo)函數(shù)的值。在步驟2803中,執(zhí)行測(cè)試,以測(cè)試該搜索是否成功,假如成功,則該方法進(jìn)入步驟2805,否則,版面計(jì)算完成,并且方法2800停止。在步驟2805中,將標(biāo)記沿適當(dāng)方向移動(dòng)適當(dāng)距離,以便降低總能量。在步驟2805之后,方法2800返回到步驟2801,在該步驟中,搜索將要移動(dòng)的另一組標(biāo)記。以下將詳細(xì)說(shuō)明用于選擇要移動(dòng)的多組標(biāo)記的方法、和用于計(jì)算移動(dòng)標(biāo)記的距離的方法。為了確保圖28描述的處理可以終止,忽略標(biāo)記位置的微小變化,和/或引起總能量的微小變化的標(biāo)記位置變化。在一種實(shí)現(xiàn)方式中,將位置變化限制為整數(shù)個(gè)邏輯單位。
圖29表示與圖28所示的過(guò)程等效的過(guò)程2900,只是在移動(dòng)一組水平標(biāo)記(步驟2903)之前首先移動(dòng)垂直標(biāo)記(步驟2901)。步驟2905中的測(cè)試起到與步驟2803中的測(cè)試相同的作用。有多種可能的方式用以組織用于降低總能量的方法,而并不背離本公開的范圍。
圖30A詳細(xì)地表示了在如步驟2901-A所示的實(shí)現(xiàn)方式中可以如何執(zhí)行步驟2901的方法。在步驟3001中,對(duì)垂直標(biāo)記的推動(dòng)圖進(jìn)行計(jì)算。這用來(lái)對(duì)可由一個(gè)給定標(biāo)記推動(dòng)的標(biāo)記進(jìn)行確定。在某些實(shí)現(xiàn)方式中,該圖可以是與表示規(guī)則的圖相分離的數(shù)據(jù)結(jié)構(gòu)。在其它實(shí)現(xiàn)方式中,可以將兩個(gè)數(shù)據(jù)結(jié)構(gòu)進(jìn)行組合。在步驟3003中,通過(guò)從表示垂直標(biāo)記和水平最小偏移規(guī)則的圖中檢索第一個(gè)頂點(diǎn),檢索第一個(gè)垂直標(biāo)記??梢杂卸喾N可能的順序?qū)?biāo)記進(jìn)行檢索。在一種實(shí)現(xiàn)方式中,可以按照在表示水平最小偏移規(guī)則的圖中存儲(chǔ)相應(yīng)頂點(diǎn)的順序,對(duì)標(biāo)記進(jìn)行檢索。在步驟3003之后,該方法進(jìn)入步驟3005,在該步驟中,計(jì)算由在步驟3003中所選擇的標(biāo)記能夠向右推動(dòng)的標(biāo)記。步驟3005對(duì)在不違反最小偏移規(guī)則的情況下可向右移動(dòng)一個(gè)非零距離的一組標(biāo)記進(jìn)行確定。該組標(biāo)記包括在步驟3003中所選擇的標(biāo)記,以及可由選定標(biāo)記推動(dòng)的所有標(biāo)記(即,與推動(dòng)圖中可從對(duì)應(yīng)于選定標(biāo)記的頂點(diǎn)到達(dá)的頂點(diǎn)相對(duì)應(yīng)的所有標(biāo)記)。步驟3007對(duì)在不違反最小偏移規(guī)則的情況下在步驟3005中所確定的那組能夠標(biāo)記向右移動(dòng)的最大距離進(jìn)行確定。步驟3007中的計(jì)算與作為推動(dòng)操作的步驟2507的一部分而執(zhí)行的計(jì)算相同。在步驟3007之后,步驟3009對(duì)該組中的各個(gè)標(biāo)記應(yīng)當(dāng)移動(dòng)的距離進(jìn)行計(jì)算,以便降低總能量,該距離不大于在步驟3007中所計(jì)算的距離。以下將對(duì)步驟3009進(jìn)行詳細(xì)描述。可以將移動(dòng)距離限制為整數(shù)個(gè)邏輯單位。在步驟3009之后,該方法進(jìn)入步驟3011,在該步驟中,將所有標(biāo)記移動(dòng)在步驟3009中所計(jì)算的距離。由于標(biāo)記可能已經(jīng)改變位置,所以可能需要更新推動(dòng)圖,以便反映新位置的結(jié)果。如果在步驟3009中所計(jì)算的距離等于在步驟3007中所計(jì)算的最大允許距離,則需要改變推動(dòng)圖。在步驟3011后的步驟3013中執(zhí)行該處理。向右移動(dòng)標(biāo)記沒(méi)有減少總能量,也是有可能的。在這種情況下,在步驟3009中所計(jì)算的距離將為0,并且在步驟3011中該標(biāo)記將不會(huì)實(shí)際改變位置。實(shí)際上,步驟3011和3013都不進(jìn)行任何處理,并且在某些實(shí)現(xiàn)方式中可以跳過(guò)它們。步驟3015、3017、3019、3021和3023分別等效于步驟3005、3007、3009、3011和3013,只是移動(dòng)方向相反。在上述步驟中,使用反向推動(dòng)圖而不是推動(dòng)圖。軟件工程領(lǐng)域的普通技術(shù)人員可以理解,有可能設(shè)計(jì)用于推動(dòng)圖的有向圖數(shù)據(jù)結(jié)構(gòu),從而能夠沿相反方向遍歷同一推動(dòng)圖,因此不需要單獨(dú)的反向推動(dòng)圖。在步驟3023之后,進(jìn)行測(cè)試,以確定在步驟3003中是否訪問(wèn)了所有頂點(diǎn),如果沒(méi)有訪問(wèn),則該方法返回到步驟3003,在該步驟中選擇下一個(gè)標(biāo)記。假如訪問(wèn)了所有的頂點(diǎn),則完成步驟2901,并且計(jì)算進(jìn)入步驟2903。
步驟2903與步驟2901相同,只是它所考慮的是水平標(biāo)記和垂直最小偏移規(guī)則,而不是垂直標(biāo)記和水平最小偏移規(guī)則。
圖31表示如何執(zhí)行步驟3009中的計(jì)算的細(xì)節(jié)。在步驟3101中,相對(duì)于當(dāng)前組內(nèi)的標(biāo)記從它們的當(dāng)前位置起的位置變化,計(jì)算總能量的偏導(dǎo)數(shù)??偰芰康膶?dǎo)數(shù)等于張力之和。偏導(dǎo)數(shù)等于使得當(dāng)前組內(nèi)的標(biāo)記和當(dāng)前組外的標(biāo)記相關(guān)聯(lián)的首選偏移規(guī)則的張力之和。即,總和是preferred(n,m,d,s)形式的規(guī)則上的總和,其中m是當(dāng)前組內(nèi)的標(biāo)記,而n是當(dāng)前組外的標(biāo)記。注意到,對(duì)于任意標(biāo)記m和n來(lái)說(shuō),規(guī)則preferred(m,n,d,s)等效于規(guī)則preferred(n,m,-d,s)。通過(guò)使得張力的和盡可能地接近于零,將使能量最小化。在步驟3103中,通過(guò)將標(biāo)記移動(dòng)距離δ,來(lái)完成上述處理,其中δ由下式給出δ=-D/S,
其中D是張力之和,S是將當(dāng)前組內(nèi)的標(biāo)記和當(dāng)前組外的標(biāo)記相關(guān)聯(lián)的首選偏移規(guī)則的強(qiáng)度之和。在步驟3105中,執(zhí)行測(cè)試,以確定目標(biāo)函數(shù)是否正沿為當(dāng)前組標(biāo)記考慮的移動(dòng)方向降低。這等效于測(cè)試δ是否為正。如果通過(guò)沿當(dāng)前方向?qū)?biāo)記進(jìn)行移動(dòng)不能降低能量,則在步驟3107中將移動(dòng)距離設(shè)置為零。如果通過(guò)沿當(dāng)前方向?qū)?biāo)記進(jìn)行移動(dòng)能夠降低能量,則在步驟3109中計(jì)算移動(dòng)距離。移動(dòng)距離是δ和在步驟3007中所計(jì)算的數(shù)值之中的較小者??梢詫?biāo)記的移動(dòng)限制為整數(shù)個(gè)邏輯單位,從而將步驟3007所計(jì)算的距離四舍五入為整數(shù)個(gè)邏輯單位。這確保了版面計(jì)算的終止。
如同應(yīng)用于上述推動(dòng)操作一樣,將同樣的與原點(diǎn)標(biāo)記相關(guān)的考慮應(yīng)用于版面計(jì)算。在這一點(diǎn)上,版面計(jì)算可以忽略原點(diǎn)標(biāo)記,其中步驟3005將總是對(duì)能夠移動(dòng)的一組標(biāo)記進(jìn)行查找,將要被移動(dòng)的那組標(biāo)記可以包括對(duì)水平坐標(biāo)系原點(diǎn)進(jìn)行定義的指定垂直標(biāo)記。在這種情況下,步驟3007總是生成一個(gè)非零的正距離,并且步驟3011可能改變?cè)c(diǎn)標(biāo)記的位置。在這種情況下,應(yīng)當(dāng)在步驟3001之前對(duì)原點(diǎn)標(biāo)記的位置進(jìn)行存儲(chǔ),并且通過(guò)將該版面中的所有垂直標(biāo)記移動(dòng)一個(gè)距離,該距離是在計(jì)算期間原點(diǎn)標(biāo)記已經(jīng)移動(dòng)的距離的負(fù)距離,對(duì)原點(diǎn)標(biāo)記的位置進(jìn)行恢復(fù)。在另一種實(shí)現(xiàn)方式中,在步驟3007中對(duì)原點(diǎn)標(biāo)記進(jìn)行考慮。在這一點(diǎn)上,如果在將要移動(dòng)的那組標(biāo)記中包括原點(diǎn)標(biāo)記,則在步驟3007中計(jì)算的距離為零。在這種情況下,在執(zhí)行版面計(jì)算時(shí),無(wú)須對(duì)原點(diǎn)進(jìn)行保存或恢復(fù)。
形狀規(guī)則只用于具有不固定寬度和不固定高度的容器。對(duì)于此類容器,在版面引擎105中用兩個(gè)盒子對(duì)包含內(nèi)容的容器的部分進(jìn)行表示。一個(gè)盒子表示容器中包含的顯示或印刷文本或圖像的邊界。由版面引擎計(jì)算這個(gè)盒子的邊界。另一個(gè)盒子表示盒子的理想形狀。該盒子由形狀規(guī)則進(jìn)行控制,并且通常不印刷或不向用戶顯示。這兩個(gè)盒子共享一個(gè)水平標(biāo)記和一個(gè)垂直標(biāo)記。例如,這兩個(gè)盒子的左邊緣和頂邊緣的位置總是相同的。是否共享左邊緣或右邊緣,或者是否共享頂邊緣或底邊緣,是沒(méi)有差別的。通過(guò)最小距離規(guī)則將剩余的兩條垂直邊緣聯(lián)系起來(lái),并且,類似地,通過(guò)最小距離規(guī)則將剩余的兩條水平邊緣聯(lián)系起來(lái)。最小距離規(guī)則向版面引擎指示兩個(gè)盒子的尺寸應(yīng)盡可能地彼此接近。
在對(duì)與這樣一對(duì)相關(guān)盒子的任意一個(gè)盒子的一條邊緣相關(guān)聯(lián)的標(biāo)記進(jìn)行移動(dòng)時(shí),考慮形狀規(guī)則。在步驟3003中,忽略并且跳過(guò)屬于具有不共享形狀規(guī)則的盒子的標(biāo)記,但是,如果對(duì)表示無(wú)形狀規(guī)則的相關(guān)聯(lián)盒子的邊緣的任何標(biāo)記進(jìn)行了移動(dòng),則在步驟3009之前對(duì)上述不共享標(biāo)記進(jìn)行調(diào)整。同樣的方法適用于應(yīng)用于水平標(biāo)記的等效步驟。根據(jù)形狀規(guī)則對(duì)不共享標(biāo)記進(jìn)行調(diào)整,以便使能量函數(shù)最小化。該過(guò)程確保在垂直和水平標(biāo)記之間能量是平衡的。
在形狀規(guī)則是幅形規(guī)則的情況下,直接將能量最小化。如果顯示框的寬度和高度是W和H,并且理想盒子的寬度和高度是w和h,則當(dāng)W+H=w+h時(shí),獲得最小能量。如果由幅形規(guī)則所定義的高度對(duì)寬度之比為r,則可以按以下方式計(jì)算理想盒子的寬度和高度w=(1+r)-1(W+H)和h=r(1+r)-1(W+H)。
在形狀規(guī)則為文本規(guī)則的情況下,理想盒子的形狀沒(méi)有簡(jiǎn)單公式。文本版面引擎執(zhí)行計(jì)算,以便將文本布置到矩形空間內(nèi)。利用文本版面引擎為理想盒子計(jì)算尺寸。文本版面引擎執(zhí)行計(jì)算,以便把文本塊布置到具有給定寬度的空間內(nèi),并且能夠快速計(jì)算所布置的文本塊的高度。文本版面引擎包括自動(dòng)換行計(jì)算,以便將一長(zhǎng)行文本換行成為多行。文本版面引擎根據(jù)與該文本相關(guān)聯(lián)的格式化信息,對(duì)文本進(jìn)行布置。格式化信息可以包括段落樣式、用于每個(gè)字符的字體大小和字型,諸如粗體或加下劃線。
在一種實(shí)現(xiàn)方式中,將理想寬度設(shè)置為最寬的文本行的寬度,將理想高度設(shè)置為由文本版面引擎所計(jì)算的已布置的文本塊的高度,該文本塊的寬度等于顯示框的寬度。如果寬度小于最長(zhǎng)行的寬度,或者顯示框的高度不足以包含該文本,則上述處理具有增加能量懲罰的效果。
在另一種實(shí)現(xiàn)方式中,利用文本版面引擎按不同的寬度布置文本,以計(jì)算每個(gè)寬度的高度,直到找到產(chǎn)生最低能量值的寬度為止。如果最寬的文本行不具有與顯示框相同的寬度,則可以將理想寬度設(shè)置為最寬的文本行的寬度,可以將理想高度設(shè)置為在沒(méi)有換行時(shí)文本版面引擎所計(jì)算的高度。當(dāng)文本包含長(zhǎng)文本行,并且它必須進(jìn)行換行,以便適應(yīng)顯示框時(shí),使用搜索策略,以找到導(dǎo)致能量最小的版面的寬度。可以設(shè)計(jì)許多搜索理想寬度的可能策略,而不背離本公開的范圍。特別地,可以使用折半搜索策略。
在另一種實(shí)現(xiàn)方式中,如果文本包含長(zhǎng)文本行,并且它必須進(jìn)行換行以適應(yīng)顯示框時(shí),根據(jù)能否布置文本以使之與顯示框相適應(yīng),對(duì)理想盒子的尺寸進(jìn)行計(jì)算。如果文本與顯示框不相適應(yīng),則使理想盒子的寬度和高度大于顯示框的寬度和高度。如果文本與顯示框相適應(yīng),則使理想盒子的寬度和高度小于顯示框的寬度和高度。對(duì)于其顯示框大于或小于包含文本所必需的尺寸的版面來(lái)說(shuō),該策略具有增加懲罰的效果??梢杂卸喾N對(duì)理想盒子的準(zhǔn)確尺寸進(jìn)行計(jì)算的可能方法,而不背離本公開的范圍。可以使用的一種特殊方法是,如果通過(guò)與顯示框的現(xiàn)有寬度相等的寬度對(duì)文本進(jìn)行布置,則首先計(jì)算文本的高度,然后將所布置的文本的高度和顯示框的高度的差值的一半加到顯示框的寬度和高度之中,以獲得理想盒子的尺寸。
18.3.1簡(jiǎn)單的一維版面示例圖39表示在章節(jié)18.3和后續(xù)章節(jié)中描述的版面機(jī)制的使用示例。利用A、B和C表示三個(gè)盒子3901。通過(guò)位于左邊緣、頂邊緣、右邊緣和底邊緣的標(biāo)記3905定義每個(gè)盒子3901。將頁(yè)面的左邊緣和右邊緣定義為兩個(gè)垂直標(biāo)記(3903和3904),其中這些標(biāo)記之間有固定距離。固定偏移規(guī)則3902對(duì)容器的某些邊緣和頁(yè)面的邊緣之間的距離進(jìn)行規(guī)定。
規(guī)則具體為·把頁(yè)面的寬度固定為50個(gè)單位。
·PA、即容器A的首選寬度為22個(gè)單位。
·PB、即容器B的首選寬度為16個(gè)單位。
·PC、即容器C的首選寬度為13個(gè)單位。
·盒子A的左邊緣(圖39中稱為“a”)距離頁(yè)面的左邊緣1個(gè)單位。
·盒子A的右邊緣(稱為“m”)可自由移動(dòng)。
·盒子B的左邊緣(稱為“b”)在a的右側(cè)6個(gè)單位處。
·盒子B的右邊緣在“m”的左側(cè)1個(gè)單位處。
·盒子C的左邊緣在“m”的右側(cè)2個(gè)單位處。
·盒子C的右邊緣(稱為“c”)在頁(yè)面右邊緣的左側(cè)1個(gè)單位處。
分別用WA、WB和WC表示盒子A、B和C的當(dāng)前寬度。為方便起見(jiàn),使用這樣一個(gè)坐標(biāo)系,該坐標(biāo)系以頁(yè)面的左邊緣為零點(diǎn),向頁(yè)面的右側(cè)增加。同時(shí)假定字母“a”、“b”、“c”和“m”表示上述坐標(biāo)系內(nèi)相應(yīng)標(biāo)記的位置。
首選偏移規(guī)則的能量是首選偏移和實(shí)際偏移間差值平方的一半。用于該版面的目標(biāo)函數(shù)、即總能量,是所有首選偏移規(guī)則的能量之和。因此,目標(biāo)函數(shù)為E(A,B,C)=1/2(WA-PA)2+1/2(WB-PB)2+1/2(WC-PC)2=1/2(WA-22)2+1/2(WB-16)2+1/2(WC-13)2=1/2[(WA-22)2+(WB-16)2+(WC-13)2]=1/2[((m-a)-22)2+((m-b-1)-16)2+((c-m-2)-13)2]=1/2[(m-a-22)2+(m-b-17)2+(c-m-15)2]。
注意到,為了查找每個(gè)盒子的寬度,從該盒子的最右標(biāo)記的位置中減去該盒子的最左標(biāo)記的位置,以獲得一個(gè)非負(fù)數(shù)。因此,WB為(m-b-1),因?yàn)閙和盒子B的右邊緣之間的間隔為1個(gè)單位。同樣,WC為(c-m-2),因?yàn)閏在m的右側(cè),并且盒子C的左邊緣和標(biāo)記m之間的距離為2個(gè)單位。
為了使目標(biāo)函數(shù)最小化,注意到,“m”是唯一一個(gè)可移動(dòng)的標(biāo)記(實(shí)際上,“m”以及與其最接近的兩個(gè)標(biāo)記可以移動(dòng),并且可以將它們看作方程式中的控制變量,因此,為簡(jiǎn)單起見(jiàn),使用稱為“m”的那個(gè)標(biāo)記)。在這種情況下,簡(jiǎn)單地找到能量函數(shù)相對(duì)于變量m的偏導(dǎo)數(shù),并且對(duì)導(dǎo)數(shù)為零進(jìn)行求解,就足夠了E(A,B,C)=1/2[(m-a-22)2+(m-b-17)2+(c-m-15)2]δE/δm=(m-a-22)+(m-b-17)+(m-c+15)。
注意到第三項(xiàng)(m-c+15)的負(fù)號(hào),因?yàn)閷?dǎo)數(shù)是相對(duì)于m的,而m在該項(xiàng)中為負(fù)。
δE/δm=m-a-22+m-b-17+m-c+15=3m-a-b-c-22-17+15=3m-a-b-c-24。
通過(guò)對(duì)這個(gè)值為零進(jìn)行求解,有可能找到最小能量。已知a、b和c的值分別為1、7和49。
0=3m-1-7-49-243m=1+7+49+24=81m=27。
由于只有一個(gè)變量,因此過(guò)程結(jié)束。因此,給定配置的最小能量是在標(biāo)記“m”在頁(yè)面左邊緣的右側(cè)27個(gè)單位處時(shí)獲得的。
18.3.2簡(jiǎn)單的二維版面示例圖40A表示版面機(jī)制的另一種使用示例。在這種情況下,由于有可以移動(dòng)的水平和垂直標(biāo)記,所以該示例涉及二維方向上的張力。
在由標(biāo)記4002限定邊界的具有已知固定尺寸的矩形頁(yè)面內(nèi),顯示了三個(gè)標(biāo)有A、B、C的盒子4001。固定偏移規(guī)則4003、4004、4005和4006對(duì)A和C的三條邊緣的位置進(jìn)行確定。A的下邊緣(水平邊緣)可以移動(dòng),但是通過(guò)固定偏移規(guī)則連接到B的上邊緣(稱為“m”),因此,兩個(gè)標(biāo)記只能一起移動(dòng),并且移動(dòng)相同距離。類似地,B的右邊緣(稱為“n”)和C的左邊緣可以移動(dòng),但是只能一起移動(dòng),并且移動(dòng)相同距離,因?yàn)樗鼈冎g有一條固定偏移規(guī)則。
由于盒子B的寬度和高度都可以改變,所以可以對(duì)盒子B應(yīng)用形狀規(guī)則。所選擇的規(guī)則為縱橫比規(guī)則,該規(guī)則規(guī)定盒子B的高寬比應(yīng)盡可能地接近0.5(在圖40A中,用標(biāo)有RB=0.5的箭頭指示)。盒子A的首選高度為22個(gè)單位,并且盒子C的首選寬度為36個(gè)單位。由于盒子A和C都不能在二維方向上進(jìn)行改變(由于規(guī)則4005、4006),所以都沒(méi)有形狀規(guī)則。
規(guī)則具體為·把頁(yè)面的寬度固定為50個(gè)單位。
·把頁(yè)面的高度固定為36個(gè)單位。
·PA、即容器A的首選高度為22個(gè)單位。
·RB、即容器B的首選高寬比為0.5。
·PC、即容器C的首選寬度為36個(gè)單位。
·盒子A的上邊緣(稱為“a”)距離頁(yè)面的頂邊2個(gè)單位。
·盒子A的左邊緣在頁(yè)面左邊緣的右側(cè)1個(gè)單位處。
·盒子A的右邊緣在其左邊緣右側(cè)18個(gè)單位處。
·盒子B的上邊緣(稱為“m”)可以移動(dòng)。
·盒子A的下邊緣比m高2個(gè)單位。
·盒子B的左邊緣(稱為“b”)在頁(yè)面左邊緣的右側(cè)1個(gè)單位處。
·盒子B的下邊緣(稱為“d”)比頁(yè)面的下邊緣高3個(gè)單位。
·盒子B的右邊緣(稱為“n”)可以移動(dòng)。
·盒子C的左邊緣在“n”的右側(cè)2個(gè)單位處。
·盒子C的下邊緣比頁(yè)面的下邊緣高3個(gè)單位。
·盒子C的右邊緣(稱為“c”)在頁(yè)面右邊緣的左側(cè)2個(gè)單位處。
·盒子C的上邊緣比其下邊緣高16個(gè)單位。
使HA,WA,HB,WB和HC,WC分別是盒子A的高度和寬度、盒子B的高度和寬度、以及盒子C的高度和寬度。
使PHB和PWB分別是盒子B的首選高度和寬度。盒子B的首選高度和寬度不是版面算法的固定輸入;相反,它們是通過(guò)使用盒子B的形狀規(guī)則在某些階段計(jì)算的,其中形狀規(guī)則是與其寬度和高度有關(guān)的縱橫比規(guī)則。這些值是作為盒子B的高度和寬度的加權(quán)平均值計(jì)算的PWB=(WB+HB)/(1+RB)=2/3(WB+HB)PHB=RB(WB+HB)/(1+RB)=1/3(WB+HB)。
表示上述方法的能量的目標(biāo)函數(shù),可以是水平和垂直方向上的張力的平方和的一半E(A,B,C)=1/2(HA-PA)2+1/2(HB-PHB)2+1/2(WB-PWB)2+1/2(WC-PC)2=1/2[(HA-PA)2+(HB-PHB)2+(WB-PWB)2+(WC-PC)2]=1/2[(m-2-a-PA)2+(d-m-PHB)2+(n-b-PWB)2+(c-n-2-PC)2]。
為了降低以上能量(在實(shí)際不需要計(jì)算該能量的情況下),依次減小水平和垂直方向上的目標(biāo)函數(shù)的偏導(dǎo)數(shù),直到再也不能減小兩個(gè)方向上的張力的絕對(duì)值之和為止,就足夠了。該處理生成張力最小的方案。使用張力的絕對(duì)值,從而能夠在停止條件中同樣地對(duì)正負(fù)張力進(jìn)行處理。偏導(dǎo)數(shù)為δE/δm=m-2-a-PA+m-d+PHB=2m-59+PHBδE/δn=n-c+2+PC+n-b-PWB=2n-11-PWB。
通過(guò)將其設(shè)置為零而使偏導(dǎo)數(shù)最小化,從而得到以下關(guān)系m=1/2(2+a+PA+d-PHB)=1/2(59-PHB)n=1/2(c-2-PC+b+PWB)=1/2(11+PWB)。
對(duì)本例而言,使盒子B的初始寬度和高度分別為15和10個(gè)單位,因此,m=d-10=33-10=23,且n=b+15=16。
WB=15HB=10m=23n=16。
計(jì)算盒子B的首選寬度和高度PWB=2/3(WB+HB)=2/3(15+10)=50/3=162/3=16(當(dāng)被減少到最接近的整數(shù)時(shí))。
PHB=1/3(WB+HB)=1/3(15+10)=25/3=81/3=8(當(dāng)被減少到最接近的整數(shù)時(shí))。
計(jì)算水平和垂直張力的絕對(duì)值之和,以便使版面機(jī)制能夠確定何時(shí)結(jié)束。在這種情況下,水平張力TX是盒子B和C的當(dāng)前寬度與其首選寬度之間的差值的總和。類似地,垂直張力TY是盒子A和B的當(dāng)前高度與其首選高度之間的差值的總和。即TX=(WC-PC)+(WB-PWB)=(c-n-2-36)+(n-b-PWB)=c-38-b-PWB(當(dāng)消去n時(shí))=48-38-1-PWB=9-PWB=9-16=-7。
TY=(HB-PHB)+(HA-PA)=(d-m-PHB)+(m-2-a-22)=d-PHB-2-a-22(當(dāng)消去m時(shí))=33-PHB-2-2-22=7-PHB=7-8=-1。
張力為負(fù),表示標(biāo)記需要向左或向上移動(dòng),以減小這些張力。
總張力是垂直和水平張力的絕對(duì)值的總和TTOTAL=|TX|+|TY|=|-7|+|-1|=7+1=8。
版面機(jī)制繼續(xù)依次減小水平和垂直方向上的張力,直至再也不能減小總張力為止。
首先沿水平方向移動(dòng)垂直標(biāo)記。盡早將B的首選寬度計(jì)算如下PWB=2/3(WB+HB)=16。
唯一能夠移動(dòng)的垂直標(biāo)記是“n”,以及通過(guò)固定偏移規(guī)則(距離其右側(cè)2個(gè)單位)與其相連的標(biāo)記。對(duì)兩個(gè)標(biāo)記進(jìn)行移動(dòng),以使水平張力最小化。由于另一個(gè)標(biāo)記的位置可以被推導(dǎo)為(n+2),所以確定應(yīng)當(dāng)將“n”移動(dòng)到的位置,就足夠了。如先前由下列關(guān)系式確定的那樣,計(jì)算n的位置,以便減小目標(biāo)函數(shù)相對(duì)于n的偏導(dǎo)數(shù)n=1/2(11+PWB)=1/2(11+16)=131/2=13(當(dāng)被減小為最接近的整數(shù)時(shí))。
將標(biāo)記“n”移動(dòng)到位置13,以便減小水平張力,還將盒子B的寬度變成12,即WB=12HB=10m=23n=13。
由于形狀規(guī)則,盒子B的首選寬度和高度變?yōu)镻WB=2/3(WB+HB)=2/3(12+10)
=44/3=142/3=14(當(dāng)被減小為最接近的整數(shù)時(shí))。
PHB=1/3(WB+HB)=1/3(12+10)=71/3=7(當(dāng)被減小為最接近的整數(shù)時(shí))。
現(xiàn)在必須對(duì)總張力進(jìn)行重新計(jì)算,以便查看總張力是否已減小了,并且如果沒(méi)有減小,則版面過(guò)程停止。新張力為TX=9-PWB=9-14=-5。
TY=7-PHB=7-7=0。
TTOTAL=|TX|+|TY|=|-5|+|0|=5。
由于新張力已經(jīng)從8降到5,所以該過(guò)程將繼續(xù)。
現(xiàn)在,沿垂直方向移動(dòng)水平標(biāo)記。此時(shí),只有“m”以及與其相連的標(biāo)記可以移動(dòng)。計(jì)算應(yīng)當(dāng)將“m”移動(dòng)到的位置,因?yàn)榕c其相連標(biāo)記將移動(dòng)到(m-2)。如早先由下列關(guān)系式確定的那樣,使目標(biāo)函數(shù)相對(duì)于m的偏導(dǎo)數(shù)最小化m=1/2(59-PHB)=1/2(59-7)=26。
將標(biāo)記“m”移動(dòng)到位置26,以便減小垂直張力,將通過(guò)固定偏移規(guī)則與其相連的標(biāo)記移動(dòng)到位置24。
WB=12
HB=7m=26n=13現(xiàn)在重新計(jì)算盒子B的首選寬度和高度、以及總張力PWB=2/3(WB+HB)=2/3(12+7)=38/3=122/3=12(當(dāng)被減小為最接近的整數(shù)時(shí))。
PHB=1/3(WB+HB)=1/3(12+7)=61/3=6(當(dāng)截?cái)酁樽罱咏恼麛?shù)時(shí))。
TX=9-PWB=9-12=-3。
TY=7-PHB=7-6=1。
TTOTAL=|TX|+|TY|=|-3|+|1|=4。
由于總張力已經(jīng)從5減小到4,所以該過(guò)程將繼續(xù)。再次沿水平方向移動(dòng)垂直標(biāo)記,以便減小張力。
n=1/2(11+PWB)=1/2(11+12)=111/2=11(當(dāng)被減小為最接近的整數(shù)時(shí))。
將標(biāo)記“n”移動(dòng)到位置11。盒子B的寬度變成10個(gè)單位。
WB=10HB=7m=26n=11重新計(jì)算盒子B的首選寬度和高度、以及總張力PWB=2/3(WB+HB)=2/3(10+7)=34/3=111/3=11(當(dāng)被減小為最接近的整數(shù)時(shí))。
PHB=1/3(WB+HB)=1/3(10+7)=52/3=5(當(dāng)被減小為最接近的整數(shù)時(shí))。
TX=9-PWB=9-11=-2。
TY=7-PHB=7-5=2。
TTOTAL=|TX|+|TY|=|-2|+|2|=4。
由于總張力沒(méi)有減小到4以下,所以該過(guò)程停止??蛇x地,還可以在過(guò)程停止前移動(dòng)水平標(biāo)記。
本例的最終結(jié)果可能如圖40B所示的那樣。注意到,在這種情況下盒子A和C可以重疊。這可能是所期望的效果。如果不是預(yù)期的效果,則為了防止此種情況發(fā)生,必須添加其它約束。例如,可以添加最小偏移規(guī)則,以便強(qiáng)迫盒子C的左邊緣保持在盒子A的右邊緣的右側(cè)。
本例僅僅顯示了一個(gè)形狀規(guī)則和兩個(gè)首選偏移規(guī)則,但是實(shí)際應(yīng)用程序可以對(duì)每個(gè)盒子使用形狀規(guī)則。取決于在盒子內(nèi)將要顯示的內(nèi)容,形狀規(guī)則也可能不同。例如,可以使用縱橫比規(guī)則和文本形狀規(guī)則。每條規(guī)則按其自身的方式對(duì)盒子的理想形狀進(jìn)行計(jì)算。
18.4帶有固定中心的基于圖的算法在版面引擎105中,允許使用固定中心規(guī)則,因此需要修改版面計(jì)算,以正確地處理固定中心規(guī)則。在圖30B中,如步驟2901-B所示,顯示了對(duì)步驟2901(圖29)中的版面計(jì)算的修改,并且其類似于在推動(dòng)操作中為支持固定中心規(guī)則所做的修改。圖30B幾乎與圖30A相同,只是圖30B表示了在計(jì)算版面時(shí)如何對(duì)固定中心進(jìn)行考慮。在圖30A和30B中,步驟3001、3003、3005、3009、3013、3015、3019、3023和3025是共同的。
在圖30B中,步驟3005和3015必須包括在計(jì)算推動(dòng)標(biāo)記時(shí)的相對(duì)標(biāo)記。計(jì)算兩組標(biāo)記,而不是計(jì)算沿一個(gè)方向移動(dòng)的單組標(biāo)記;一組向右移動(dòng),另一組向左移動(dòng)。這一點(diǎn)與推動(dòng)操作中相同。在圖30B中,步驟3008代替步驟3007,在步驟3008中,獨(dú)立地為兩組標(biāo)記計(jì)算最大移動(dòng)距離(忽略固定中心規(guī)則),然后兩個(gè)值中的較小者(就數(shù)量而言)即為標(biāo)記能夠移動(dòng)的最大距離。用步驟3012代替步驟3011,用步驟3022代替步驟3021,區(qū)別在于一起移動(dòng)兩組標(biāo)記。在步驟3012中,將包含了在步驟3003中所選擇的標(biāo)記的那一組向右移動(dòng),并且將包含了與第一組中的標(biāo)記相對(duì)的標(biāo)記的那一組向左移動(dòng)。在步驟3022中,將包含了在步驟3003中所選擇的標(biāo)記的那一組向左移動(dòng),并且將包含了與第一組中的標(biāo)記相對(duì)的標(biāo)記的那一組向右移動(dòng)。相同的考慮適用于為包括固定中心而修改推動(dòng)操作的情況。在這一點(diǎn)上,如果任意兩個(gè)相對(duì)標(biāo)記在同一組中,則應(yīng)將原點(diǎn)標(biāo)記添加到這兩個(gè)組中。邏輯上,如果包括了原點(diǎn)標(biāo)記,則應(yīng)將具有相同朝向的所有相對(duì)標(biāo)記對(duì)添加到兩個(gè)組中,因?yàn)橐苿?dòng)原點(diǎn)需要移動(dòng)所有固定標(biāo)記,并且因此也必須移動(dòng)所有帶有固定中心的盒子。當(dāng)然,不必要實(shí)際上創(chuàng)建包含原點(diǎn)標(biāo)記和所有相對(duì)標(biāo)記對(duì)的組,因?yàn)椴粦?yīng)該對(duì)它們進(jìn)行移動(dòng)。如果任一組中都不包括原點(diǎn)標(biāo)記,則步驟3008將最大距離設(shè)置為零,因此步驟3009、3012和3013不進(jìn)行任何處理,并且可以將其跳過(guò)。步驟3018代替步驟3017,并且和步驟3008一樣,為包含了在步驟3003中所選擇的標(biāo)記的那一組計(jì)算最大距離,而且還為與包含所選標(biāo)記的那一組中的標(biāo)記相對(duì)的所有標(biāo)記計(jì)算最大距離。類似地,如果這兩個(gè)組中的任一組包含原點(diǎn)標(biāo)記,則步驟3018應(yīng)將最大距離設(shè)置為零。
19.印刷文檔圖36表示在從文檔模板生成并印刷文檔的過(guò)程中涉及的方法3600的步驟。方法3600在步驟3601中開始,在該步驟中,應(yīng)用程序121連接到數(shù)據(jù)庫(kù),并且將數(shù)據(jù)庫(kù)游標(biāo)設(shè)置在包含了所需源數(shù)據(jù)的表格的開始位置。用戶可以利用圖14所示的對(duì)話框指定需要連接哪個(gè)數(shù)據(jù)庫(kù)。在步驟3601之后,在步驟3603中,從數(shù)據(jù)庫(kù)表格中讀出下一條記錄,并且更新游標(biāo)以指向下一條記錄。由于文檔集中的每篇文檔相應(yīng)于一條記錄,開始一篇新文檔,并且將頁(yè)面計(jì)數(shù)器重置在文檔模板的開始。隨后進(jìn)入步驟3605,在該步驟中應(yīng)用程序121為正在生成的文檔開始一個(gè)新頁(yè)面,并且生成用于該頁(yè)面的版面并將其應(yīng)用于該頁(yè)面。在步驟3607中,使用當(dāng)前記錄中的數(shù)據(jù),來(lái)計(jì)算在當(dāng)前頁(yè)面上的版面內(nèi)的每個(gè)容器的理想尺寸。接著,在步驟3609中,使用在步驟3607中所計(jì)算的理想尺寸調(diào)整版面規(guī)則。此類操作可以包括改變首選偏移規(guī)則的值,并根據(jù)在步驟3607中計(jì)算的理想尺寸對(duì)幅形規(guī)則進(jìn)行更新。此外,對(duì)于文本的寬度和高度均不固定的可變文本容器,協(xié)同文本規(guī)則一起確定高度和寬度,其中文本規(guī)則取決于在步驟3603中所提取的數(shù)據(jù)庫(kù)記錄的某個(gè)字段中的文本。在步驟3609中對(duì)此類文本規(guī)則進(jìn)行更新。在步驟3609之后,在步驟3611中計(jì)算當(dāng)前頁(yè)面的版面。在計(jì)算出版面以后,在步驟3613中提交并印刷頁(yè)面。在已經(jīng)印刷了頁(yè)面以后,在步驟3615中執(zhí)行測(cè)試,以便確定是否印刷了當(dāng)前文檔的所有頁(yè)面。若沒(méi)有全部印刷,則方法3600返回到步驟3605,以開始計(jì)算下一個(gè)頁(yè)面。如果已經(jīng)為當(dāng)前文檔印刷了文檔模板中的所有頁(yè)面,則方法3600繼續(xù)到步驟3617,在該步驟中,執(zhí)行另一個(gè)測(cè)試,以確定當(dāng)前記錄是否為數(shù)據(jù)庫(kù)表格中的最后一條記錄。如果已經(jīng)處理了數(shù)據(jù)庫(kù)表格中的所有記錄,則方法3600完成,否則該過(guò)程返回到步驟3603,在該步驟中,讀出數(shù)據(jù)庫(kù)表格中的下一條記錄,以便印刷下一篇文檔。
20.預(yù)先計(jì)算可能的文本形狀用于提高版面機(jī)制的速度的一種方法、諸如章節(jié)18所描述的基于圖的版面方法是,對(duì)該版面可能包含的任何文本的所有形狀進(jìn)行預(yù)先計(jì)算。通過(guò)在執(zhí)行版面計(jì)算前計(jì)算形狀,版面機(jī)制可以更快地進(jìn)行處理,因?yàn)橐呀?jīng)執(zhí)行了對(duì)文本形狀的計(jì)算,并且將其結(jié)果進(jìn)行存儲(chǔ)以用于隨后的快速檢索。通過(guò)圖41A-41K中的例子,來(lái)說(shuō)明對(duì)某些文本的可能形狀進(jìn)行計(jì)算的方法。
該方法的工作方式如下1.如圖41A所示,根據(jù)需要在單詞之間保持適當(dāng)?shù)拈g距,以首尾相連的方式水平地布置文本文字(在外接框4103內(nèi)顯示每個(gè)單詞4102)。然后將單詞的總體配置的寬度和高度確定為包圍單詞的最小盒子4101。在存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)中對(duì)外接框4103的尺寸進(jìn)行存儲(chǔ)。必要時(shí),可使用不同字體測(cè)量單詞。注意到,為了清楚起見(jiàn),在外接框4103和文字框4102之間有一個(gè)小的間隔,但是在實(shí)際實(shí)現(xiàn)時(shí)該間隔并不存在。
2.獲得外接框的寬度,然后將寬度減小所用坐標(biāo)系的一個(gè)單位。接著,使用新寬度作為寬度約束,再次布置文本。按照這個(gè)寬度約束和文本語(yǔ)言的文本流動(dòng)規(guī)則的要求,文本將流動(dòng)到后續(xù)的行中。不存在高度約束,因此可以根據(jù)需要使用若干行。根據(jù)該結(jié)果確定新的外接框,如圖41B所示,并且在存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)中對(duì)這個(gè)新的外接框進(jìn)行存儲(chǔ)。字符間距4105遵循文本語(yǔ)言的自然間距規(guī)則。例如,在英語(yǔ)中,不把行尾的間隔計(jì)算在外接框計(jì)算結(jié)果內(nèi)。對(duì)于某些語(yǔ)言來(lái)說(shuō),對(duì)于構(gòu)成單詞或詞間間距的定義可能與給出的示例不同。
3.重復(fù)步驟2直到不能把文本布置在更窄的外接框內(nèi)為止。圖41C-41K舉例說(shuō)明了該過(guò)程。注意到,在本例中,諸如單詞“Brevity”之類的每個(gè)單詞可以有可選的連字符斷點(diǎn)4104,如圖41h-41k所示,斷點(diǎn)允許把單詞斷開。當(dāng)英語(yǔ)中出現(xiàn)此種情況時(shí),規(guī)則將添加連字符4106。雖然該處理取決于文本語(yǔ)言的規(guī)則,但是在計(jì)算外接框時(shí),通常包含這種動(dòng)態(tài)插入的標(biāo)點(diǎn)符號(hào)的尺寸和位置。
4.計(jì)算的文本形狀是存儲(chǔ)的外接框。當(dāng)需要知道文本塊在給定的寬度約束、高度約束、或者寬度與高度約束下可以有多大時(shí),可以在版面機(jī)制中使用以上形狀。還可以使用上述形狀,來(lái)了解在給定的一維方向上的下一個(gè)最大或最小形狀,以便快速地在文本塊的幾種可能版面中做出決定。
顯然,打算使上述實(shí)現(xiàn)方式與使用具有已知最小尺寸的字間間距從左向右書寫的語(yǔ)言一起使用。對(duì)于不遵循此類規(guī)則的語(yǔ)言,可制定另一種替換方案。例如,某些亞洲語(yǔ)言以列的方式從上向下書寫字符,然后從右向左書寫各列。對(duì)于此種語(yǔ)言,需要修改版面過(guò)程,以交換垂直和水平尺寸的作用,并且可以將間隔符號(hào)的尺寸減小到某個(gè)更小的值或零。因此,將會(huì)在步驟1中垂直堆疊字符,然后在步驟2中,將高度減少1個(gè)單位(其可能是字符的高度),并且重復(fù)該過(guò)程,以形成越來(lái)越寬的外接框。類似地,每種語(yǔ)言的斷字規(guī)則取決于文本的語(yǔ)言。
21.表格創(chuàng)建示例圖42A-42C表示使用如章節(jié)18所描述的基于圖的版面機(jī)制構(gòu)建表格的一些方法。將表格定義為被劃分成單元格的矩形區(qū)域,每個(gè)單元可選地保存諸如文本或圖像之類的某些內(nèi)容。
圖42A表示對(duì)表格進(jìn)行定義的一種方法。使用導(dǎo)向4203對(duì)行和列的位置進(jìn)行定義。將容器4201放置在導(dǎo)向之間,以充當(dāng)表格中的單元格,并且可以在其中放置內(nèi)容。在導(dǎo)向4203和容器4201的相應(yīng)鄰接邊緣之間附加支柱4202,以便對(duì)相鄰單元格的內(nèi)容之間的邊距進(jìn)行定義。如果打算使各單元格彼此對(duì)齊,則支柱可以具有任意所需長(zhǎng)度,包括零長(zhǎng)度。
導(dǎo)向可以是不固定的(它們可以是浮動(dòng)導(dǎo)向),以便每個(gè)單元格的內(nèi)容可以推動(dòng)導(dǎo)向,由此允許調(diào)整行和列的尺寸以便適應(yīng)不同尺寸的內(nèi)容?;蛘?,可以將導(dǎo)向固定到頁(yè)面上,以便把行和列限制在某個(gè)尺寸或位置。通過(guò)在導(dǎo)向之間放置支柱,也可以利用浮動(dòng)導(dǎo)向來(lái)控制行和列的尺寸。這允許整個(gè)表格在頁(yè)面上移動(dòng)(由于沒(méi)有把導(dǎo)向固定到頁(yè)面上),但是仍然可以利用該技術(shù)控制行和列的尺寸。
注意到,將該表格中的容器的外邊固定到頁(yè)面上。該處理可能是不必要的。另一種替換的更好方法可以是,使用導(dǎo)向定義表格的最外邊界,并且在導(dǎo)向和容器的外邊緣之間放置支柱,以便允許那些邊緣一起進(jìn)行移動(dòng)。
圖42B表示定義表格的另一種替換方法。在本例中不使用導(dǎo)向。相反,把支柱4205直接附加在相鄰容器4204的邊緣之間,以便指定行與列的邊距尺寸。只有在最上的容器和最左的容器之間才需要這種指定邊距的支柱4205。通過(guò)使用長(zhǎng)度為零的支柱4206,將表格內(nèi)的其它容器鏈接到這些約束。
在圖42B所示的例子中,通過(guò)高度為零的支柱4206鏈接頂行容器的底邊緣,從而將其底邊緣彼此準(zhǔn)確對(duì)齊。類似地,利用高度為零的支柱鏈接底行容器的頂邊緣,以便將它們對(duì)齊。同時(shí),這意味著只需一個(gè)垂直支柱4205就能定義并控制那兩行之間的邊距尺寸。實(shí)際上,這是非常有用的,因?yàn)樗馕吨鴮?duì)表格邊距的更改只涉及改變一個(gè)支柱的首選或?qū)嶋H距離,而無(wú)不是像圖42A中的示例要求的那樣對(duì)多個(gè)支柱進(jìn)行改變。對(duì)于所示的鏈接最左一列的右邊緣并且還鏈接最右一列的左邊緣的零寬度的支柱4206,類似的邏輯關(guān)系也成立。
像在圖42A中那樣,圖42B中的例子還將表格的外邊緣固定到頁(yè)面上。就像對(duì)齊內(nèi)邊緣那樣,有可能使用零長(zhǎng)度的支柱來(lái)對(duì)齊容器的所有外邊緣,而不是按上述方式對(duì)表格的位置和尺寸進(jìn)行固定。這允許將表格移動(dòng)到頁(yè)面上的任何需要之處,而無(wú)需一個(gè)接一個(gè)地對(duì)多條固定外邊緣的位置進(jìn)行改變??梢允褂谜鹿?jié)18.3中所描述的版面方法實(shí)現(xiàn)該方法。
第三種替換方法可以使用導(dǎo)向來(lái)定義表格的外邊緣,并且使用零長(zhǎng)度的支柱來(lái)對(duì)齊表格的內(nèi)邊緣。有導(dǎo)向和支柱的許多其它可變組合也能夠?qū)崿F(xiàn)相似的效果。
注意到,需要某些對(duì)齊表格內(nèi)邊緣的方法,以便形成傳統(tǒng)觀念的表格。圖42C表示在既不使用導(dǎo)向也不使用支柱來(lái)對(duì)齊內(nèi)邊緣時(shí)所出現(xiàn)的情況。將容器4207再次作為表格的單元格,并利用支柱4208對(duì)相鄰容器之間的距離進(jìn)行定義。然而,注意到,本例缺少防止對(duì)角相對(duì)的容器重疊的方法,因?yàn)闆](méi)有使行和列的內(nèi)邊緣分開。
這可能會(huì)產(chǎn)生容器和內(nèi)容的重要并且可變的排列,并且章節(jié)18.3以及后續(xù)章節(jié)中描述的版面方法能夠生成此種排列(并非版面方法的所有現(xiàn)有示例均能生成此種排列)。然而,對(duì)于傳統(tǒng)觀念的表格,圖42A和42B所示的例子更適于實(shí)現(xiàn)完全對(duì)齊的行和列。
工業(yè)適用性上述方法適用于計(jì)算機(jī)和數(shù)據(jù)處理行業(yè),并且特別適用于利用可變數(shù)據(jù)再現(xiàn)實(shí)質(zhì)上具有相同格式和版面的大量文檔的情況。其例子包括為名稱、地址和其它個(gè)人資料均不同的許多人生成信件。另一個(gè)例子是,生成與不同度假目的地有關(guān)的廣告小冊(cè)子,其中每個(gè)小冊(cè)子的特征在于包括文本和圖像的獨(dú)特內(nèi)容,但是所有小冊(cè)子都是根據(jù)通用版面而生成的,其中該版面表示發(fā)布廣告的組織機(jī)構(gòu)的品牌或者式樣。許多其它例子也適用。
上文僅僅描述了本發(fā)明的某些實(shí)施例,可以對(duì)其做出各種修改和/或改變,而并不背離本發(fā)明的范圍和實(shí)質(zhì),所述實(shí)施方式是說(shuō)明性的而不是限制性的。
權(quán)利要求
1.一種校對(duì)多個(gè)可變數(shù)據(jù)文檔的方法,其中每篇文檔都是從通用版面生成的,在該通用版面中將可變數(shù)據(jù)內(nèi)容放置到一個(gè)或多個(gè)容器內(nèi),所述容器具有由版面規(guī)則定義的所述版面內(nèi)的位置和尺寸,所述方法包括以下步驟(a)估算每個(gè)所述文檔中的每個(gè)所述容器的多個(gè)變化度量;(b)確定從所述通用版面生成的標(biāo)準(zhǔn)文檔的度量;(c)將所述確定的標(biāo)準(zhǔn)文檔的度量與所述估算的多個(gè)度量中的度量進(jìn)行比較;以及(d)根據(jù)所述比較的結(jié)果,給出一個(gè)具有至少一個(gè)度量的文檔,就所述至少一個(gè)度量來(lái)說(shuō)比較結(jié)果在所述估算的多個(gè)度量中較大。
2.根據(jù)權(quán)利要求1的方法,其中,步驟(b)包括(ba)確定在全部所述文檔上每個(gè)所述容器的所述變化度量的平均值;(bb)對(duì)于每個(gè)所述文檔(bba)利用所述相應(yīng)的估算變化度量,根據(jù)所述相應(yīng)的平均變化度量,計(jì)算每個(gè)所述容器的偏差度量;(bbb)處理該偏差度量,以獲得所述文檔的偏差值;以及步驟(c)包括比較該文檔的偏差值,以便標(biāo)識(shí)用于進(jìn)行進(jìn)一步估算的至少一組所述文檔。
3.根據(jù)權(quán)利要求2的方法,其中,所述的一組包括具有最大所述偏差值的文檔。
4.根據(jù)權(quán)利要求2的方法,其中,所述的一組包括具有最小所述偏差值的文檔。
5.根據(jù)權(quán)利要求2的方法,其中,所述變化度量包括所述容器的尺寸。
6.根據(jù)權(quán)利要求2的方法,其中,通過(guò)將相應(yīng)的高度和寬度相乘,將所述尺寸確定為所述容器的面積。
7.根據(jù)權(quán)利要求2的方法,其中,所述尺寸包括所述容器的相應(yīng)高度和寬度的和。
8.根據(jù)權(quán)利要求2的方法,其中,所述變化度量包括所述容器的邊緣位置的度量。
9.根據(jù)權(quán)利要求5的方法,其中,步驟(a)包括對(duì)每個(gè)所述文檔內(nèi)的每個(gè)所述容器的最小和最大容器尺寸進(jìn)行確定;以及步驟(bba)包括利用所述相應(yīng)的最小和最大容器尺寸,根據(jù)所述相應(yīng)平均容器尺寸,計(jì)算每個(gè)所述容器的最大尺寸偏差。
10.根據(jù)權(quán)利要求2的方法,其中,步驟(bbb)包括用統(tǒng)計(jì)方式計(jì)算偏差的平方和,以便獲得所述文檔的所述偏差度量。
11.根據(jù)權(quán)利要求2的方法,其中,步驟(a)包括在不提交所述容器內(nèi)的內(nèi)容的情況下,為每個(gè)所述容器執(zhí)行版面計(jì)算。
12.根據(jù)權(quán)利要求2的方法,其中,步驟(a)包括在每個(gè)所述容器的所有邊緣上的計(jì)算。
13.根據(jù)權(quán)利要求2的方法,其中,步驟(c)包括以下子步驟(ca)按從小到大的順序?qū)ζ疃攘窟M(jìn)行排序;以及(cb)從排序序列的一端選擇所述一組作為可確定數(shù)目的所述文檔。
14.根據(jù)權(quán)利要求2的方法,其中,所述進(jìn)一步估算包括手工檢查所述組的文檔。
15.根據(jù)權(quán)利要求13的方法,其中,所述的一端包括具有最大所述偏差值的所述文檔,并且步驟(d)包括對(duì)不是所述組中一部分的一篇所述文檔進(jìn)行印刷。
16.根據(jù)權(quán)利要求15的方法,其中,所述一組文檔是獨(dú)立布置的。
17.根據(jù)權(quán)利要求2的方法,其中,當(dāng)用戶對(duì)已建立的所述版面進(jìn)行激勵(lì)時(shí),執(zhí)行所述方法步驟。
18.根據(jù)權(quán)利要求1的方法,其中,步驟(a)包括估算每個(gè)所述文檔中的每個(gè)所述容器的尺寸;步驟(b)包括計(jì)算每個(gè)所述文檔的估算尺寸的總和,以便獲得相應(yīng)文檔尺寸的度量;步驟(c)包括按尺寸順序?qū)Χ攘窟M(jìn)行排序;以及步驟(d)從所述排序的度量中給出所述文檔的至少一個(gè)子集,用于進(jìn)行進(jìn)一步估算。
19.根據(jù)權(quán)利要求18的方法,其中,從以下文檔構(gòu)成的組中選擇所述一個(gè)子集(i)預(yù)定數(shù)目的最小尺寸文檔;(ii)預(yù)定數(shù)目的最大尺寸文檔;以及(iii)預(yù)定數(shù)目的居中排列的文檔,其表示所述文檔的近似平均尺寸。
20.根據(jù)權(quán)利要求18的方法,其中,當(dāng)用戶對(duì)已建立的所述版面進(jìn)行激勵(lì)時(shí),執(zhí)行所述方法步驟。
21.根據(jù)權(quán)利要求1的方法,其中,步驟(a)包括估算每個(gè)所述文檔中的每個(gè)所述容器的尺寸;步驟(b)包括計(jì)算每個(gè)所述文檔的估算尺寸的總和,以獲得每個(gè)所述文檔的印刷尺寸值;步驟(c)包括(ca)從相應(yīng)文檔尺寸中減去印刷尺寸值,以便確定每個(gè)所述文檔的空白值;以及(cb)按順序?qū)瞻字颠M(jìn)行排序;以及步驟(d)包括給出所述排序文檔的至少一個(gè)子集用于進(jìn)行進(jìn)一步估算。
22.根據(jù)權(quán)利要求21的方法,其中,當(dāng)用戶對(duì)已建立的所述版面進(jìn)行激勵(lì)時(shí),執(zhí)行所述方法步驟。
23.一種基于模板對(duì)可變數(shù)據(jù)文檔的版面進(jìn)行創(chuàng)建的方法,所述方法包括以下步驟(a)在圖形用戶界面上建立模板;(b)在所述模板內(nèi)布置至少一個(gè)容器以構(gòu)成所述版面;(c)修改版面,以便由此通過(guò)將示例性內(nèi)容放置到所述至少一個(gè)容器中,來(lái)生成一篇示例性文檔,其中根據(jù)所放置內(nèi)容的至少一個(gè)屬性,改變?cè)谒霭婷嬷兴鲋辽僖粋€(gè)容器的至少一維尺寸和/或所述至少一個(gè)容器的位置;以及(d)通過(guò)所述圖形用戶界面在所述版面中顯示所述示例性文檔。
24.根據(jù)權(quán)利要求23的方法,還包括以下步驟(e)通過(guò)改變所述版面中所述至少一個(gè)容器的特征,來(lái)修改版面;以及(f)重復(fù)步驟(c)和步驟(d),以顯示修改后的示例性文檔。
25.根據(jù)權(quán)利要求24的方法,其中,所述改變包括對(duì)所述至少一個(gè)容器的至少一個(gè)特征設(shè)置約束。
26.根據(jù)權(quán)利要求25的方法,其中,所述約束是從包括以下約束的組中選擇的(i)所述一個(gè)容器和在其中放置所述容器的頁(yè)面的印刷邊距之間的約束;(ii)和所述一個(gè)容器的尺寸有關(guān)的約束;以及(iii)將所述版面內(nèi)所述一個(gè)容器的所述特征和另一個(gè)所述容器的特征相關(guān)聯(lián)的約束。
27.根據(jù)權(quán)利要求23的方法,其中,所述示例性內(nèi)容包括用戶從一組內(nèi)容記錄中選擇的單條內(nèi)容記錄,其中相應(yīng)的一組可變數(shù)據(jù)文檔是從所述組內(nèi)容記錄中形成的。
28.一種其上記錄有計(jì)算機(jī)程序的計(jì)算機(jī)可讀介質(zhì),所述程序適合于使計(jì)算機(jī)執(zhí)行用于校對(duì)多個(gè)可變數(shù)據(jù)文檔的過(guò)程,其中每篇文檔都是從一個(gè)通用版面生成的,在該通用版面中將可變數(shù)據(jù)內(nèi)容放置到一個(gè)或多個(gè)容器內(nèi),所述容器具有由版面規(guī)則定義的所述版面內(nèi)的位置和尺寸,所述程序包括用于估算每個(gè)所述文檔內(nèi)的每個(gè)所述容器的多個(gè)變化度量的代碼;用于確定從所述通用版面中生成的標(biāo)準(zhǔn)文檔的度量的代碼;用于將所述確定的標(biāo)準(zhǔn)文檔的度量與所述估算的多個(gè)度量中的度量進(jìn)行比較的代碼;以及用于給出一篇至少具有一個(gè)度量的文檔,就所述至少一個(gè)度量來(lái)說(shuō)比較結(jié)果是所述估算的多個(gè)度量中較大的。
29.一種其上記錄有計(jì)算機(jī)程序的計(jì)算機(jī)可讀介質(zhì),所述程序適合于使計(jì)算機(jī)執(zhí)行基于模板對(duì)可變數(shù)據(jù)文檔的版面進(jìn)行創(chuàng)建的過(guò)程,所述程序包括用于在圖形用戶界面中建立模板的代碼;用于在模板內(nèi)設(shè)置至少一個(gè)容器以形成所述版面的代碼;用于修改版面以便由此通過(guò)將示例性內(nèi)容放置到所述至少一個(gè)容器中來(lái)生成一篇示例性文檔的代碼,其中根據(jù)所放置內(nèi)容的至少一個(gè)屬性,對(duì)所述版面中的所述至少一個(gè)容器的至少一維尺寸和/或所述至少一個(gè)容器的位置進(jìn)行改變;以及用于通過(guò)所述圖形用戶界面在所述版面中顯示所述示例性文檔的代碼。
30.用于校對(duì)多個(gè)可變數(shù)據(jù)文檔的計(jì)算機(jī)裝置,其中每篇所述文檔都是從通用版面生成的,在該通用版面中將可變數(shù)據(jù)內(nèi)容放置到一個(gè)或多個(gè)容器內(nèi),所述容器具有由版面規(guī)則定義的所述版面內(nèi)的位置和尺寸,所述裝置包括用于估算每個(gè)所述文檔內(nèi)的每個(gè)所述容器的多個(gè)變化度量的裝置;用于確定從所述通用版面中生成的標(biāo)準(zhǔn)文檔的度量的裝置;用于將所述確定的標(biāo)準(zhǔn)文檔的度量與所述估算的多個(gè)度量中的度量進(jìn)行比較的裝置;以及用于給出一篇至少具有一個(gè)度量的文檔的裝置,其中就所述至少一個(gè)度量來(lái)說(shuō)比較結(jié)果是所述估算的多個(gè)度量中較大的。
31.一種用于基于模板對(duì)可變數(shù)據(jù)文檔的版面進(jìn)行創(chuàng)建的計(jì)算機(jī)裝置,所述裝置包括用于在圖形用戶界面上建立模板的裝置;用于在模板內(nèi)設(shè)置至少一個(gè)容器以形成所述版面的裝置;用于修改版面以便由此通過(guò)將示例性內(nèi)容放置到所述至少一個(gè)容器中來(lái)生成一篇示例性文檔的裝置,其中根據(jù)所放置內(nèi)容的至少一個(gè)屬性,對(duì)所述版面中的所述至少一個(gè)容器的至少一維尺寸和/或所述至少一個(gè)容器的位置進(jìn)行改變;以及用于通過(guò)所述圖形用戶界面在所述版面中顯示所述示例性文檔的裝置。
全文摘要
公開了用于對(duì)供印刷的可變文檔進(jìn)行校對(duì)的方法和裝置,其中配置了GUI,以便允許用戶對(duì)與用于生成可變文檔的模板內(nèi)的內(nèi)容容器相關(guān)聯(lián)的版面規(guī)則進(jìn)行操作。選擇性校對(duì)包括校對(duì)多個(gè)可變數(shù)據(jù)文檔,其中每篇文檔都是從通用版面生成的,在該通用版面中將可變數(shù)據(jù)內(nèi)容放置到容器內(nèi),其中容器具有由版面規(guī)則定義的版面內(nèi)的位置和尺寸。現(xiàn)場(chǎng)校對(duì)包括根據(jù)在GUI中所建立的模板對(duì)可變數(shù)據(jù)文檔的版面進(jìn)行創(chuàng)建。將容器設(shè)置在模板內(nèi),以便形成版面,然后修改版面,從而由此通過(guò)把示例性內(nèi)容放置到容器中而生成一篇示例性文檔,其中根據(jù)所放置的內(nèi)容的一個(gè)屬性,對(duì)容器的一維尺寸和/或容器的位置進(jìn)行改變。通過(guò)GUI在版面中顯示示例性文檔,以便用戶進(jìn)行可視校對(duì)。
文檔編號(hào)G06T11/60GK1607524SQ200410076908
公開日2005年4月20日 申請(qǐng)日期2004年9月3日 優(yōu)先權(quán)日2003年10月15日
發(fā)明者安德魯·詹姆斯·羅, 約翰·查爾斯·布魯克, 艾倫·韋爾夫·湯尼森, 拉克倫·詹姆斯·帕特里克 申請(qǐng)人:佳能株式會(huì)社
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
永福县| 玛纳斯县| 逊克县| 灵山县| 太和县| 宣威市| 阿鲁科尔沁旗| 双江| 安阳市| 奇台县| 隆德县| 彭山县| 宁陕县| 鄂托克旗| 分宜县| 顺昌县| 昔阳县| 田阳县| 凤台县| 修水县| 台南市| 三江| 云和县| 绥芬河市| 台南市| 夏邑县| 鞍山市| 永修县| 双牌县| 交口县| 孟州市| 淳化县| 尼勒克县| 乌海市| 吴江市| 建德市| 吐鲁番市| 体育| 汝南县| 东乌| 玉环县|