專利名稱:用于創(chuàng)建和編輯可變數(shù)據(jù)文檔的用戶界面的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及用于創(chuàng)建、編輯和印刷由文本和圖形組成的文檔的軟件實現(xiàn)方法和處理,并且尤其涉及可變數(shù)據(jù)文檔的創(chuàng)建、編輯和印刷。
背景技術(shù):
可變數(shù)據(jù)印刷傳統(tǒng)上,當(dāng)印刷大量文檔時,使用的印刷處理是需要文檔的物理表示的模擬處理。這些物理表示包括必須在印刷前制造的溴化物和/或印刷版。這意味著生成定制文檔是昂貴的,并且大量文檔操作通常涉及印刷多份完全相同的文檔。
可以使用數(shù)字印刷處理來生成定制文檔,其中無需在印刷前準備文檔的物理拷貝。直到最近,要么是數(shù)字處理昂貴,要么就是效果比傳統(tǒng)的模擬印刷處理產(chǎn)生的質(zhì)量要差。
然而,在過去的五年中,數(shù)字印刷方面的進展已經(jīng)顯著降低了創(chuàng)建高質(zhì)量定制文檔的成本。這些進展已經(jīng)使得可變數(shù)據(jù)印刷越來越普遍。可變數(shù)據(jù)印刷軟件正變得可用于允許文檔作者不僅僅創(chuàng)建單個文檔而且可以創(chuàng)建相關(guān)文檔族,其中每篇文檔都是為它的預(yù)期讀者定制的。
為了使高質(zhì)量的定制印刷切實可行,需要解決幾個問題。一個問題是印刷產(chǎn)品的質(zhì)量。直到最近,數(shù)字處理才能夠接近傳統(tǒng)印刷處理的分辨率。另一個問題是,通常需要大量數(shù)據(jù)才能以數(shù)字形式表示高質(zhì)量的文檔,特別是在文檔包含許多高分辨率圖像時。這使得不可能通過計算機網(wǎng)絡(luò)將大量定制文檔電子地傳送到數(shù)字印刷機。第三個問題是,與簡單文檔相比,定制文檔通常需要更多的努力和技能來進行創(chuàng)建和維護。定制文檔是通過將可變數(shù)據(jù)插入到文檔模板中而創(chuàng)建的。文檔模板是具有用于插入可變數(shù)據(jù)的空位的文檔。文檔模板可以包括某些由許多文檔共用的數(shù)據(jù),以及定義了如何布置每個定制文檔的信息,其中定制文檔是通過將數(shù)據(jù)插入到模板的可變數(shù)據(jù)空位中生成的。因為需要將頁面的版面定義為能夠處理不同大小的數(shù)據(jù)或缺失的數(shù)據(jù)項,所以創(chuàng)作可變數(shù)據(jù)模板比創(chuàng)作簡單文檔更加困難。另外,還需要定義和維護模板和數(shù)據(jù)之間的關(guān)系。同樣,經(jīng)常需要數(shù)據(jù)庫技能,以便能夠利用可變數(shù)據(jù)印刷技術(shù)創(chuàng)建定制文檔。
數(shù)字印刷硬件的質(zhì)量已經(jīng)提高到其效果可與高端模擬印刷生成的效果相媲美的程度,同時其成本也已顯著下降。諸如PPML之類的新標準允許在不發(fā)送大量重復(fù)數(shù)據(jù)的情況下,經(jīng)由網(wǎng)絡(luò)將多組相關(guān)文檔發(fā)送到印刷機。這降低了可變數(shù)據(jù)印刷所需的網(wǎng)絡(luò)帶寬。
對于可變數(shù)據(jù)文檔的創(chuàng)作和管理的復(fù)雜性問題,沒有容易的解決方案。定制印刷以“郵件合并”的形式在字處理軟件中已經(jīng)粗略地應(yīng)用許多年了,但是郵件合并僅僅支持對各個輸出文檔的版面進行非常粗略的控制。最新的可變數(shù)據(jù)印刷軟件允許創(chuàng)建復(fù)雜、靈活的版面,該版面適應(yīng)于每個文檔中可能不同的數(shù)據(jù)項尺寸和形狀,但是這些應(yīng)用程序仍然是復(fù)雜的,并且難以使用。
版面模型通常,將包含文本和圖形的文檔組織為不同類型的項目的集合。項目可以是文本、圖形、或者諸如組之類的作為項目集合的其它種類的抽象對象。版面項目通常具有矩形形狀,或者具有矩形區(qū)域。每個應(yīng)用程序允許的用于定義如何布置項目的規(guī)則,表示一個版面模型。在可變數(shù)據(jù)印刷應(yīng)用程序中,規(guī)則必須對當(dāng)項目尺寸改變時如何計算版面進行定義。
分層版面模型當(dāng)前的可變數(shù)據(jù)印刷解決方案通常使用分層模型來定義版面。這些模型類似于HTML和XML文檔所使用的模型。此類模型的例子為CSS盒子模型(CSS box model)和XSLFO。在此類版面模型中,通過在版面區(qū)域內(nèi)垂直或水平地堆疊矩形項目,將矩形項目布置在矩形版面區(qū)域內(nèi)。
除了水平和垂直堆疊之外,某些應(yīng)用程序支持的另一種更普通的備選方案是,允許以垂直列或水平行方式堆疊項目,如頁面上的幾行文字那樣。在此種形式的版面中,如果項目太多以致于不合適在一行或一列內(nèi),則開始一個新的行或列,并且超出的項目“自動換行”到下一行或下一列。這類似于字處理器中的文字自動換行。對于頁面或版面區(qū)域的尺寸可能變化很大的應(yīng)用程序、諸如web應(yīng)用程序來說,這種布置項目的方式是最有用的。對于可變數(shù)據(jù)印刷應(yīng)用程序而言,堆疊不太有用,這是因為在可變數(shù)據(jù)印刷應(yīng)用程序中,版面的質(zhì)量通常是重要的,并且當(dāng)項目自動換行到下一行或下一列時,版面通常會使人感到不舒適。
在分層版面模型中,可以通過使用項目組對復(fù)雜的版面進行定義。組是包含其它項目的矩形版面項目,并且實質(zhì)上是一個版面。組內(nèi)的項目布置在組的邊界矩形內(nèi)。
可以利用對齊方式選項對版面內(nèi)項目的位置進行控制,例如,垂直堆疊中的項目可以左對齊,以便使項目總是盡可能地靠近包含垂直堆疊的矩形的左側(cè)。可以把對齊方式和組關(guān)聯(lián)起來,以使組中的所有項目具有相同的對齊方式,或者組內(nèi)的每個項目可以具有相應(yīng)的關(guān)聯(lián)對齊方式選項。通常支持多種對齊方式選項,包括居中、左對齊和右對齊。
利用與各項目關(guān)聯(lián)的邊距、或者與包含的版面或組關(guān)聯(lián)的邊距,也可以控制項目的位置。邊距定義了兩個相鄰項目之間的最小允許距離。
基于約束的模型與先前開發(fā)的更普通的基于約束的模型相比,當(dāng)前的分層版面模型更易于理解?;诩s束的模型已經(jīng)用于計算機輔助設(shè)計(CAD)應(yīng)用程序、用戶界面構(gòu)造以及窗口管理。在用戶界面構(gòu)造應(yīng)用程序中,要布置的對象是諸如按鈕和輸入?yún)^(qū)域之類的窗口小部件。在窗口管理應(yīng)用程序中,要布置的對象是用于表示數(shù)據(jù)視圖的窗口,其作為計算機操作系統(tǒng)的用戶界面的一部分。
在用戶界面構(gòu)造應(yīng)用程序中,使用動態(tài)的版面約束,以允許圖形用戶界面(GUI)適合于不同的屏幕分辨率、以及諸如使用不同字體和文本大小之類引起的變化。動態(tài)版面簡化了構(gòu)造多平臺用戶界面的過程。
在窗口管理應(yīng)用程序中,用戶能夠應(yīng)用動態(tài)約束,來創(chuàng)建在添加、刪除窗口時或者在窗口改變大小或位置時保留的窗口之間的關(guān)系。
CAD應(yīng)用程序涉及很普通的幾何約束,并且版面模型更加復(fù)雜,更難以使用,并且對版面的計算比文檔版面模型更慢。例如,用于CAD應(yīng)用程序的某些約束解算器,支持對兩條線段平行的指定,而兩條線段平行是無法使用線性方程表示的。
如果在圖形編輯操作期間每秒可能需要更新版面許多次,則用戶界面(UI)和窗口管理應(yīng)用程序所使用的基于約束的版面模型必須足夠快,以便經(jīng)常交互使用,所以,版面方法需要足夠快,以支持此類操作。此類應(yīng)用程序通常使用專用約束解算器進行版面計算。這些應(yīng)用程序所使用的約束解算器通常支持線性約束,線性約束可以表示為線性方程(即線性等式)、或者線性不等式或者這二者。通常,此類約束解算器還有一個對解的質(zhì)量進行定義的目標函數(shù)。約束解算器的目標是在不違反任何約束的條件下,最小化(或最大化)目標函數(shù)的值。如果目標函數(shù)也是線性的,則此類問題稱為線性規(guī)劃。此類問題是非常公知的優(yōu)化問題,并且存在求解此類問題的已知算法。通常利用一種被稱為單形算法的算法來求解此類問題。
假定由一組約束和一個目標函數(shù)定義了一個版面問題,該問題可能是過約束的,以致于沒有解。作為選擇,該問題可能是欠約束的,以致于有許多解,或者可能有一個解。為了對版面進行計算,版面模型必須確保版面恰好有一個解。實現(xiàn)它的一種方法是,向用戶報告沒有解或有許多解,并允許用戶修正該問題。這通常不是一種可接受的解決方案,是因為很難向用戶提供關(guān)于為何該問題是過約束或欠約束的有意義的信息。如果系統(tǒng)是過約束的,則許多約束可能同時互相矛盾。如果系統(tǒng)是欠約束的,則如何防止用戶添加矛盾的約束也不是顯然的。在使用圖形界面對約束進行編輯時,這一點尤其困難。
避免無解的一種已知方法是,將約束優(yōu)先級劃分為所謂的約束層級。如果對于約束無解,則按照優(yōu)先級的相反次序忽略約束,直至可能有解為止。
避免欠約束問題的一種已知方法,是使用非線性目標函數(shù)。如果使用合適的嚴格凸函數(shù),則問題總是有唯一解。通常使用二次目標函數(shù),是因為存在解決帶有線性約束和二次目標函數(shù)的優(yōu)化問題的公知技術(shù)。其中最簡單的是改進的單形算法。
生成可變數(shù)據(jù)文檔的另一個問題,是對正在生成的文檔進行預(yù)覽。字處理器和桌面印刷應(yīng)用程序通常使用“印刷預(yù)覽”功能,以便幫助用戶在提交印刷之前對其工作進行全面評估。當(dāng)需要預(yù)覽大量文檔時,這是很費力的。
發(fā)明內(nèi)容
本發(fā)明的目的在于基本上克服或至少改善一個或多個與可變文檔印刷相關(guān)聯(lián)的問題。
根據(jù)本發(fā)明的一個方面,公開了一種基于模板創(chuàng)建可變數(shù)據(jù)文檔的版面的方法,該方法包括以下步驟在該模板中設(shè)置至少一個容器,以形成版面;建立至少一個與該容器的至少一個特征中每個選定特征相關(guān)聯(lián)的約束;使用圖形用戶界面(GUI)顯示由建立步驟建立的、與由設(shè)置步驟設(shè)置的容器相關(guān)聯(lián)的約束;以及修改版面,以便通過把內(nèi)容放置到多個容器中而生成文檔,其中在滿足版面內(nèi)的每個約束的條件下,根據(jù)所放置內(nèi)容的屬性,改變該至少一個容器的至少一維尺寸和該至少一個容器在版面內(nèi)的位置中的至少一個。
同時還公開了本發(fā)明的其他方面,包括用于執(zhí)行該方法的裝置和計算機程序。
以下參照
本發(fā)明的至少一種實施方式,其中圖1A表示用于可變數(shù)據(jù)印刷的計算機系統(tǒng)配置;圖1B是圖1A中的計算機模塊的示意方框圖;圖2表示用于可變數(shù)據(jù)印刷的另一備選計算機系統(tǒng)配置;圖3表示應(yīng)用程序主窗口的示例,該主窗口包括菜單欄、工具欄、工作區(qū)和浮動調(diào)色板;圖4表示了一個屏幕、工具和圖標,以說明本公開的各個方面,包括示例性容器創(chuàng)建、容器間的第一類支柱、錨點和滑塊;圖5A-5D表示第一示例性容器規(guī)則;圖6A-6C表示第三容器規(guī)則;圖6D和圖6E是描述了容器區(qū)域創(chuàng)建的流程圖;圖7A-7B表示一個具有三個欄的文本容器,以及通過使用指示設(shè)備的直接操作調(diào)整欄寬和裝訂線寬度大小的方法;圖8表示了一個屏幕、工具和圖標,以說明字符大小同步操作;圖9表示了一個屏幕、工具和圖標,以說明內(nèi)部邊距自動調(diào)整操作;圖10表示在兩個容器的邊緣之間添加支柱以便對距離約束進行描述的方法;
圖11表示了一個屏幕、工具和圖標,以說明用戶界面的幾種特征(feature)(包括第二示例性容器之間的支柱)的操作;圖12表示了一個屏幕,以說明不固定導(dǎo)向的操作;圖13和圖14表示數(shù)據(jù)源選擇方法;圖15表示用于數(shù)據(jù)源過濾的用戶界面;圖16和圖17表示一個用戶界面,用以說明用于瀏覽數(shù)據(jù)源的方法;圖18表示一個用戶界面示例,以說明數(shù)據(jù)源的變量以及用于瀏覽數(shù)據(jù)源的方法;圖19表示一個用戶界面,用于將數(shù)據(jù)源的變量與可變文檔模板相關(guān)聯(lián);圖20表示一個用戶界面,用于現(xiàn)場校對與可變文檔模板合并的數(shù)據(jù)源內(nèi)容;圖21A和圖21B表示用于選擇性校對的一種利用各文檔的容器的寬度和高度來計算普通文檔和最大差異文檔的方法;圖22為一個示例性版面,用于說明版面項目以及用作版面方法輸入的約束;圖23僅表示了對應(yīng)于圖22中的示例的垂直約束;圖24是表示圖23中的垂直約束的有向圖;圖25表示在執(zhí)行推動操作時所涉及的步驟;圖26表示推動操作的一個備選實現(xiàn)方式所涉及的步驟;圖27A-27F表示使用的推動操作示例,其中圖27A和圖27B表示推動操作示例的起始位置,圖27C和圖27D表示推動操作示例的中間階段,圖27E和圖27F表示推動操作示例的結(jié)果;圖28表示基于圖的版面計算中的高級步驟;圖29表示基于圖的版面計算實現(xiàn)中的高級步驟;圖30A表示基于圖的版面計算如何通過移動垂直標記來降低能量函數(shù)的值;圖30B表示基于圖的版面方法的另一種實現(xiàn)方式,它包括對固定中心規(guī)則的處理;圖31表示在基于圖的版面計算中如何計算移動一組標記的距離;圖32表示在將一組標記向右推動時,對推動的正向標記組和反向標記組進行計算所涉及的步驟;圖33A-33C顯示了如何利用基本模型的不同表示來規(guī)定容器的最小和最大高度;圖34是修改容器在版面中的邊緣位置以及與其它邊緣的相互作用的流程圖;圖35是用于編輯模板文檔的另一推動操作示例的流程圖;圖36是生成并且印刷可變數(shù)據(jù)文檔的方法的流程圖;圖37A-37D表示與圖4相對應(yīng)的示例性版面、以及對該版面中的各種約束進行存儲的方式;圖38說明了使用高度和寬度條來表示第二容器規(guī)則中的容器約束;圖39表示在一維空間上操作的版面引擎的使用示例;圖40A和圖40B表示在二維空間上操作的版面引擎的使用示例;圖41A-41K描述了在容器內(nèi)的文本布置以及它可能如何受到容器形狀的影響;以及圖42A-42C表示表的構(gòu)造方法。
具體實施例方式
1.概述公開了一種可變數(shù)據(jù)文檔創(chuàng)建和印刷系統(tǒng),它最好是被實現(xiàn)為一個軟件應(yīng)用程序。該應(yīng)用程序允許創(chuàng)建多篇形式相似但其內(nèi)容不同的文檔。這可以通過創(chuàng)建和編輯文檔模板、以及將文檔模板上的區(qū)域和各種數(shù)據(jù)相關(guān)聯(lián)來實現(xiàn)。
一個文檔模板可以包含多個容器,其中每個容器被配置為保存諸如文本或圖像數(shù)據(jù)之類的內(nèi)容。容器的位置和尺寸可以是固定的,或者可以根據(jù)用戶規(guī)定的規(guī)則在尺寸或位置方面因文檔不同而改變。這些容器的內(nèi)容可以是靜態(tài)的或可變的(即,取決于某些諸如數(shù)據(jù)庫之類的數(shù)據(jù)源)。
用戶可以規(guī)定從中獲取數(shù)據(jù)的各類數(shù)據(jù)源。數(shù)據(jù)源包含多個數(shù)據(jù)記錄。應(yīng)用程序提供了用于把數(shù)據(jù)和文檔模板中的容器關(guān)聯(lián)起來的機制。
然后,根據(jù)數(shù)據(jù)源和文檔模板中的容器之間的關(guān)聯(lián),將文檔模板和數(shù)據(jù)源中的數(shù)據(jù)“合并”起來,以便生成多個文檔。通常,為數(shù)據(jù)源中的每條記錄或每組記錄生成一個文檔。然后能夠根據(jù)需要將文檔保存到磁盤或進行印刷。
這些方案與現(xiàn)有技術(shù)相比提供了許多獨立優(yōu)勢。例如,與現(xiàn)有技術(shù)不同,當(dāng)對文檔模板進行編輯時,用戶可以選擇總是查看合并文檔之一。這是由于文檔模板和數(shù)據(jù)是動態(tài)合并的。因此,在編輯模板時,有可能至少看見生成文檔之一看上去是什么樣,而不用像現(xiàn)有技術(shù)中那樣,必須到特定的預(yù)覽區(qū)域才能看見文檔(而不是文檔模板)看上去是什么樣。
在適當(dāng)?shù)奈恢蔑@示有關(guān)容器的約束(其決定了容器能夠移動和改變尺寸的方式),并且無需像現(xiàn)有技術(shù)中那樣必須到獨立的屏幕或區(qū)域,而是能夠通過點擊容器上的各個位置,在適當(dāng)?shù)奈恢脤τ嘘P(guān)容器的約束進行編輯。與現(xiàn)有技術(shù)相比,這簡化了文檔模板的創(chuàng)建。
2.實現(xiàn)方式概述基本實現(xiàn)方式是可變數(shù)據(jù)文檔創(chuàng)建和印刷應(yīng)用程序,它包括至少一個用戶界面和一個版面引擎。一種具體的實現(xiàn)方式是,可在連有印刷機的個人計算機上執(zhí)行的軟件。在另一種實現(xiàn)方式中,應(yīng)用程序被實現(xiàn)為可在嵌入在印刷機或印刷控制器中的處理器上執(zhí)行的軟件,其中印刷機或印刷機控制器支持對可變數(shù)據(jù)文檔集的印刷。在另一種實現(xiàn)方式中,應(yīng)用程序被實現(xiàn)為可在web服務(wù)器上執(zhí)行的軟件,其中web服務(wù)器能夠提供為瀏覽者定制的文檔。這些實現(xiàn)方式還包括在適當(dāng)?shù)挠布b置上執(zhí)行時的這種軟件。
可變數(shù)據(jù)印刷是指印刷相關(guān)文檔的集合。在不可變數(shù)據(jù)印刷中,文檔是單獨印刷的,并且通常各文檔的數(shù)據(jù)是單獨發(fā)送到印刷機的。在可變數(shù)據(jù)印刷中,將包括多個相關(guān)文檔的印刷作業(yè)發(fā)送到印刷機。通常,可變數(shù)據(jù)印刷作業(yè)中的文檔包括多個文檔中出現(xiàn)的共享單元。通常這個數(shù)據(jù)每個作業(yè)僅向印刷機發(fā)送一次,而不是為每篇文檔重復(fù)發(fā)送。當(dāng)印刷可變數(shù)據(jù)印刷作業(yè)時,將共享的數(shù)據(jù)插入到每個文檔中。這可能要求在印刷頁面時對文檔頁面的版面進行計算。在這種情況下,版面方法可能是印刷機或印刷機服務(wù)器中的軟件的一部分。更通常地,在客戶機上對每篇文檔的版面進行計算,并且將版面作為印刷作業(yè)的一部分發(fā)送到印刷機,在這種情況下,版面方法是在客戶機上執(zhí)行的。
3.系統(tǒng)描述圖1A表示用于印刷可變數(shù)據(jù)文檔的系統(tǒng)100??梢栽趫D1B詳細描述的通用計算機模塊101內(nèi),實施在此描述的方法,其中可以用軟件(諸如在計算機模塊101內(nèi)執(zhí)行并且可在系統(tǒng)100上運行的版面編輯應(yīng)用程序121)全部或部分地實現(xiàn)所述處理。特別地,可以利用計算機101執(zhí)行的軟件中的指令,實現(xiàn)版面編輯和隨后的印刷步驟??梢詫⒃撥浖鎯Φ接嬎銠C可讀介質(zhì)中,計算機可讀介質(zhì)例如包括下文描述的存儲設(shè)備。從計算機可讀介質(zhì)中將該軟件加載到計算機中,并且由計算機101執(zhí)行。其上記錄有此類軟件或計算機程序的計算機可讀介質(zhì)是計算機程序產(chǎn)品。在計算機中使用計算機程序產(chǎn)品,最好是產(chǎn)生一種用于文檔版面編輯和可變文檔印刷的有利裝置。
計算機模塊101連接到諸如鍵盤132之類的輸入設(shè)備、和諸如鼠標133之類的指示設(shè)備,并且還連接到包括顯示設(shè)備144的輸出設(shè)備,以及可選地連接到本地印刷機145。輸入/輸出接口138能夠經(jīng)由網(wǎng)絡(luò)連接107,將計算機模塊101連接到系統(tǒng)100的其它計算設(shè)備。網(wǎng)絡(luò)連接107通常為局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)。
計算機模塊101通常包括至少一個處理器單元135、一個存儲器單元136、和輸入/輸出(I/O)接口,其中存儲器單元136例如是由半導(dǎo)體隨機存取存儲器(RAM)和只讀存儲器(ROM)構(gòu)成的,輸入/輸出(I/O)接口包括視頻接口137、以及用于鍵盤132和鼠標133的I/O接口143。提供了一個存儲設(shè)備139,該設(shè)備通常包括硬盤驅(qū)動器140和軟盤驅(qū)動器141。也可以使用磁帶驅(qū)動器(未示出)。CD-ROM驅(qū)動器142通常被提供作為非易失性數(shù)據(jù)源。正如相關(guān)領(lǐng)域技術(shù)人員已知的那樣,計算機模塊101使用諸如GNU/Linux或Microsoft Windows之類的操作系統(tǒng),并且計算機模塊101的組件135到143通常根據(jù)操作系統(tǒng)經(jīng)由互連總線134進行通信,并且其通信方式產(chǎn)生了由此形成的計算機系統(tǒng)的常規(guī)操作方式??梢栽谄渖蠈嵤┧枋龇桨傅挠嬎銠C示例,包括IBM-PC及其兼容機、Sun Sparcstation或由此衍生的類似計算機系統(tǒng)。
通常,版面編輯應(yīng)用程序121駐留在硬盤驅(qū)動器140上,并且在其執(zhí)行中由處理器135進行讀取控制。通過使用半導(dǎo)體存儲器136,可能和硬盤驅(qū)動器140合作,可以實現(xiàn)對程序121以及從網(wǎng)絡(luò)1020中讀取的任意數(shù)據(jù)的中間存儲。在一些例子中,可以通過將應(yīng)用程序121編碼到CD-ROM或軟盤上,并經(jīng)由相應(yīng)的驅(qū)動器142或141對其進行讀取,來向用戶提供應(yīng)用程序121,或者可選地,應(yīng)用程序121可以由用戶從網(wǎng)絡(luò)連接107上進行讀取。另外,也可以從其它合適大小的計算機可讀介質(zhì)中將軟件加載到計算機模塊101中,所述介質(zhì)包括磁帶、ROM或集成電路、磁光盤、計算機模塊101與另一設(shè)備之間的無線或紅外傳輸信道、諸如PCMCIA卡之類的計算機可讀卡、以及包括電子郵件傳輸和網(wǎng)站上記錄的信息等的因特網(wǎng)和內(nèi)聯(lián)網(wǎng)。以上僅僅是相關(guān)計算機可讀介質(zhì)的示例??梢允褂闷渌嬎銠C可讀介質(zhì)。
同時名為版面編輯的應(yīng)用程序121,還操作用以執(zhí)行可變數(shù)據(jù)印刷(VDP),并且該程序包括兩個軟件組件。這些組件中的第一個組件是版面引擎105,它是用于計算具有給定約束和尺寸的矩形和線條在矩形區(qū)域內(nèi)的位置的軟件。第二個組件-用戶界面103組件提供了一種機制,用于允許用戶構(gòu)造文檔模板以及將文檔模板中的區(qū)域和數(shù)據(jù)源關(guān)聯(lián)起來。用戶界面103和版面引擎105經(jīng)由通信信道123進行通信。用于文檔生成的數(shù)據(jù)源通常是駐留在數(shù)據(jù)庫服務(wù)器117上的數(shù)據(jù)庫119,數(shù)據(jù)庫服務(wù)器117通常由在其上運行數(shù)據(jù)庫應(yīng)用程序的另一臺計算機構(gòu)成。主機101借助于網(wǎng)絡(luò)連接107與數(shù)據(jù)庫服務(wù)器117進行通信??勺償?shù)據(jù)印刷應(yīng)用程序121生成文檔模板,該文檔模板能夠被保存到主機101或文件服務(wù)器115上,其中文件服務(wù)器115通常由另一臺計算機構(gòu)成??勺償?shù)據(jù)印刷應(yīng)用程序121還生成由文檔模板合并數(shù)據(jù)而形成的文檔??梢詫⑦@些文檔保存到主機101上的本地文件系統(tǒng)中,保存到文件服務(wù)器115上,或直接發(fā)送到印刷服務(wù)器109或印刷機113用于進行印刷。印刷服務(wù)器109是一臺計算機,用于向不能直接聯(lián)網(wǎng)的印刷機提供網(wǎng)絡(luò)能力。將印刷服務(wù)器109和印刷機113經(jīng)由典型通信信道111進行連接。
除了增加了引擎服務(wù)器227以外,圖2與圖1類似,其中引擎服務(wù)器227包含版面引擎105的獨立版本225。引擎服務(wù)器227是另一臺典型計算機。可以由版面引擎225將文件服務(wù)器115上存儲的文檔模板和數(shù)據(jù)庫119中存儲的數(shù)據(jù)進行組合,以便生成文檔,用于印刷或其它目的??梢酝ㄟ^用戶界面103對此類操作進行請求,或者僅僅請求印刷一條具體記錄。
4.主窗口參照圖3,用戶界面103包括由應(yīng)用程序窗口301構(gòu)成的圖形用戶界面,當(dāng)運行時,將應(yīng)用程序窗口301顯示在視頻顯示器144上。窗口301的特征在于菜單欄302、工具欄區(qū)域303、工作區(qū)306、可選的浮動調(diào)色板311、以及光標/指針設(shè)備313,其中工具欄區(qū)域303在某些實現(xiàn)方式中可以分離出來并移動到屏幕上的不同位置,光標/指針設(shè)備313的位置通常與鼠標133的位置或運動相關(guān)聯(lián)。
菜單欄302具有許多菜單項304,正如現(xiàn)有技術(shù)中常見的那樣,它在被激活時擴展為菜單選項的分層結(jié)構(gòu)。
工具欄303具有許多工具按鈕或小部件305,可以根據(jù)應(yīng)用程序的特定模式對其每一個進行隱藏或顯示。
可選標尺308可以用于指示指針、頁面、線條、邊距向?qū)?、容器或其它對象在工作區(qū)中的位置。標尺308可以顯示所用單位的數(shù)字指示,所用單位例如是英寸、毫米或像素。
浮動調(diào)色板311可以用于訪問諸如可變數(shù)據(jù)庫之類的附加功能。調(diào)色板311具有其特有的窗口控件312,該窗口控件312允許對調(diào)色板311進行移動、調(diào)整大小或關(guān)閉??蛇x地,調(diào)色板311可以一直保持在工作區(qū)的前面,或者可以隱藏在其它對象的后面??梢韵拗普{(diào)色板311只出現(xiàn)在應(yīng)用程序窗口301的范圍之內(nèi),或者可以允許它部分或全部地出現(xiàn)在應(yīng)用程序窗口301之外。
參照圖4,顯示了工具欄區(qū)域303,它具有至少下列用戶可選的圖標“按鈕”·選擇工具按鈕403用于對容器邊緣進行選擇、移動、縮放、調(diào)整大小和鎖定/解除鎖定。通過圍繞容器拖動選擇框或者在選擇容器時同時按下CTRL鍵,可以對容器進行多重選擇。
·圖像容器工具按鈕405用于創(chuàng)建用于保存靜態(tài)或可變圖像的容器。
·文本容器工具按鈕404用于創(chuàng)建用于保存靜態(tài)或可變文本的容器。
·支柱工具按鈕406用于對容器之間的距離進行控制。
正如現(xiàn)有技術(shù)中公知的那樣,可利用上下文敏感的工具提示來實現(xiàn)此類按鈕。
5.文檔模板工作區(qū)306用于查看和編輯文檔模板的設(shè)計。這允許用戶設(shè)計正在準備的文檔的印刷外觀,并根據(jù)正在與文檔模板合并的可變數(shù)據(jù)的數(shù)量和大小,理解各合并文檔是如何變化的。
如果已經(jīng)將外部數(shù)據(jù)源鏈接到該模板,則在其容器中顯示可變文本和圖像,從而使用戶能夠在他們工作時預(yù)覽當(dāng)前的文檔。
每當(dāng)用戶滾動光標或選擇容器時,就對描述了文檔結(jié)構(gòu)及其可變數(shù)據(jù)容器的行為的可視線索進行顯示。
工作區(qū)306的特征在于滾動條307、可選標尺308以及文檔模板309。文檔模板309能夠顯示多個頁面。
正如現(xiàn)有技術(shù)中公知的那樣,給定文檔模板的頁面大小是由用戶規(guī)定的。各文檔中的實際頁數(shù)可以取決于可變數(shù)據(jù)而發(fā)生變化。如果不適于在一個頁面上,則自動創(chuàng)建附加頁面以便顯示數(shù)據(jù)。
在每個頁面邊界內(nèi)是一個指示頁面上可印刷對象的最大范圍的可選頁邊距310。
圖4還示出了多個對象的示例,這些對象可能出現(xiàn)在文檔模板309的一個頁面上的,它們是多個容器407和408、特征可選的錨點圖標409、不固定的邊緣410、支柱412和滑塊413。
6.容器容器是文檔模板內(nèi)的空間,其中可以放置諸如文本或圖像之類的靜態(tài)或動態(tài)內(nèi)容,以及其它容器或?qū)ο???梢酝ㄟ^如在用戶界面所描述的那樣利用指示設(shè)備313對容器進行操作,以及借助鼠標133進行控制,對容器進行移動、縮放和調(diào)整形狀。
更準確地說,容器具有設(shè)置、可視外觀以及交互和編輯行為的集合。以下是容器的全部定義·容器可以有靜態(tài)和/或動態(tài)內(nèi)容。動態(tài)內(nèi)容是動態(tài)的,是指它來源于數(shù)據(jù)源,并且對于不同的文檔來說可能不同。不打算使動態(tài)內(nèi)容包括動畫的或隨時間變化的內(nèi)容,是因為此類內(nèi)容不適合印刷。類似地,靜態(tài)內(nèi)容在使用該容器生成的所有文檔中將會是相同的,盡管由于動態(tài)內(nèi)容的作用,可能為每個文檔放置不同的靜態(tài)內(nèi)容。
·容器可以有裝飾特征,諸如背景顏色、邊界、諸如字體和字型之類的文本設(shè)置,此類特征應(yīng)用于容器的內(nèi)容。
·生成文檔時可以合并容器和來自數(shù)據(jù)源的數(shù)據(jù)。裝飾特征通常在印刷品中是可見的,就像任何靜態(tài)內(nèi)容那樣。動態(tài)內(nèi)容將導(dǎo)致出現(xiàn)來自于數(shù)據(jù)源的特定數(shù)據(jù)。例如,可以對容器的這種表示進行印刷,或在屏幕144上進行顯示,或者兩者兼而有之。
·容器可以具有一個用戶界面,例如用于對容器設(shè)置進行編輯和查看的交互圖形用戶界面。界面組件通常出現(xiàn)在屏幕144上,而不是出現(xiàn)在所印刷的文檔中。用戶界面103可顯示容器的某些裝飾特征,諸如背景顏色或字體,并且還可以添加特征,以便允許對容器的設(shè)置進行編輯和查看。專用用戶界面特征的例子是,用于對容器的尺寸或位置進行交互顯示和改變的邊界圖標或角圖標,或者是在將容器和來自數(shù)據(jù)源的數(shù)據(jù)進行合并時,用來指示容器的行為的覆蓋數(shù)字、線條、圖標或文本。
本公開的一個方面是一組新的直接操作技術(shù),以及涉及容器的圖形用戶界面組件的顯示方法。
6.1容器約束根據(jù)本公開,一個容器可以有若干約束,該約束控制在各文檔中如何對相關(guān)聯(lián)的內(nèi)容進行顯示。這些約束連同把靜態(tài)和動態(tài)內(nèi)容與容器相關(guān)聯(lián)起來的方法,是用戶對從單個文檔模板生成多個文檔進行控制的主要方法。約束的一個例子是“該容器的內(nèi)容的最大高度為四英寸”。另一個約束可能是“該容器的內(nèi)容的左邊緣在各文檔中必須出現(xiàn)在相同的水平位置上”。此處描述的是用于利用圖形用戶界面對此類容器進行顯示和編輯的一組方法。
對靜態(tài)內(nèi)容的位置進行規(guī)定的內(nèi)容占位符在數(shù)字印刷領(lǐng)域中是眾所周知的,其中靜態(tài)內(nèi)容例如是在頁面上具有某一已定義位置的圖像。在以下論述中,可以假設(shè)容器具有位置和尺寸,并且可以以與現(xiàn)有技術(shù)中類似的方式對其進行顯示和編輯。相反,本公開集中在特別對于可變數(shù)據(jù)印刷的顯示和編輯方法。
容器允許用戶規(guī)定內(nèi)容在文檔中的尺寸和位置。由于可從單個文檔模板生成若干文檔,因此容器必須具有用于對多種可能性和約束進行規(guī)定和顯示的用戶界面。
容器的邊緣定義一個虛擬邊界,在邊界內(nèi)的相關(guān)聯(lián)內(nèi)容將出現(xiàn)在文檔中。因此,在本專利說明書中,討論容器的左邊緣,可以相當(dāng)于討論在生成的任何文檔中能夠顯示相關(guān)聯(lián)內(nèi)容的位置的最左邊緣。同樣,討論容器的高度,可以理解為討論與在生成的任何文檔中相關(guān)聯(lián)內(nèi)容的高度有關(guān)的約束。在本專利說明書參照用戶界面103討論容器的邊緣或尺寸時,以上區(qū)別將會更加清楚。
在以下的論述中,術(shù)語“固定的”定義了用于控制內(nèi)容外觀的某個值在所有文檔中是相同的·如果容器的寬度是固定的,則這意味著相關(guān)聯(lián)內(nèi)容所允許的寬度在所有文檔中將會是相同的。
·如果容器的高度是固定的,則這意味著相關(guān)聯(lián)內(nèi)容所允許的高度在所有文檔中將會是相同的。
·如果距離約束是固定的,則對于所有文檔來說所指定的距離為常數(shù)。
·如果容器的左邊緣或右邊緣是固定的,則這意味著相對于該頁面該邊緣的水平位置對于所有文檔來說都是相同的,但是可以對容器的高度或垂直位置進行改變。例如,如果容器的左邊緣是固定的,則相關(guān)聯(lián)內(nèi)容在一個文檔中可以出現(xiàn)得接近該頁面的頂部,而在另一個文檔中可以出現(xiàn)得接近該頁面的底部,但是,在所有情況中左邊緣將具有相同的水平位置。
·如果容器的頂邊緣或底邊緣是固定的,則這意味著相對于該頁面該邊緣的垂直位置對于所有文檔來說都是相同的,但是容器的寬度或水平位置可以改變。
·容器的垂直軸是位于該容器的左邊緣和右邊緣的中間位置、并與左右邊緣平行的假想垂直線。如果容器的垂直軸是固定的,則該容器的左邊緣和右邊緣的水平位置的平均值對于所有文檔來說都是相同的。利用該約束,可以對容器的寬度進行改變,因此在不同文檔中左邊緣和右邊緣可遠離或靠近垂直軸,但是對于所有文檔來說,垂直軸保持在同一水平位置。容器的高度和垂直位置不受該約束影響。
·類似地,如果水平軸是固定的,則盡管高度不受該約束影響,容器的頂邊緣和底邊緣是垂直定位的。
·如果水平軸和垂直軸都是固定的,則這意味著容器的中心點是固定的,但是其寬度和高度不受該約束影響。
·如果容器的一個角、容器的某個邊緣的中點、或容器的中心點是固定的,則這意味著該點在所有文檔中出現(xiàn)在相同位置,并且相對于該容器出現(xiàn)在相同位置。例如,如果容器的左上角是固定的,則這意味著其內(nèi)容可能放置的位置的左上角對于所有文檔來說都是相同的。
·可以相對于頁面的左邊緣、右邊緣、左頁邊距、右頁邊距或某個其它水平位置,固定垂直邊緣或垂直軸。類似地,可以相對于頁面的頂邊緣、底邊緣、邊距或某個其它垂直位置,固定水平邊緣或水平軸。由于如果頁面大小對于所有文檔是相同的,則上述可能性在生成的文檔中沒有區(qū)別,所以只有頁面大小在文檔間變化時,術(shù)語“固定的”的細微差別才有意義。
“固定的”的反義是“不固定的”,它意味著邊緣、軸、角、中點、或距離約束可在文檔間變化,但是在特定的一組文檔中未必如此。例如,可能存在其它實際上防止邊緣的位置進行改變的外部約束,但是,如果不應(yīng)用那些外部約束則該邊緣的位置能夠改變的事實,意味著仍然將該邊緣標記為不固定的。
6.2容器狀態(tài)將容器的“邊緣狀態(tài)”定義為8個屬性的集合,如上所述,屬性可以是“固定的”或“不固定的”,這些屬性為左邊緣、右邊緣、垂直軸、頂邊緣、底邊緣、水平軸、寬度和高度。由于邊緣還可能受到諸如最小或最大容器尺寸設(shè)置之類的其它約束的影響,或者受到其它容器的位置的影響,所以邊緣狀態(tài)可能不能完全限定一個邊緣的位置。因此,“邊緣狀態(tài)”僅指容器可能具有的狀態(tài)全集的一部分。
在大部分的實現(xiàn)方式中,邊緣狀態(tài)是重要的,因為容器的圖形用戶界面部分是從邊緣狀態(tài)到圖形表示上的映射所導(dǎo)出的,以及是從邊緣和容器表示的直接操作到對邊緣狀態(tài)的調(diào)整上的映射所導(dǎo)出的。
更佳地,容器的全部狀態(tài)不只是包括邊緣狀態(tài)。容器可以具有對寬度和高度的最小和最大設(shè)置,該設(shè)置對邊緣的位置進一步進行控制。內(nèi)部邊距對可以顯示相關(guān)聯(lián)內(nèi)容的位置進行控制,顯示位置繼而影響容器邊緣能夠放置的位置。文本字體、字型、大小和對齊方式設(shè)置以及圖像剪切、縮放等,也可以作為容器狀態(tài)的一部分,并且影響內(nèi)容的位置、尺寸和外觀。諸如背景和邊界顏色、邊界線磅重、線型等的裝飾設(shè)置,也是各容器狀態(tài)的一部分。同時,上述方面可能不會影響內(nèi)容在文檔中的位置,但是它們將影響外觀。
在某些實現(xiàn)方式中,邊緣狀態(tài)包括上述8個屬性,屬性可以是固定的或不固定的。頁面大小不能改變,因此,術(shù)語“固定的”在這里沒有進一步的限定詞。這8個屬性產(chǎn)生28種不同的邊緣狀態(tài),即256種可能性。
不需要使用全部的這256種邊緣狀態(tài)。例如,考慮以下狀態(tài)容器的左邊緣是固定的,垂直軸是固定的,而右邊緣是不固定的。由于垂直軸是固定的,所以對于所有文檔來說,從左邊緣到垂直軸的距離必須與從右邊緣到垂直軸的距離相等。由于左邊緣也是固定的,所以對于所有文檔來說,左邊緣距垂直軸的距離為常數(shù),這意味著右邊緣也是固定的。
某些實現(xiàn)方式對邊緣狀態(tài)的一個子集進行了建模,其中每一個都呈現(xiàn)出獨特的行為。由于其行為等同于若干其它狀態(tài),所以沒有在所有實現(xiàn)方式中使用上述邊緣狀態(tài)。一種可選的實現(xiàn)方式可能采用此類狀態(tài),并且在用戶界面中對其進行表示,作為對邊緣是否固定進行模擬和編輯而不是對獨特的容器行為進行建模的方法。
一種具體的實現(xiàn)方式使用36種容器狀態(tài),它是由6種獨特的水平約束和6種獨特的垂直約束的乘積形成的。
有關(guān)容器的水平約束為
1.左邊緣、右邊緣,垂直軸和寬度是不固定的;2.只有左邊緣是固定的;3.只有右邊緣是固定的;4.左邊緣和右邊緣都是固定的;5.只有垂直軸是固定的;以及6.寬度是固定的,但是左邊緣、右邊緣和垂直軸都是不固定的。
有關(guān)容器的垂直約束為1.頂邊緣、底邊緣、水平軸和高度是不固定的;2.只有頂邊緣是固定的;3.只有底邊緣是固定的;4.頂邊緣和底邊緣都是固定的;5.只有水平軸是固定的;6.高度是固定的,但是頂邊緣、底邊緣和水平軸是不固定的。
如果術(shù)語“固定的”有限定詞,例如,如果每個邊緣或軸相對于頁面的左邊緣或右邊緣是固定的,則這將產(chǎn)生36種以上的獨特邊緣狀態(tài)。
注意到,在上述列表中,標記為“左邊緣和右邊緣都是固定的”的約束,具有與“左邊緣、右邊緣、垂直軸和寬度都是固定的”、和“左邊緣和垂直軸是固定的”、以及其它幾種類似約束相同的行為。因為如果邊緣狀態(tài)采用較少的“固定”約束,則使用可視線索來表示各種“固定”概念的實現(xiàn)方式可以采用較少的這種線索,所以比較簡單的對稱約束通常是首選的,這與其它情況相比可以產(chǎn)生較少的視覺混亂。
如下所述,本公開的一個方面把邊緣狀態(tài)與容器的圖形表示和編輯方法關(guān)聯(lián)起來。
6.3顯示和編輯容器6.3.1創(chuàng)建新容器的方法描述了兩類容器文本容器和圖像容器。文本容器保存文本和/或嵌入的圖像。圖像容器只保存圖像。
參照圖4,通過使用鼠標133分別對文本容器工具404或圖像容器工具405進行點擊,然后在文檔模板309中拖動矩形,可以在文檔模板309中創(chuàng)建新的文本容器和圖像容器。
可選地,通過在激活適當(dāng)?shù)墓ぞ?04、405后在文檔模板309中進行點擊,可以對容器進行簡單地創(chuàng)建?;蛘卟迦刖哂心J尺寸的容器,或者提供對話框或其它提示用于輸入新容器的尺寸。根據(jù)某種預(yù)定義的或計算的方案,可以對某些容器進行自動創(chuàng)建和放置??梢栽O(shè)計其它備選方案。
6.3.2顯示容器的方法更佳地,將上述36種邊緣狀態(tài)中的每種狀態(tài)映射到一個圖形表示上??梢杂猩儆?6種的圖形表示,因為在某些情況下某些邊緣狀態(tài)共享一個表示。
圖5A-5D表示容器的第一示例性邊緣規(guī)則。
應(yīng)用程序121將邊緣繪制成實線(參見項目503)或虛線(參見504),并且其特征在于錨點(在邊緣上或其附近繪制,并且由如506、507、509所示的線條、形狀和/或圖標構(gòu)成)、手柄(在邊緣或形狀上或其附近繪制的控制點,以允許對其進行移動或修改,參見502)、滑塊(在邊緣的任一側(cè)繪制的短平行線,參見圖4,標號為413的項目)、增長圖標(參見505)以及顏色,用以表示邊緣狀態(tài)。
用于圖5A-5D的容器顯示方法的規(guī)則依次為1.對于每條固定邊緣,將該邊緣繪制成實線;2.如果寬度是固定的,則將左邊緣和右邊緣繪制成實線;3.如果高度是固定的,則將頂邊緣和底邊緣繪制成實線;4.不繪制軸;5.將尚未繪制的所有邊緣繪制成在每條邊緣附近繪制有增長圖標的虛線;6.對于每對垂直邊緣和/或垂直軸,如果它們都是固定的,則在其交點上繪制一個錨點;7.對于每條固定邊緣,如果尚未在該邊緣的任何位置上繪制錨點,則在該邊緣的中點繪制一個滑塊;以及8.對于每對垂直邊緣和/或垂直軸,如果尚未在其交點處繪制錨點或滑塊,則在其交點上繪制一個手柄。
規(guī)則1、2和3確保如果線條是固定的或受約束的,則將線條繪制成實線。規(guī)則5確保將不固定邊緣繪制成虛線。規(guī)則6、7和8確保固定點顯示錨點,某些固定邊緣顯示滑塊,并且其它顯示手柄。
在上文中,邊緣只需繪制一次,因此,如果某條規(guī)則使得對一條邊緣進行了繪制,則后續(xù)規(guī)則將不會使該邊緣被再次繪制。如果方便的話,例如,如果容器很小,并且圖標彼此重疊或遮擋表示的其它特征,則可以按不同方式繪制圖標或者省略圖標。
繪制不固定邊緣的準確位置,可以取決于容器的內(nèi)容。正如下文所述,使用“現(xiàn)場校對”,這意味著對內(nèi)容和文檔模板進行合并,并且該內(nèi)容在用戶界面中是可見的。一種備選的實現(xiàn)方式能夠使用在所有文檔上平均的容器內(nèi)容區(qū)域,或者某些其它確定不固定邊緣在用戶界面上應(yīng)當(dāng)放置在何處的方法。
容器的這些表示提供了一種用于顯示容器邊緣狀態(tài)的圖形方法。該表示的解釋如下·虛線意味著文檔中那個邊緣的位置取決于容器的內(nèi)容。在圖4中,此類邊緣被標記為410。
·實線意味著邊緣是受限制的,因為該邊緣是固定的(諸如邊緣414),或者因為容器的寬度和高度是固定的(在容器408中二者都是固定的)。
·錨點意味著與該錨點相交的邊緣和/或軸是固定的。因此,錨點在所有文檔中將出現(xiàn)在相同的水平和垂直位置。因此,根據(jù)定義,錨點是固定的。圖4中的圖標409是錨點圖標的一個例子,它表示相交邊緣414是固定的。
·滑塊意味著相關(guān)聯(lián)邊緣是固定的,但容器可以位于沿該邊緣“縱向滑動”的許多位置上。例如,在圖4中,滑塊413表示容器408的內(nèi)容在文檔中可以出現(xiàn)在特定圖中所看到的位置的左邊或右邊。
是否繪制這些圖標或邊緣的某些或全部,取決于哪個工具或哪些容器被選擇、高亮顯示或者激活了。一般而言,在所印刷的文檔中不繪制容器的邊緣和圖標,因為它們是設(shè)計文檔模板的輔助工具。
可以在輔助對話窗口中顯示諸如最小和最大寬度和高度之類的設(shè)置。
在圖5A中,容器501的寬度和高度都是不固定的。用實線表示固定的邊緣503。用虛線表示不固定的邊緣504。增長圖標505是附加的或可選的指示符,表示相鄰邊緣504是不固定的。
在圖5B中,容器501的寬度和高度都是不固定的。錨點圖標506附加地或可選地表示在該圖標處相交的兩條邊緣503都是固定的。
在圖5C中,容器501的寬度和高度都是不固定的,圍繞著如可選錨點圖標507所示的中心點同樣地進行容器的擴大或縮小。
在圖5D中,除了頂邊緣508是固定的外,容器501的寬度和高度都是不固定的。錨點圖標509表示該圖標位于其中心的頂邊緣508是固定的,并且還表示該容器的左邊緣和右邊緣圍繞著通過該圖標垂直繪制的中心軸(垂直軸)進行擴大或縮小。
6.3.3用于在適當(dāng)位置編輯容器屬性的方法通過用鼠標133和指示設(shè)備313點擊任一邊緣503、504或在其附近進行點擊,使得邊緣503/504在固定和不固定的狀態(tài)之間進行轉(zhuǎn)換,并且由此更新用戶界面301中的圖形表示。
使用鼠標133和指示設(shè)備313的組合,可以對控制點502進行拖動,從而使得相應(yīng)的一條或多條邊緣跟隨控制點502的位置。當(dāng)從利用鼠標133/指針313的選擇中釋放控制點502時,假定不存在使新位置無效的外部約束,則固定邊緣保持在已經(jīng)將其拖到的位置處,而不固定的邊緣將返回到其計算位置,其中該計算位置由諸如該容器內(nèi)內(nèi)容的尺寸和形狀之類的因素、以及可能應(yīng)用于該容器或邊緣的任何其它約束來進行確定。對用于確定不固定邊緣和容器的位置的算法的完整描述,參見下文。
位于不固定邊緣的中心點或者兩條不固定邊緣的交點處的控制點,可以是固定的,或者可以根本不對其進行顯示,并且位于不固定邊緣的任一端處的控制點,可以被限制為沿與該邊緣平行的方向進行移動。
另外,可以通過在容器的頂點或邊緣附近、或者在位于該頂點處的控制點上、或者在邊緣的中心用指示設(shè)備133進行點擊,向容器的頂點或邊緣添加錨點。還可以通過在錨點圖標附近進行點擊,或者可選地通過選擇錨點而后激活該界面中的菜單項、按鈕或其它控件,對錨點進行刪除。
以這種方式添加錨點,將會使得與該錨點相交的一條或幾條邊緣、一條或幾條軸變?yōu)楣潭ǖ摹?br>
容器最好有至少一個固定的點,除非另有外部約束,因為如果沒有該要求,則有可能會創(chuàng)建其水平和垂直位置沒有明確進行定義的容器。例如,如果該容器沒有其它有效的外部約束,則沒有固定邊緣或軸的容器的內(nèi)容邏輯上可能出現(xiàn)在頁面上的任意位置。這使用戶很難對此類容器的內(nèi)容在文檔中將出現(xiàn)在何處進行預(yù)測。因此,通過不允許將容器放置在這種未明確定義的狀態(tài)中的轉(zhuǎn)換,某些實現(xiàn)方式避免了上述可能性。
如上所述,倘若該容器具有外部約束,則容器可以有固定的寬度或高度而并不具有相應(yīng)的固定邊緣。例如,倘若能夠利用某種水平約束確定容器的水平位置,則盡管容器的左邊緣和右邊緣是不固定的,容器也可以有固定的寬度。以下將論述此類外部約束,并將其稱為“支柱”。
倘若將外部約束支柱附加到容器上,就能夠以與上述用于固定邊緣的方式類似的方式對邊緣進行點擊,來固定寬度或高度。在該情況中,如果存在與該容器相連的水平支柱,則對不固定的左邊緣、右邊緣或在其附近進行點擊,將會固定容器的寬度。如果存在與該容器相連的垂直支柱,則對不固定的頂邊緣、底邊緣或在其附近進行點擊,將會固定其高度。
對邊緣、軸、寬度和高度的固定性進行操作,相當(dāng)于在容器的邊緣狀態(tài)之間進行轉(zhuǎn)換。其它操作,例如對固定邊緣或角的位置進行改變,會修改其它容器狀態(tài)信息。
更佳地,為了確保各容器總是具有有效的邊緣狀態(tài),每當(dāng)向容器添加約束或從容器中刪除約束時,都應(yīng)用一組規(guī)則,并且對其它約束進行必要調(diào)整,以便解決所有問題。通過更新屏幕顯示以顯示新的約束配置,立即向用戶指出有關(guān)調(diào)整。這使得用戶界面103能夠防止容器到達所不期望的狀態(tài)。
向每個容器的水平和垂直尺寸應(yīng)用如下規(guī)則1.如果任一邊緣變成固定的或受到外部約束的作用,則與該邊緣平行的軸變?yōu)椴还潭ǖ摹?br>
2.如果一個軸變成不固定的,則至少一條平行邊緣必須變成固定的或受到外部約束的作用。
3.如果相對邊緣變成不固定的,并且除去了那些邊緣上的所有外部約束,則與那些邊緣平行的軸變成固定的。
4.如果軸變成固定的,則與該軸平行的邊緣變成不固定的,并且除去在那些邊緣上起作用的外部約束。
5.如果寬度變成固定的,則左邊緣、右邊緣和垂直軸變成不固定的。
6.如果高度變成固定的,則頂邊緣、底邊緣和水平軸變成不固定的。
6.3.4備選的容器用戶界面獨立約束容器用戶界面的替換(第二種)實現(xiàn)方式,可以以將容器的邊緣狀態(tài)劃分為視覺上不同并且可獨立編輯的約束的方式,顯示并且允許對容器進行編輯。
在該實現(xiàn)方式中,利用跨越容器內(nèi)容區(qū)域的條表示寬度和高度約束。邊緣只表示邊緣的固定或不固定性質(zhì)。
根據(jù)容器顯示方法,用于第二種實現(xiàn)方式的規(guī)則依次為1.對于每條邊緣或軸,如果其線條是固定的,則繪制成實線,否則繪制成虛線;2.如果寬度是固定的,則繪制一條跨越內(nèi)容區(qū)域的寬度條,否則繪制成虛線;3.如果高度是固定的,則沿著內(nèi)容區(qū)域向下繪制一條實心高度條,否則繪制成虛線;以及4.對于每對垂直邊緣和/或垂直軸,如果都是固定的,則在其交點繪制一個錨點,否則繪制一個手柄。
在第二種實現(xiàn)方式中,不需要如前所述的滑塊,因為實線已經(jīng)表示了與滑塊相同的行為。而前一種實現(xiàn)方式則不然,因為前一種實現(xiàn)方式除了使用實線表示邊緣的固定性之外,還使用實線表示寬度和高度約束。
第二種實現(xiàn)方式中的寬度條和高度條,是分別對容器的寬度和高度約束進行顯示和編輯的圖形方法。這些條可能看起來像邊緣,并具有分別表示固定性和不固定性的實線或虛線外觀。在圖38中,顯示了跨越兩個容器3802和3803的寬度條3805和高度條3806,其水平和垂直位置分別由容器3801的尺寸和連接支柱3804的長度來確定??蛇x地,如果諸如固定邊緣之類的其它約束使得寬度或高度的固定無意義,則這些條可能不起作用,或者不對其進行繪制。例如,如果容器的左邊緣是固定的,并且右邊緣是不固定的,則最好防止用戶固定寬度,因為這會使容器處于一種超出先前論述的36種首選邊緣狀態(tài)集合之外的邊緣狀態(tài)。在該情況中,可能不顯示寬度條。
為了在第二種實現(xiàn)方式中編輯容器,使用鼠標133和指針313對邊緣、軸、寬度條或高度條進行點擊,將邊緣從固定的改為不固定的,或者反之亦然。對邊緣、手柄或錨點的拖動,以與上述類似的方式起作用,并且對錨點進行點擊,將會固定與其相交的任一不固定的邊緣或軸,或者如果兩條相交線已經(jīng)是固定的,則同時將它們變成不固定的。如果以上操作使容器的水平位置或垂直位置未明確定義,則固定任一或兩個中心軸可以對此問題進行糾正。例如,如果點擊錨點使得容器的所有邊緣變?yōu)椴还潭ǖ模瑒t存在多個可能的內(nèi)容位置,因此,為了糾正此問題,通過固定其垂直軸和水平軸,可以錨定該容器的中點。其它外部約束或規(guī)則可能使得該步驟并非必要,或者只固定一個軸可能就足夠了。
6.3.5備選的容器用戶界面尺寸框在另一種(第三種)實現(xiàn)方式中,通過對最小和最大區(qū)域的直接操作控制容器的行為,其中最小和最大區(qū)域分別由一個單獨的矩形框表示。
圖6A-6C表示容器的第三示例性規(guī)則。
參照圖6A,容器601包括其控制點603位于各頂點以及可選地位于各邊緣中心點的最小區(qū)域框602,和其控制點605位于各頂點以及可選地位于各邊緣中心點的最大區(qū)域框604。
最小區(qū)域框602在水平和垂直方向總是出現(xiàn)在最大區(qū)域框604之內(nèi),或與其相重合。
第三框606表示容器內(nèi)的內(nèi)容的實際區(qū)域。內(nèi)容框606總是出現(xiàn)在最大區(qū)域框之內(nèi)或與其重合,并且總是出現(xiàn)在最小區(qū)域框之外或與其重合。由諸如容器內(nèi)內(nèi)容的尺寸和形狀之類的因素、以及可能應(yīng)用于該容器的任何其它約束,對內(nèi)容框的首選尺寸進行確定。
為了使用戶易于區(qū)分這三個框,可選地,可以通過不同線磅重、線型或顏色對各個框及其控制點進行表示。
在查看包括一個或多個容器的文檔模板時,為了減少視覺混亂,可以可選地隱藏最小和最大區(qū)域框602、604及其相關(guān)聯(lián)的控制點603、605、以及內(nèi)容框606,除非與它們關(guān)聯(lián)的特定容器是“有效的”,例如,通過把指針放置在該容器占據(jù)的區(qū)域內(nèi)或者利用鼠標點擊該容器來實現(xiàn)。
通過使用指示設(shè)備133對其各自的控制點603或605進行直接操作,可以調(diào)整最小區(qū)域框602和最大區(qū)域框604的大小。通過調(diào)整最小區(qū)域框602的大小,不管容器內(nèi)可能出現(xiàn)何種內(nèi)容,用戶都可以確定內(nèi)容框606的最小可能尺寸。通過調(diào)整最大區(qū)域框604的大小,不管容器內(nèi)可能出現(xiàn)何種內(nèi)容,用戶都可以確定內(nèi)容框606的最大可能尺寸。
在調(diào)整最小區(qū)域框602的大小時,如果將該框的任一頂點或邊緣的位置拖放到最大區(qū)域框604的外部,則自動移動該頂點或邊緣,以便使它在釋放控制點后與最大區(qū)域框的相應(yīng)頂點或邊緣相同;或者該頂點或邊緣在它到達最大區(qū)域框604的相應(yīng)頂點或邊緣之后停止移動;或者自動擴大到最大區(qū)域框604的相應(yīng)頂點或邊緣,以便與當(dāng)前拖動的頂點或邊緣重合或者在其之外。
在調(diào)整最大區(qū)域框604的大小時,如果將該框的任一頂點或邊緣的位置拖動到最小區(qū)域框602的內(nèi)部,則自動移動該頂點或邊緣,以便使它在釋放控制點后與最小區(qū)域框的相應(yīng)頂點或邊緣相同;或者該頂點或邊緣在它到達最小區(qū)域框602的相應(yīng)頂點或邊緣之后停止移動;或者自動縮小最小區(qū)域框602的相應(yīng)頂點或邊緣,以便與當(dāng)前拖動的頂點或邊緣重合或者在其內(nèi)部。
根據(jù)最小區(qū)域框602在最大區(qū)域框604中的相對位置,確定內(nèi)容框606在最大區(qū)域框604中的位置。
通過用指示設(shè)備133拖動最小區(qū)域框602,可以將其移動到最大區(qū)域框604內(nèi)的任意位置。
可選地,可以對最小區(qū)域框602進行編程,以便在利用指示設(shè)備133拖動該框時,“咬住”最大區(qū)域框604內(nèi)的首選位置選擇中最靠近的位置,其中首選位置包括水平方向上的左對齊、右對齊和居中,以及垂直方向上的頂對齊、底對齊和居中。
圖6A中的水平尺寸a、b、c和d表示最大區(qū)域框604、內(nèi)容框606以及最小區(qū)域框602的各個垂直邊緣之間的距離。
假定內(nèi)容框606的任意尺寸在任何特定時刻由框內(nèi)的內(nèi)容所決定,則尺寸a、b、c和d總是符合以下等式a∶b=d∶c相應(yīng)等式適用于相應(yīng)的垂直尺寸,并且圖中未對垂直尺寸進行標記。
因此,根據(jù)求解的水平尺寸a、b、c和d以及相應(yīng)的垂直尺寸,對內(nèi)容框606在最大區(qū)域框604內(nèi)的位置進行確定。
圖6B表示一種特殊情況,其中最小區(qū)域框602位于最大區(qū)域框604的左上角,并且因此內(nèi)容框606也位于最大區(qū)域的左上角。
圖6C表示另一種特殊情況,其中最小區(qū)域框602在水平和垂直方向上位于最大區(qū)域框604的中心,并且因此內(nèi)容框606同時在水平和垂直方向上也位于最大區(qū)域的中心。
圖6D和6E表示用于生成其中使用容器區(qū)域的可變數(shù)據(jù)文檔的方法620。在應(yīng)用程序121內(nèi)實現(xiàn)方法620,并且該方法的起始點為622,其后在步驟624中,對文檔模板進行檢索,并且在顯示屏144上的GUI301內(nèi)對其進行顯示。步驟626中,通常通過鼠標133和相應(yīng)指針313的移動,對用戶繪制容器進行檢測。
在默認情況下,容器在繪制時具有兩個約束,即最小容器區(qū)域和最大容器區(qū)域,諸如圖6A-6C所示的最小容器區(qū)域和最大容器區(qū)域。在容器的初始狀態(tài)中,最小容器區(qū)域與最大容器區(qū)域相重合。在步驟634中,可以對任一區(qū)域的控制點進行操作,以便由此對容器區(qū)域進行修改。
為了形成版面,在模板中表示該容器,此后在步驟628中可以應(yīng)用各種約束。步驟628可以包括在該版面內(nèi)的容器當(dāng)中合并在此描述的多種類型的約束。在當(dāng)前論述的實現(xiàn)方式中,所應(yīng)用的約束是容器區(qū)域中的約束,諸如在圖6A-6C中所示的那些。在步驟630中,再次使用鼠標133和指針313對容器區(qū)域進行繪制,然后在步驟632中,將容器區(qū)域和版面中的容器進行關(guān)聯(lián)。在步驟634中,可以選擇該區(qū)域的控制點,并且對控制點進行操作以便修改容器區(qū)域。此類修改包括設(shè)置該區(qū)域的一條或多條邊緣,以便與容器的邊緣相重合(圖6B),以及相對于相關(guān)聯(lián)的容器對區(qū)域框進行移動或定位。
接下來是步驟636,通過返回到步驟628,用戶可以應(yīng)用更多的約束。更多約束包括另一個區(qū)域框,由此提供了構(gòu)造最小和最大區(qū)域框的機會。還可以應(yīng)用其它約束。例如,在最大區(qū)域框和與最大區(qū)域框無關(guān)聯(lián)的另一個容器之間應(yīng)用支柱。這使得區(qū)域框能夠根據(jù)另一個容器的變化進行動態(tài)地移動,同時繼續(xù)限制與最大區(qū)域框相關(guān)聯(lián)的容器的尺寸。
在步驟636之后,通過步驟638的操作,用戶可以向版面中添加更多容器,直至版面完成為止。一旦版面完成,步驟640就將一條內(nèi)容記錄放置到版面中以便生成文檔。步驟642允許為所有內(nèi)容記錄重復(fù)該過程,從而創(chuàng)建一組可變數(shù)據(jù)文檔。一旦已經(jīng)用盡了所有記錄并生成文檔,就如在步驟644中請求的那樣,對文檔進行校對(參見章節(jié)11.10-11.13)和/或印刷。方法620在步驟646中結(jié)束。
7.圖像容器圖像容器是特定類型的容器,其目的是用于包含諸如照片、插圖、徽標或圖表之類的圖像。
最好是,圖像容器具有一個行為選擇,以便控制將要包含的圖像的縮放,其中行為選擇包括·“適合整幅圖像”,對圖像進行放大或縮小,從而使得整幅圖像適合容器,并且圖像的縱橫比不變;·“使圖像適合容器的尺寸”,對圖像進行放大或縮小,從而將該圖像填滿整個容器,并且圖像的縱橫比不變,而且從視圖中將圖像的剩余部分剪切掉;·“拉伸以適合”,對圖像進行放大或縮小,以便在水平和垂直尺寸上完全適合容器的尺寸,忽略圖像的原始縱橫比;·“不進行縮放”,不對圖像進行縮放,并且從視圖中剪切掉任何超出容器范圍的圖像部分。
另外,可以對圖像容器進行設(shè)置,以便使在該容器內(nèi)、并且其大小小于容器尺寸的任何圖像向特定方向?qū)R,包括水平方向上的左對齊、居中、右對齊以及垂直方向上的頂對齊、居中、底對齊的任意組合。
8.文本容器文本容器是特定類型的容器,其目的是用于包含一段文本,并且可以利用各種字體和段落樣式對其進行格式化,并且可以向文本容器的各個邊緣進行對齊或調(diào)整。
文本容器包含靜態(tài)文本、可變文本或者二者的組合??梢詫⒅T如圖像之類的其它對象插入到文本容器中,并且其它對象以與文本流動相同的方式進行流動。
通過直接輸入將靜態(tài)文本輸入到容器中。如章節(jié)11中詳細說明的那樣,通過將可變數(shù)據(jù)對象從庫中拖動到容器中,對可變文本進行添加。單個文本容器中可顯示一個以上的可變文本對象。
靜態(tài)文本的格式化可應(yīng)用于單個字母、詞語或整個段落,然而格式化選項只能應(yīng)用于整個可變文本項實例。
8.1文本格式化文本格式化包括以下選項·字體·字體大小·加粗·傾斜·下劃線·顏色·行間距·強制大寫字母·自動斷字
8.2對齊在某些特定實現(xiàn)方式中允許以下文本對齊選項·水平對齊左對齊(默認)、水平居中、右對齊或分散對齊。
·垂直對齊頂對齊(默認)、垂直居中、底對齊。
在不同的實現(xiàn)方式中,其它選項也是合適的,如垂直分散對齊文本。
8.3欄可以將文本容器中的文本排列為一欄、兩欄或多欄,通過稱為“間距”的間隔將每一欄的左右邊緣和相鄰的欄分開。
在現(xiàn)有技術(shù)中,通過拖動相鄰欄之間的分界線來調(diào)整欄寬,是公知的,并且通過修改屬性表或?qū)υ捒蛑械闹?,或者通過類似的間接方法,可以預(yù)先對間距進行設(shè)置。
圖7A-7B表示一個具有三個欄的文本容器701,以及通過利用諸如鼠標133和指針313之類的指示設(shè)備的直接操作,來調(diào)整欄寬和間距寬度的方法。
參照圖7A,將文本容器701劃分為三個文本欄702。如圖所示,線條703表示相鄰欄之間的中心分界線,線條704表示相鄰欄702之間的間距邊界。
通過利用鼠標133和指示設(shè)備133拖動中心分界線703,能夠調(diào)整相鄰欄的寬度。在拖動操作期間,顯示一個特殊指針705代替默認指針,以表示欄拖動操作是有效的。
正如圖7B所示的那樣,通過利用指示設(shè)備拖動間距邊界線704,可以調(diào)整間距的寬度。在拖動操作期間,顯示一個特殊指針706代替默認指針,以表示間距拖動操作是有效的。
同時調(diào)整在同一欄間間隔內(nèi)的兩條間距邊界線,從而使每條間距邊界線和中心分界線之間總是保持相等間隔。
如在圖7B中所見,其中可以多于兩欄,可以對每個間距進行獨立操作。
8.4可變字體大小可以改變文本容器內(nèi)文本的字體大小,以允許通過減小或變大使各種容量的文本與容器相適合,并且允許容器的尺寸根據(jù)外部約束發(fā)生變化,同時仍然能夠使文本整體與容器相適合??梢詾槊總€文本容器設(shè)置最小和最大的字體大小,從而限定可能的字體大小范圍。可以使用折半搜索算法確定要使用的最佳字體大小,以便使所有文本與容器相適合。如果字體大小達到最小尺寸,而文本仍然不能與容器相適合,則向用戶顯示一個錯誤信息。
8.5容器間的字體大小同步可以在兩個或多個文本容器之間創(chuàng)建一個約束,該約束規(guī)定無論是否對任何容器的字體大小進行改變,所有容器中字體大小必須相等,以便允許某些文本內(nèi)容恰當(dāng)?shù)嘏c容器相適合。
更佳地,如果在添加約束前為上述同步所選擇的文本容器具有不同的字體大小,則首先對字體大小取平均,然后應(yīng)用于每個所選容器。一種備選的實現(xiàn)方式可以使用最初選擇的容器的字體大小,并且將該字體大小應(yīng)用于所有其它容器。另一種備選方案是將外部字體大小設(shè)置應(yīng)用于每個容器。
參照圖8,應(yīng)用程序窗口301具有如前所述的工具欄區(qū)域303。工具欄區(qū)域303包含至少一個字體選擇器803、一個字體大小選擇器804和一個用于添加字體大小同步約束的按鈕805??梢岳米煮w選擇器803和字體大小選擇器804,來改變文本容器中文本的屬性。在選擇了若干文本容器后,點擊字體大小同步按鈕805將會使所有所選容器的字體大小同步。
已經(jīng)預(yù)先將多個文本容器806、807放置在文本模板309中。通過操作鼠標133,通過用指針313點擊容器,通過在其周圍拖動選擇矩形,或者通過其它方法,可以對容器進行選擇??梢允褂每梢暦椒ū硎井?dāng)前選擇了文本容器,諸如通過在容器上顯示控制點來實現(xiàn)。
通過選擇兩個或多個文本容器806、807,以及通過激活同步按鈕805,對約束進行添加。在其它實現(xiàn)方式中,可以通過下拉菜單、鍵盤命令或其它方法,應(yīng)用字體大小同步約束。
可選地,借助于在各個文本容器806、807上或在其附近的圖標808或其它圖形表示,在用戶界面中示出該約束。另外,可選地,可以在由約束鏈接的文本容器的各個圖標之間繪制連接線809,以表示哪些文本容器彼此鏈接。
在其它實現(xiàn)方式中,可以提供視頻顯示屏144的一個獨立區(qū)域,用于顯示所選對象的各種屬性,并且可以利用該區(qū)域表示所選的文本容器具有應(yīng)用于它的字體大小同步約束,并且標識通過該約束鏈接了哪些其它容器。
可以通過選擇由該約束鏈接的一個或多個文本容器,并且重復(fù)最初用于應(yīng)用該約束的命令或序列,對字體大小約束進行刪除。這可以通過下列方式實現(xiàn)激活同步按鈕805;選擇由該約束鏈接的一個或多個文本容器,并且應(yīng)用專為此目的提供的附加命令或序列;或者點擊表示圖標808或連接線809,并且應(yīng)用命令或序列,諸如啟動鍵盤132上的或者在顯示屏144上顯示的菜單命令中的“刪除(delete)”鍵。
如果用戶將字體大小約束應(yīng)用于已經(jīng)包含具有不同字體大小的文本的兩個或多個文本容器,則將最大字體大小、最小字體大小,或者平均字體大小應(yīng)用于所有文本容器??蛇x地,可利用彈出對話框或者類似方式,提示用戶對字體大小進行選擇。
如果用戶手動更改已經(jīng)由字體大小約束鏈接的任一容器的字體大小,例如通過從字體大小選擇器804中選擇新的字體大小來實現(xiàn),則將新的字體大小應(yīng)用于由該約束鏈接的所有容器。
8.6內(nèi)部邊距的自動應(yīng)用根據(jù)文本容器是否有可視邊界和/或可視背景,可以自動設(shè)置文本容器的內(nèi)部邊距。
參照圖9,應(yīng)用程序窗口301具有如前所述的工具欄區(qū)域303。工具欄區(qū)域303包含至少一個邊界選擇器903和一個背景顏色選擇器904。
文本容器905沒有可視邊界或背景顏色,并且在容器的邊緣與容器內(nèi)的文本之間也沒有邊距。
文本容器906具有可視邊界,并且在容器的邊緣與容器內(nèi)的文本之間在四側(cè)都有邊距907。
在如圖9所示的系統(tǒng)狀態(tài)之前,通過用指針133點擊容器906,通過在其周圍拖動選擇矩形,或者利用其它方法,對文本容器906進行選擇,其中文本容器906處于與文本容器905類似的狀態(tài),沒有可視邊界或背景,并且沒有邊距??梢允褂每梢暦椒ū硎井?dāng)前選擇了文本容器,諸如通過在容器上顯示控制點來實現(xiàn)。
然后,利用邊界選擇器903來應(yīng)用可視邊界,或者可選地,利用背景顏色選擇器904來應(yīng)用背景顏色。
當(dāng)將可視邊界或背景應(yīng)用于文本容器時,如果沒有設(shè)置內(nèi)部邊距,則將預(yù)定的內(nèi)部邊距907在四側(cè)自動地應(yīng)用于文本容器。只要在文本容器的背景顏色與模板的主要環(huán)繞背景顏色間存在可視差別,就可以自動添加內(nèi)部邊距。
可以為容器自動設(shè)置內(nèi)部邊距的另一種情況,是在容器的背景顏色與頁面顏色不同時。在這種情況下,可以對內(nèi)部邊距進行添加,以便提供內(nèi)容和頁面背景間的視差,而不是允許內(nèi)容移動到容器的邊緣上。如果容器的背景顏色是完全透明的,則根據(jù)定義將其內(nèi)容繪制在與頁面相同的背景上,并且因此無需添加內(nèi)部邊距。
8.7容器之間的文本流可以將兩個或多個文本容器順頁序地鏈接起來,以便如果文本容量超出前一個容器的尺寸,則允許文本從一個容器流動到下一個容器中。
當(dāng)文本不適合所有此類鏈接容器的組合區(qū)域時,必須為每一個容器找到一個允許文本與之相適合的字體大小,同時設(shè)法保持不同容器的字體大小之間的關(guān)系。
對一組鏈接的容器而言,實現(xiàn)上述處理的理想方法是,使用折半搜索算法以調(diào)節(jié)字體大小,直到文本恰好適合為止,或者直到所有鏈接容器到達小于其各自的最小字體大小的字體大小為止(此時,向用戶顯示操作未完成的錯誤或其它指示)。注意到,如果一個容器在其它容器之前到達其最小字體大小,則不一定會使該算法終止。在此類情況中,該算法試圖保持容器之間的字體大小關(guān)系,但并不保證這樣做。
實現(xiàn)上述處理的一種備選方法是,使用與上述方法類似的方法,但是,如果任一鏈接的容器到達了小于其最小字體大小的字體大小,則用錯誤或其它指示進行終止。該備選方法保持了鏈接容器之間的相對字體大小,但是可能產(chǎn)生錯誤,并且與折半搜索算法相比,在大多數(shù)情況下不能產(chǎn)生解答。該備選方法將會用于實現(xiàn)文本流,其中也期望所有鏈接容器間的字體大小同步。
利用字體收縮來實現(xiàn)文本流的另一種方法是,簡單地減小所鏈接集合中第一個容器的字體大小,直到文本與該組容器相適合、或者第一個容器到達其最小字體大小為止。如果是后一種情況,則通過縮小第二容器繼續(xù)該處理,諸如此類,直至文本相適合或者所有容器都到達其最小字體大小為止。如果文本仍然不能完全與容器相適合,則用某種方式對其進行表示,可能會用錯誤通知來表示。在該方法中,容器的排序是重要的,并且將其定義為文本流動的順序,因此,如果文本從容器A開始并且在容器B中繼續(xù),則A是第一容器,B是第二容器。
9.導(dǎo)向?qū)蚴强缭巾撁鎸挾然蚋叨鹊拇怪被蛩骄€,以便輔助容器或其它導(dǎo)向的定位。有兩類導(dǎo)向,固定和不固定的(或浮動的)。經(jīng)由支柱(距離約束,在稍后說明)將導(dǎo)向連接到其它導(dǎo)向或容器。導(dǎo)向不出現(xiàn)在文檔中,只出現(xiàn)在文檔模板309中,作為設(shè)計的輔助工具。通過將指示設(shè)備從標尺區(qū)拖動到工作區(qū)中,可以對導(dǎo)向進行創(chuàng)建。
9.1固定導(dǎo)向?qū)⒐潭▽?dǎo)向固定到頁面上,或頁面的某一部分上,諸如可印刷區(qū)域上。固定導(dǎo)向是固定的,是指它對于所有文檔來說具有相同位置。可以相對于頁面的特定邊緣或者頁面的可印刷部分,例如相對于左邊緣,對此類導(dǎo)向進行固定。在本例中,如果調(diào)整頁面的大小(例如在不同大小的紙張上印刷),則導(dǎo)向與左邊緣的距離保持不變,但是與任何其它各邊緣的距離未必如此。
9.2不固定導(dǎo)向在不同的文檔中,或者當(dāng)文檔內(nèi)的數(shù)據(jù)變化時,例如當(dāng)文檔模板與來自數(shù)據(jù)源的記錄進行合并時,不固定的或浮動的導(dǎo)向可以具有不同的位置。在該例子中,當(dāng)對數(shù)據(jù)與文檔模板進行合并時,一個或多個容器可以保存來自數(shù)據(jù)源的數(shù)據(jù),該數(shù)據(jù)可能使得通過支柱的作用對不固定導(dǎo)向的位置進行確定。在對該數(shù)據(jù)與文檔模板進行合并前,不固定導(dǎo)向的位置可能是未知的,或者可以為編輯和設(shè)計的目的給出初始位置(可能是任意的)。在某些實現(xiàn)方式中,當(dāng)對來自數(shù)據(jù)源的數(shù)據(jù)與文檔模板進行合并時,浮動導(dǎo)向總是具有可由用戶進行編輯或者由版面引擎105進行改變的位置。
9.3導(dǎo)向?qū)崿F(xiàn)方式在具體實現(xiàn)方式中,固定和不固定導(dǎo)向都由實線表示,其中實線可以延伸到位于工作空間的邊緣上的標尺、頁面邊界或頁面的可印刷區(qū)域。利用顏色對固定和不固定導(dǎo)向進行區(qū)分。可選地,可利用實線表示固定導(dǎo)向,而利用虛線或點線表示不固定導(dǎo)向。
參照圖12,通過用指針133從標尺308的水平部分進行拖動,在GUI301中已經(jīng)預(yù)先創(chuàng)建了不固定導(dǎo)向1204。第一容器1201具有一條不固定邊緣1202。已經(jīng)從邊緣1202到不固定導(dǎo)向1204創(chuàng)建了一個支柱1203。依靠直接與導(dǎo)向1204對齊的容器1205的頂邊緣,直接將第二容器1205附加到導(dǎo)向1204。由支柱1207將第三容器1206連接到導(dǎo)向1204。同時,由支柱1209將第四容器1208連接到導(dǎo)向1204。
當(dāng)不固定邊緣1202由于容器1201的高度變化而移動時,導(dǎo)向1204將改變其垂直位置,以便保持支柱約束1203。容器1205、1206和1208隨之移動,以便保持與導(dǎo)向1204相關(guān)的約束。類似地,如果由于數(shù)據(jù)與文檔模板的合并而對容器尺寸進行確定或改變,則支柱的作用可能使得不固定導(dǎo)向根據(jù)哪些容器內(nèi)的內(nèi)容獲取位置。
用于在容器和導(dǎo)向之間添加支柱約束的方法,與說明書其它部分描述的在容器之間添加支柱的方法類似。
用于添加約束從而將容器、例如圖12的容器1205的一條邊緣直接附加到導(dǎo)向上的首選方法是通過將容器或容器邊緣拖動到距導(dǎo)向預(yù)定距離內(nèi)的某個位置上,其中在該位置上容器或容器邊緣可視地“咬住”到導(dǎo)向上;或者類似地,通過拖動導(dǎo)向到距容器邊緣預(yù)定距離內(nèi)的某個位置上,其中在該位置上導(dǎo)向咬住容器邊緣。在咬住狀態(tài)下,當(dāng)從拖動操作中釋放容器、邊緣或?qū)驎r,將對約束進行創(chuàng)建。
10.支柱支柱是一類約束,用于維持容器的特定邊緣與諸如導(dǎo)向和邊距之類的其它對象之間的固定距離。
更佳地,將每個支柱準確地應(yīng)用到屬于同一文檔模板內(nèi)的兩個不同容器的兩條平行邊緣,或者應(yīng)用到容器的一條邊緣和一個平行導(dǎo)向,或者應(yīng)用到兩個平行導(dǎo)向之間。其它實現(xiàn)方式可以限制與支柱連接的對象,或者允許支柱連接一個容器的邊緣,作為規(guī)定其寬度或高度約束的方法,或者允許支柱把邊緣或?qū)蚝推叫许撨吘嗷蜻吘夁B接起來。
支柱是對稱的,是指就位置而言,由支柱所附加的邊緣都不優(yōu)于另一邊緣。
可以可視地或數(shù)字地或利用二者的組合,表示支柱的長度。在一些實現(xiàn)方式中,所有支柱通過圖形表示(支柱圖標)的長度可視地顯示其當(dāng)前長度,而其它屬性作為對話框內(nèi)的數(shù)字或可視設(shè)置是可見的。
回到圖4,通過支柱約束將第一容器407的邊緣410連接到第二容器408的邊緣411。通過支柱圖標412表示支柱約束,其中,可選地,可以在應(yīng)用程序的各種模式下,例如在預(yù)覽模式下,隱藏支柱圖標。
在正常操作模式中,支柱圖標通常是隱藏的,并且當(dāng)與鼠標133相關(guān)聯(lián)的指針313位于該支柱、或者容器、或者邊緣、或者與該支柱相連的導(dǎo)向的附近時,顯示支柱圖標。其附近可以包括任何其它支柱、容器、邊緣、或者直接或經(jīng)由任何數(shù)目的支柱間接與該支柱相連的導(dǎo)向。
由于支柱只有一維長度,因此可從與該支柱相連的邊緣的當(dāng)前位置導(dǎo)出在這一維方向上的支柱位置。因此,在邊緣410和411之間繪制支柱412??刹捎酶鞣N方式計算垂直方向上的支柱位置。一種方法是對相連邊緣的中點取平均,并且將支柱的中點定位在該平均值上。因此,支柱412的中點恰好在邊緣410和411的中點之間的正中位置處。
容器的內(nèi)容可能隨文檔變化,因此對于不同文檔來說,容器的任何不固定邊緣可能位于相對于頁面的不同位置。支柱約束的作用是保持邊緣或?qū)蛑g的距離,因此,由支柱所連接的邊緣或?qū)蚩梢跃哂性谖臋n內(nèi)的可能位置的有限范圍。
參照圖4,如果容器407的第一條邊緣410移動時,例如如果用戶使用指示設(shè)備313通過用戶界面對某條邊緣進行操作時,可能“推動”或“拉動”第二條連接邊緣411,以便保持兩條邊緣之間的支柱約束(412)。在推動或拉動連接邊緣或?qū)驎r,盡管用戶可以察覺到支柱的操作,但是用戶界面上的實際操作與生成文檔所用的操作相同。
在另一種實現(xiàn)方式中,當(dāng)激活支柱工具時,可以對以上敘述的顯示支柱的方法進行修改,以便在激活支柱工具時顯示所有支柱。可選地,只有當(dāng)指針直接在支柱上時,才顯示支柱,而在那時不顯示其它支柱。
如圖4所示,盡管通過支柱412連接的邊緣410和411是相鄰的并彼此相對,但是可以將支柱應(yīng)用于獨立容器的任意兩條平行邊緣,而不考慮兩條邊緣是否相鄰,或者是否彼此相對,或者兩者都不是。
圖11表示容器之間的支柱,使用以上參照圖6A-6C描述的容器的第三組示例性規(guī)則對其進行說明。第一容器1101具有一個最小區(qū)域框1103、一個最大區(qū)域框1105和一個內(nèi)容框1104。將支柱1106連接到內(nèi)容框1104的相應(yīng)邊緣。顯示了第二容器1102,其最小和最大區(qū)域是相同的。因此,在該配置中容器1102具有固定尺寸。支柱1106作用于整個容器1102上,因此,可以在水平方向上推動或拉動該容器。
因此,可以在第一容器的內(nèi)容框的任意一條邊緣與最大區(qū)域框或者第二容器的內(nèi)容框的一條平行邊緣之間,或者與平行導(dǎo)向、邊距或其它對象之間,創(chuàng)建支柱。
10.2在容器之間創(chuàng)建支柱參照圖10,首先通過用鼠標133和指針313點擊工具欄區(qū)域303中的支柱工具按鈕406,激活支柱工具,由此創(chuàng)建一個新支柱。接著,執(zhí)行兩步操作之一,以便鏈接兩個容器。首先,通過在第一容器1001內(nèi)的任意一點1003按下并保持鼠標133,并且將指針313拖動到第二容器1002內(nèi)的任意一個點,并在該點釋放對鼠標133的按壓,能夠?qū)β窂?004進行拖動。這通過圖10中的指針313的位置進行說明??蛇x地,如圖10中的指針313的位置所示,通過首先在第一容器1001內(nèi)的任意一點1003點擊(即按下后釋放)鼠標133,然后在第二容器1002內(nèi)的任意一點點擊鼠標,可以形成容器1001和1002之間的支柱。
在具體實現(xiàn)方式中,所述支柱創(chuàng)建過程以及對將要連接的兩個容器進行選擇的過程,基于路徑1004的起點和終點到各個容器的各個邊緣的最近距離,對容器的連接邊緣進行選擇。例如,起點1003到第一容器1001的右邊緣1006的距離小于它到第一容器1001的左邊緣1005的距離,因此將對右邊緣1006進行連接。類似地,對第二容器1002的左邊緣1007進行連接。
在一種替換的實現(xiàn)方式中,所選擇的邊緣是兩個容器中最接近的一對平行相鄰邊緣,例如,如圖10所示的容器1001和1002中的邊緣1006和1007。
在另一種實現(xiàn)方式中,所選擇的邊緣是在指針從第一容器的內(nèi)部移動到其外部時指針路徑第一次穿過的邊緣,以及在指針從第二容器的外部移動到其內(nèi)部時指針路徑第一次穿過的邊緣。
為了幫助用戶選擇恰當(dāng)?shù)牡诙l邊緣,在定義了支柱的第一點1003后,當(dāng)指針進入鄰近區(qū)域時,以圖形方式對潛在的第二邊緣進行表示,例如通過改變邊緣的線型、或者通過在邊緣的附近顯示一個圖標來實現(xiàn)。只對將潛在地創(chuàng)建有效支柱的邊緣進行表示,包括除了第一點定義的容器之外的容器上的平行邊緣。
另外,如果支柱是不對稱的,例如,如果由于某些原因支柱必須以不同方式處理與其連接的每一條邊緣,則上述支柱創(chuàng)建過程可用圖形方式對此進行表示。例如,由于起點1003在第一容器1001內(nèi),終點在第二容器1002內(nèi),所以支柱操作以不同于邊緣1007的方式對第一容器的邊緣1006進行處理,并且支柱可以以圖形方式對該情況進行表示。
10.3在導(dǎo)向之間創(chuàng)建支柱導(dǎo)向之間的支柱創(chuàng)建類似于上述在容器邊緣之間的支柱創(chuàng)建。由于導(dǎo)向不像容器那樣具有寬度和高度,因此可能的用戶界面較少。另一種方法允許對支柱工具406進行選擇,然后對第一導(dǎo)向進行選擇,并且拖動指示設(shè)備,以便將這樣創(chuàng)建的支柱附加到第二導(dǎo)向。
另一種實現(xiàn)方式允許對兩個導(dǎo)向進行選擇,然后選擇支柱創(chuàng)建按鈕(圖標),由此創(chuàng)建導(dǎo)向之間的不定向支柱??梢酝ㄟ^將導(dǎo)向的選擇順序考慮作為一種區(qū)分主動邊緣和從動邊緣的方式的另一種實現(xiàn)方式,來創(chuàng)建定向支柱。
10.4在導(dǎo)向和容器之間創(chuàng)建支柱在一種實現(xiàn)方式中,將導(dǎo)向拖動到容器的一條邊緣上,會創(chuàng)建一個距離約束,它通常規(guī)定導(dǎo)向和邊緣之間為零距離。可以由支柱表示這個距離約束,因此,拖動導(dǎo)向的方法(或者在構(gòu)造導(dǎo)向或容器期間,或者在編輯時)可能實際上創(chuàng)建了一個支柱。
最好是,可以以與在容器邊緣之間創(chuàng)建支柱類似的方式(選擇工具、點擊邊緣或?qū)?、拖動、釋?,在導(dǎo)向和容器邊緣之間創(chuàng)建支柱。
10.5創(chuàng)建到達邊距的支柱可能也期望在頁邊距和導(dǎo)向或容器邊緣之間存在距離約束。支柱可用于上述目的。在一些實現(xiàn)方式中,這是不必要的,因為可以在相對于頁面的一條邊緣的位置對導(dǎo)向和容器邊緣進行固定,其作用與支柱相同。頁邊距和導(dǎo)向或容器邊緣之間的支柱也是不必要的,因為可以創(chuàng)建相對于所需頁邊距固定的導(dǎo)向,并且可能經(jīng)由支柱將其它導(dǎo)向和容器邊緣與其進行鏈接。因此,支柱不必將頁邊距鏈接到導(dǎo)向或容器邊緣。
在另一種實現(xiàn)方式中,導(dǎo)向和容器邊緣可能不具有相對于頁邊距固定的能力。在這種情況下,最好使用支柱表示到頁邊距的距離約束。
10.6支柱和容器之間的交互作用支柱以多種方式與容器進行交互作用。作為確定在文檔中將內(nèi)容放置在何處的方式,支柱的最簡單操作是限制容器邊緣和導(dǎo)向所處的位置。然而,支柱到容器的連接還可能對容器的狀態(tài)進行修改,特別是對容器的邊緣狀態(tài)進行修改,以便將容器保持在允許的狀態(tài)集合之內(nèi)。
在具體實現(xiàn)方式中,保證將支柱附加到容器的規(guī)則為1.如果把支柱連接在兩條固定邊緣之間,則所選定邊緣變?yōu)椴还潭ǖ摹?br>
2.如果將支柱連接到兩條固定邊緣之間,則第二條選定邊緣變成不固定的,并且如果在與支柱方向相對應(yīng)的一維方向上容器的長度是固定的,則與支柱垂直的兩條邊緣都是不固定的,而所述一維方向上的容器長度保持不變。例如,如果第二條選定邊緣是固定寬度容器的垂直邊緣,則該容器的兩條垂直邊緣將變成不固定的,以便使該容器可水平移動,而其寬度保持不變。
3.如果附加到支柱的兩條容器邊緣和/或?qū)蜃兂晒潭ǖ?,則刪除該支柱。
4.如果用戶對固定容器邊緣或?qū)蜻M行移動,則可以修改附加到它的任何支柱的長度設(shè)置,以便使與該支柱相連的其它邊緣或?qū)虮3植蛔儭?br>
11.可變數(shù)據(jù)用戶界面103允許用戶將數(shù)據(jù)源和可變文檔模板相關(guān)聯(lián),并且設(shè)計該模板以便在數(shù)據(jù)源和模板進行合并時生成有效文檔。合并是以交互方式在后臺執(zhí)行的,或者在軟件應(yīng)用程序121的版面引擎105組件要求時執(zhí)行的。
更佳地,以交互方式將數(shù)據(jù)源和可變文檔模板相關(guān)聯(lián),并且在用戶以交互方式瀏覽所合并的文檔時,版面引擎105根據(jù)請求合并并且布置文檔頁面。另一種實現(xiàn)方式可以對數(shù)據(jù)和模板進行合并,并且印刷所合并的文檔,而在合并處理期間不需要交互的用戶界面。另一種實現(xiàn)方式可以在后臺合并數(shù)據(jù)和模板,以生成合并的文檔,并且通過消息提醒用戶合并處理期間出現(xiàn)的問題,其中該消息與用戶對合并文檔的瀏覽異步地出現(xiàn)。
11.1數(shù)據(jù)源選擇為了對可變文檔模板和數(shù)據(jù)源合并,必須將適當(dāng)?shù)臄?shù)據(jù)源和模板相關(guān)聯(lián)。實現(xiàn)上述關(guān)聯(lián)的一種方法是,使用圖13所示的數(shù)據(jù)源選擇窗口,其中該窗口構(gòu)成了用戶界面103的一部分。
圖13表示由UI應(yīng)用程序103在顯示屏114上顯示的GUI窗口,該窗口允許用戶以交互方式對數(shù)據(jù)源進行選擇,其中數(shù)據(jù)源可以是數(shù)據(jù)庫、文件、多個數(shù)據(jù)庫的聯(lián)合、或某些其它信息源。如圖14所示,一旦選定了數(shù)據(jù)源,就將數(shù)據(jù)源和模板相關(guān)聯(lián)起來,直到明確或隱含地解除關(guān)聯(lián)為止。
11.2數(shù)據(jù)過濾有可能數(shù)據(jù)源內(nèi)的所有數(shù)據(jù)對于特定合并操作而言不是都有效的。當(dāng)出現(xiàn)此類情況時,對于用戶來說可以有許多可能的方式來限制將要使用的數(shù)據(jù)的范圍。一種實現(xiàn)方式是允許算法數(shù)據(jù)過濾,以便限制將要使用數(shù)據(jù)的種類和數(shù)量。例如,可以選擇郵政編碼的范圍,以便只使用與所需地理區(qū)域相關(guān)聯(lián)的記錄來生成文檔。這類算法過濾在本領(lǐng)域中是非常公知的。另一種實現(xiàn)方式可以是,當(dāng)數(shù)據(jù)源和模板相關(guān)聯(lián)之后,用戶經(jīng)由用戶界面選擇并標記將要使用的數(shù)據(jù)。
圖17表示在通過選擇菜單項將數(shù)據(jù)源和可變文檔模板相關(guān)聯(lián)之后,用戶能夠經(jīng)由用戶界面103的GUI301訪問數(shù)據(jù)過濾操作的首選方法。
11.3數(shù)據(jù)排序與過濾有關(guān)的是對數(shù)據(jù)集進行排序以便找到相關(guān)數(shù)據(jù)的能力。一種實現(xiàn)方式允許用戶基于用戶選擇的數(shù)據(jù)源的“關(guān)鍵字”變量,對數(shù)據(jù)源記錄的排序方法進行選擇。按照所選關(guān)鍵字變量的字母表升序?qū)λ杏涗涍M行排序。例如,如果關(guān)鍵字是變量“名稱(Name)”,則在執(zhí)行排序操作后,將會遇到名稱以字母A開始的記錄,然后遇到名稱以字母B開始的記錄(在英語文本的情況下)。圖15表示一個適合的用戶界面的一部分,該圖表示排序可作為數(shù)據(jù)源選擇處理的一部分。通過如圖17所示的菜單選擇,也有可能在關(guān)聯(lián)數(shù)據(jù)源之后進行排序。
另一種實現(xiàn)方式可以允許用戶為不同種類的數(shù)據(jù)選擇排序方法,諸如數(shù)字的或語言特定的方法。另一種實現(xiàn)方式可以基于所存儲的信息的種類和所選的關(guān)鍵字變量,自動對排序方法進行選擇,在自動選擇的方法是一個較差的選擇時,可能需要借助忽略(override)機制。
11.4記錄瀏覽一個數(shù)據(jù)源包含許多記錄,每條記錄是相關(guān)信息的集合。例如,數(shù)據(jù)庫可能包含描述客戶的記錄,或者可能包含產(chǎn)品記錄。如果能夠?qū)?shù)據(jù)庫內(nèi)的記錄排序成為一個序列,并且由用戶進行瀏覽,則這是有益的。
首選的瀏覽方法是,顯示可由指示設(shè)備313和鼠標133激活的一組GUI按鈕,如圖18中的符號1805所示。每個按鈕要么在記錄序列中前進或后退一條記錄,要么到達序列的開始或結(jié)尾處,要么跳過某幾條記錄。一種方法還包括一個由指示設(shè)備313/鼠標133或者鍵盤132所激活的菜單,其中菜單顯示這些選項(如圖17所示),并且除此以外還允許用戶對特定編號的記錄進行瀏覽。
當(dāng)瀏覽到特定記錄時,軟件應(yīng)用程序121在顯示屏144上以某種方式顯示當(dāng)前記錄。通過對該記錄與可變文檔模板進行合并,并且對該序列內(nèi)的當(dāng)前記錄的索引進行顯示,可能產(chǎn)生上述處理。
11.5變量各數(shù)據(jù)源可由許多命名變量組成,其中命名變量適用于數(shù)據(jù)源內(nèi)的記錄。例如,客戶數(shù)據(jù)源可能具有用于客戶名稱和客戶地址的變量。它們是變量,原因在于盡管對每條記錄來說變量名稱可能是相同的,但是每條記錄的值可以不同。
具有顯示變量的方法,以便使用戶可以對數(shù)據(jù)源內(nèi)的記錄進行檢查,并且對與可變文檔模板相關(guān)聯(lián)的變量進行選擇,是有用的。
用于顯示變量的首選方法是,如圖18所示,在浮動窗口內(nèi),按名稱和當(dāng)前值垂直地列出每個變量。通過檢查當(dāng)前記錄,以及在數(shù)據(jù)源內(nèi)查找該記錄的各個變量的值,來對當(dāng)前值進行確定??梢匀缜八瞿菢永糜涗洖g覽對當(dāng)前記錄進行選擇。注意到,不是所有的值或變量名稱都需要顯示。如果信息太多以致于不適應(yīng)窗口時,可以有瀏覽機制以便允許用戶對各變量或值進行查看。另一種實現(xiàn)方式可以使用類似顯示,它是另一個窗口的一部分(換句話說,子窗口)。如果沒有與文檔模板相關(guān)聯(lián)的數(shù)據(jù)源,則窗口將不會包含變量,如圖16所示。
變量可以包含若干種類的數(shù)據(jù)。變量可以存儲文本值,或者可以存儲圖像。在下文中,這些變量分別稱為文本變量和圖像變量。
更佳地,數(shù)據(jù)源的變量具有一種類型的值,因此變量可顯示文本或圖像,但不能同時對其二者進行顯示。不同的實現(xiàn)方式允許數(shù)據(jù)源的變量對每個記錄存儲不同類型的數(shù)據(jù)。例如,在一條記錄中產(chǎn)品描述變量可能包含文本描述,而在同一數(shù)據(jù)源的另一條記錄中同一變量具有圖像值。
11.6文本變量文本變量包括數(shù)據(jù)源內(nèi)的每條記錄的文本值。應(yīng)用程序121通過在數(shù)據(jù)源的變量列表內(nèi)在變量名稱附近放置不同的標簽,如圖18中的標簽1801所示,來向用戶通知變量是文本變量。另一種實現(xiàn)方式可能在變量名稱的附近對變量的值進行顯示,以此作為通知變量類型的方式,如文本1802所示,盡管此方法本身不能保證是明確的,因為在一些情況中圖像數(shù)據(jù)可能看起來與文本數(shù)據(jù)相同。應(yīng)用程序121只使用該技術(shù)作為顯示變量數(shù)據(jù)的輔助方法,而不是作為區(qū)分變量類型的主要方法。
11.7圖像變量圖像變量包含在數(shù)據(jù)源的每條記錄中的圖像值。該值可以是壓縮格式或非壓縮格式的圖像數(shù)據(jù)、或者文件名稱、或者其它用于定位圖像資源的存取方法。應(yīng)用程序121通過在數(shù)據(jù)源的變量列表內(nèi)在變量名稱附近放置不同標簽,如圖18中的標簽1803所示,來向用戶通知該變量是圖像變量。另一種方法是在變量名稱的附近顯示變量的值,如文本1804所示,盡管該方法不能保證是明確的,因為圖像文件名稱(例如)可能與文本數(shù)據(jù)相混淆。
11.8拖放到容器當(dāng)數(shù)據(jù)源的變量可見時,具有用于允許用戶構(gòu)建可變文檔模板的方法,以便使用戶能夠了解存在哪些變量,是有用的。允許根據(jù)給定變量創(chuàng)建適當(dāng)類型的容器,也是有用的。
通過允許用戶使用鼠標133和指示設(shè)備313直接操作變量列表中的變量(如圖19所示),應(yīng)用程序121經(jīng)由用戶界面103允許創(chuàng)建適當(dāng)類型的容器。用戶使用指示設(shè)備313選擇一個變量(例如用1902標記的矩形區(qū)域中的一個),并且將其拖動到設(shè)計表面上,然后釋放該選擇1906。這作為將創(chuàng)建適當(dāng)類型的容器并用該變量進行初始化的信號。例如,按上述方式拖動到設(shè)計表面上的文本變量(如標簽1901所示),將生成一個文本容器,該文本容器顯示當(dāng)前記錄的變量值(如文本1903所示)。如果將圖像變量1904拖動到設(shè)計表面上,生成一個圖像容器,該圖像容器顯示文件名稱1905和/或圖像本身,并根據(jù)用戶使用的設(shè)置進行縮放、剪切和對齊處理。
這樣生成的文本容器的初始狀態(tài)是用戶可配置的,但是另一種方法是利用用戶釋放選擇時的位置作為線索,將該容器錨定到頁面上。
也許不可能使用該位置作為容器的精確位置,因為該位置可能是無效的,諸如在設(shè)計窗口外或在頁面外(如果是無效的話),因此該位置可以是線索。容器可以以該位置為中心;或者其一角接近于該位置;或者在不違反其它約束的情況下,將該容器放置得盡可能靠近該位置,例如完全在頁面內(nèi);或者只將容器放置到一個默認位置或隨機位置上,并且忽略該位置。有多種可能的實現(xiàn)方式對由于拖動指示設(shè)備而新建的對象進行定位。
應(yīng)用程序121還創(chuàng)建一個足夠大的容器,以便對拖動到該設(shè)計上的變量的所有當(dāng)前記錄內(nèi)容進行存儲。因此大段文本將生成一個大的文本容器。另一種方法可以預(yù)先計算被拖動變量中的數(shù)據(jù)的中值大小,并且生成足以顯示中值大小的容器。其它方法能夠使用該方法的派生方法,以創(chuàng)建大到足以存儲最大記錄數(shù)據(jù)或最小記錄數(shù)據(jù)的容器,或使用某些其它算法。
另一種方法是將變量拖動到設(shè)計空間中,然后為保存該變量值的容器清除一個矩形。再一種方法是選擇變量,然后為該容器清除一個矩形,而無需首先執(zhí)行拖動操作。另一種備選方案是利用指示設(shè)備對變量表示進行雙擊,并且使相應(yīng)容器在該設(shè)計中出現(xiàn)在隨機位置或由算法選擇的位置上。
另一種實現(xiàn)方式是一旦數(shù)據(jù)源和設(shè)計相關(guān)聯(lián)后,就使數(shù)據(jù)源內(nèi)的所有變量均在設(shè)計中出現(xiàn)作為容器,并且使用戶根據(jù)需要對容器進行定位或刪除。按此方式創(chuàng)建的容器的初始位置和尺寸,取決于數(shù)據(jù)源內(nèi)的數(shù)據(jù)的排序以及各變量中內(nèi)容的相對尺寸。在此類實現(xiàn)方式中,如果表示特定變量的容器已經(jīng)存在,則把數(shù)據(jù)源和現(xiàn)有設(shè)計相關(guān)聯(lián),將不會為該變量創(chuàng)建容器。該方法不是首選方法,因為它不便于對引用同一變量的多個容器進行創(chuàng)建。
具體實現(xiàn)方式還支持數(shù)據(jù)源變量與已經(jīng)創(chuàng)建的容器的鏈接。該方法允許用戶對設(shè)計進行創(chuàng)建而不必首先關(guān)聯(lián)數(shù)據(jù)源。此類實現(xiàn)方式還可以提供任意順序的數(shù)據(jù)源的關(guān)聯(lián)、容器的創(chuàng)建、以及變量與容器的鏈接,以支持靈活的工作流。
此類方法還允許利用拖放機制對現(xiàn)有容器的內(nèi)容進行修改,其中可利用鼠標133和指針313的組合實現(xiàn)拖放機制,以便使拖動變量到容器內(nèi)可以重新指定容器顯示的內(nèi)容,或者增加容器保存的內(nèi)容。例如,已構(gòu)建包含靜態(tài)文本“Dear”的容器,然后將名稱為“First Name”的變量拖動到該容器中,接著將名稱為“Last Name”的變量拖動到該容器中。取決于操作模式和容器的設(shè)置,這可以產(chǎn)生一個對所有數(shù)據(jù)進行顯示的容器,或者可以產(chǎn)生一個只對最后變量的值進行顯示的容器。
11.9顯示和瀏覽多個文檔由于文檔是對文檔模板和數(shù)據(jù)源中的數(shù)據(jù)進行合并的產(chǎn)物,因此作為單個合并操作的結(jié)果,能夠生成許多文檔??墒褂枚喾N方法對此類文檔進行瀏覽和顯示。
一種實現(xiàn)方式包含許多顯示和瀏覽文檔的方式,并依賴于“現(xiàn)場校對”(在下文進行描述),其中在現(xiàn)場校對中,在需要時將數(shù)據(jù)源的每條記錄與文檔模板進行合并,以便生成文檔模板的約束和給定合并文檔的數(shù)據(jù)的視圖。對此類實現(xiàn)方式,取決于用戶設(shè)置和/或生成的文檔的性質(zhì),存在幾種可能的用戶界面。此類用戶界面的概要如下·在與字處理文檔或電子表格類似的垂直和/或水平組織的流動文檔中,對每篇文檔進行顯示,并且通過滾動機制、指示設(shè)備和/或鍵盤對其進行瀏覽??墒褂弥T如圖18中的按鈕1805之類的獨立機制,對數(shù)據(jù)源中的記錄進行瀏覽。
·合并時每條記錄能夠產(chǎn)生有許多頁面的文檔。按垂直方式和/或水平方式對這些頁進行組織并顯示。可以使用獨立機制瀏覽數(shù)據(jù)源中的記錄。
·如果與每條記錄合并時文檔模板生成很少的頁面,則可以按垂直方式和/或水平方式對幾篇文檔進行顯示。例如,如果每篇文檔在長度上只有一個頁面,則有可能將所有文檔按線性順序排列,使用分窗系統(tǒng)顯示它們,并使用滾動機制來瀏覽文檔。這將文檔內(nèi)的瀏覽和數(shù)據(jù)源的記錄之間的瀏覽映射到空間瀏覽上。
·如果每篇文檔具有一個或多個頁面,則可以按水平方式對其進行組織,然后通過把每個后續(xù)文檔放置到表示前一條記錄的文檔的下面,能夠使用垂直方向遍歷數(shù)據(jù)源的記錄,因此使用一個方向?qū)ξ臋n空間進行瀏覽??梢曰Q水平方向和垂直方向,其作用相似。
在上述每種情況下,可以有其它方法在記錄之間以及頁面和/或文檔之間進行瀏覽,如通過按鈕、菜單等來實現(xiàn)。
在替換的實現(xiàn)方式中,可以獨立于合并文檔對文檔模板進行顯示。只在“印刷預(yù)覽”形式下才生成合并文檔,其中在印刷預(yù)覽中,只能對單條記錄與模板的合并結(jié)果進行顯示而不能進行編輯。在另一種備選方案中,文檔模板可以是可見的,并且非交互的印刷預(yù)覽以及現(xiàn)場校對預(yù)覽也是可見的,其中現(xiàn)場校對預(yù)覽允許對文檔模板以及合并文檔的預(yù)覽進行編輯。上述工作方式的其它組合也是可能的。
11.10校對在使用可變數(shù)據(jù)的屏上作業(yè)和印刷作業(yè)中,通過有效地對表示正在合并的記錄的全部范圍的記錄進行查找,特別是從一組可變數(shù)據(jù)記錄中進行查找的極端情況,能夠顯著提高生產(chǎn)率,以便使用戶理解最終的合并文檔將如何出現(xiàn)。
預(yù)覽和試印許多記錄,以查看不同大小的可變圖像和不同長度的文本如何對合并文檔進行影響,是有用的。用于印刷的最有用的樣本記錄包括·將如何印刷大部分的記錄;以及·有很少或很多正在顯示的內(nèi)容的記錄。
該原則的更復(fù)雜的擴展包括·當(dāng)文本已經(jīng)縮小到很小或到達其最小尺寸時;·當(dāng)不對任何可變數(shù)據(jù)文本進行顯示時;·當(dāng)圖像放大太大時(印刷質(zhì)量可能變差);以及·當(dāng)圖像的縱橫比失真太多時。
當(dāng)處理可變數(shù)據(jù)時,文檔中記錄或版本的數(shù)目可能很大,并且沒有自動校對機制,用戶必須對每條記錄進行手工審查,以便檢查所有合并文檔的最終外觀是否是可接受的。例如,可能數(shù)據(jù)庫中只有一條記錄包含將會生成讓人不愉快的外觀的內(nèi)容,并且很難對該記錄進行查找。對于記錄數(shù)目很大的可變數(shù)據(jù)作業(yè)來說更是如此。
公開了一種預(yù)覽和試印可變數(shù)據(jù)印刷作業(yè)的有效方法,該方法確保了每篇文檔的最終外觀都是可接受的,并且將正確地進行印刷。選擇有限數(shù)目的記錄用于進行屏上預(yù)覽和/或試印,所述記錄表示最終印刷的所有其它記錄。通過對每條記錄的合并外觀進行分析,并且通過使用預(yù)定規(guī)則集合確定對文檔外觀有最重要影響的記錄,來對這些記錄進行選擇。
選擇性預(yù)覽和校對提供了包含極端情況在內(nèi)的輸出結(jié)果的輪廓,從而在印刷整個作業(yè)時用戶不會感到驚訝。顯示極端情況,即顯示具有最短和最長顯示尺寸的那些記錄,是一種有價值并且經(jīng)濟的方法,可以推廣該方法以包括“典型”情況、最極端情況以及在中間和最極端情況之間的許多記錄的短列表,其中典型情況包括中間顯示尺寸。
11.11現(xiàn)場校對現(xiàn)場校對是在需要時以交互方式與可變文檔模板合并的可變數(shù)據(jù)對進行顯示的過程。圖20表示圖形用戶界面2000,在該界面上將具有項目2010-2020的數(shù)據(jù)源的記錄與模板對進行合并,以便說明(2002)如果印刷的話該記錄的部分看上去會是什么樣。對額外邊界2004和顏色2006進行添加,以便使可變文檔模板內(nèi)定義的約束是可見的,但并不印刷此類人為產(chǎn)物。
現(xiàn)場校對比單獨的合并過程更加有利,因為通過交互瀏覽很可能及早地發(fā)現(xiàn)模板設(shè)計中的錯誤。
應(yīng)用程序121的具體實現(xiàn)方式應(yīng)用了現(xiàn)場校對。替換的實現(xiàn)方式應(yīng)用現(xiàn)場校對作為一個可選項,或者根本不使用現(xiàn)場校對。
11.12選擇性校對選擇性校對是在可變數(shù)據(jù)印刷應(yīng)用程序121中僅查看選定記錄的一種方法,選定記錄要么是典型的普通文檔,要么最不像普通文檔。
在選擇性校對期間,如果用戶能夠規(guī)定要測量的多種類型的項目,則將是有用的。以下度量可以應(yīng)用于單獨的容器、鏈接容器的支柱、頁面、數(shù)據(jù)源中的記錄、或數(shù)據(jù)源中的變量。在以下選擇性校對的描述中這些一并稱為“設(shè)計項”。術(shù)語“合并尺寸”是指將來自數(shù)據(jù)源的記錄與可變文檔模板進行合并后設(shè)計項的尺寸度量。稍后將論述各種尺寸度量。
當(dāng)激活選擇性預(yù)覽或選擇性校對時,用戶以交互方式或者根據(jù)首選項設(shè)置選擇設(shè)計項。對每一條記錄和可變文檔模板進行獨立合并。對于每一條記錄,對選定設(shè)計項的合并尺寸進行記錄(存儲)。將這些合并尺寸進行比較,以找到選定設(shè)計項的合并尺寸是以下尺寸的記錄·最小值;·中值、平均值或集合中項的一些其它度量;以及·最大值。
為了找到最相關(guān)的記錄,應(yīng)用程序121檢查每條記錄的實際顯示尺寸,而不是僅僅檢查字符數(shù)。例如,“w”比“i”占據(jù)更多空間,并且其對于容器尺寸和文檔的整體外觀有更大的影響。
一旦識別了這些記錄后,就把它們提供給用戶用于進行屏上預(yù)覽和/或印刷。
用戶還可以預(yù)覽或者試印合并文檔中的附加記錄,以提高他們對可變數(shù)據(jù)印刷作業(yè)中的所有記錄都將正確顯示的信心。最好是,使用與集合中項之間的偏差對設(shè)計項進行排序,以便首先或以最顯著的方式向用戶提供其選定設(shè)計項的合并尺寸最不相同的記錄。
11.12.1最小和最大內(nèi)容尺寸設(shè)計項尺寸的有用度量是對其最小或者最大寬度、高度或內(nèi)容面積進行考慮。關(guān)于獨立容器來說,上述度量容易計算。對于鏈接容器的支柱而言,寬度或者高度是有意義的,但二者不是同時有意義的,因此面積不是有意義的度量。對于獨立頁面而言,可使用容器的寬度之和、或容器的高度之和、或容器的面積之和作為度量。對于記錄而言,可使用為顯示該記錄所需的所有頁面的這些度量之和作為度量。對于變量而言,可使用部分或全部顯示該變量值的所有容器作為度量。還可以使用其它方法來選擇度量并計算度量之和。
11.12.2典型尺寸內(nèi)容尺寸的另一種有用度量是對其給定設(shè)計項的典型尺寸進行考慮。典型尺寸可以是平均寬度或高度、或者平均面積、或者面積之和的平均值、或者寬度和高度的平方和的平均值、或者其它可能性。另一種度量是使用中值代替以上各項的平均值。可以使用其它統(tǒng)計方法。
可以使用這些度量中的任何一個或全部來定位特定設(shè)計項的典型實例。例如,可以定位其特定容器面積與平均面積最接近的記錄。
11.12.3空白(white-space)尺寸空白是確定合并文檔集合內(nèi)的設(shè)計項的典型性的另一種有用度量。可以用多種方式定義空白。例如,可以將空白定義為由容器約束定義的容器面積與在和特定記錄合并時該容器內(nèi)的內(nèi)容面積之間的面積差,例如,當(dāng)容器具有最小尺寸并且內(nèi)容與該尺寸不相適應(yīng)時,可以這樣進行定義??蛇x地,可以將空白定義為容器的尺寸與該容器中內(nèi)容的尺寸在一維方向、諸如寬度或高度方向上的差。
空白的最大化類似但又不同于內(nèi)容尺寸的最小化,反之亦然。由于諸如最小尺寸之類的容器約束在計算中起作用,所以它們并不相同。例如,查找具有最大內(nèi)容面積的記錄與查找具有最小空白面積的記錄未必相同。
11.12.4最不同的尺寸最影響可變數(shù)據(jù)印刷的是對與眾不同的文檔進行定位。因此需要異常性(unusualness)度量??梢杂枚喾N方式定義此度量。此度量的一個例子是計算與設(shè)計項的中值尺寸的最大偏差。將尺寸定義為寬度、高度、面積、寬度和高度之和、寬度和高度的平方和等中的某個度量。中值尺寸可以通過下列方式進行計算對于數(shù)據(jù)源中的每一條記錄,檢查正在討論的各設(shè)計項,查找該設(shè)計項的尺寸,然后查找這樣確定的所有尺寸的中值。接著計算各設(shè)計項的尺寸與中值尺寸的最大差值,從而能夠找到具有最大偏差的設(shè)計項。
圖21A和21B表示用于利用各文檔的容器的寬度和高度計算普通文檔和最大差異文檔的方法2100。方法2100可以執(zhí)行作為應(yīng)用程序121的子模塊。
該過程在步驟2101開始。首先,方法2100對數(shù)據(jù)源中的所有記錄進行迭代,在步驟2102中從第一條記錄開始,并且使用由步驟2103、2104和2105構(gòu)成的循環(huán)過程,對該文檔內(nèi)的每個容器的位置和尺寸進行計算。
在步驟2106中,方法2100通過在所有文檔上將寬度和高度進行相加,然后除以文檔數(shù),來計算文檔模板中各容器的平均寬度和高度。
一旦已知文檔模板內(nèi)各容器的寬度和高度的平均值后,方法2100在步驟2107中從第一條記錄開始,并經(jīng)由由步驟2108、2113和2116構(gòu)成的循環(huán),對所有記錄進行迭代處理。對于由步驟2108、2111和2115組成的另一個循環(huán)定義的文檔內(nèi)的每個容器,方法2100在步驟2109中對該容器的寬度與平均寬度的差值進行計算,在步驟2110中該容器的高度與平均高度的差值對進行計算。步驟2110計算上述每個值的平方,然后將它們加在一起,以便提供該文檔的數(shù)值。將結(jié)果求平方,意味著值距離平均值越遠其權(quán)重越大。
對于任意給定文檔上的任意給定容器來說,一旦計算出上述數(shù)值后,就有可能計算出該容器與平均尺寸的接近程度。如果該容器具有最小值,則其最接近平均值。另一方面,如果該容器具有最大值,則其距離平均值最遠。
如果用戶希望知道哪個文檔是最普通的文檔,或者哪個文檔是最大差異的文檔,則在步驟2112中將每篇文檔上的每個容器的值加在一起。由此形成一個列表,然后在步驟2114中對其進行排序,從而結(jié)束方法2100。
具有最小值的文檔最接近各容器上的普通文檔。具有最大值的文檔最不像普通文檔。然后根據(jù)需要可以向用戶顯示許多此類文檔,諸如5個最差文檔、或者10個最差文檔。
其它方法能夠在不同于容器的寬度和高度的屬性上能夠執(zhí)行上述計算。其它有用的屬性是內(nèi)容的尺寸、字體大小(用于字體變大和縮小的容器)、文檔上的空白面積、支柱的長度或者容器邊緣的位置。
11.13印前檢查(Pre-Flight Check)上述類型的尺寸度量可以用于發(fā)現(xiàn)典型的、非典型的或有問題的設(shè)計項?!坝∏皺z查”是在可變數(shù)據(jù)印刷領(lǐng)域內(nèi)使用的一個術(shù)語,用來描述自動預(yù)印刷過程,該過程試圖在將整個作業(yè)提交給硬拷貝印刷之前發(fā)現(xiàn)合并文檔的問題或其它特征。
上述檢查可以是簡單地對將會可接受地印刷所有記錄進行確定而不作其它額外工作,報告不存在問題,或者以某種方式引起對有問題記錄的注意。
更佳地,根據(jù)用戶的請求執(zhí)行印前檢查,并且提醒用戶該檢查是否發(fā)現(xiàn)問題。如果發(fā)現(xiàn)問題,則向用戶顯示遇到的第一個問題,同時通過可視或文本方法向用戶顯示對該問題特性的解釋。
另一個實現(xiàn)方式能夠發(fā)現(xiàn)并列出全部問題,然后由用戶進行調(diào)查。當(dāng)用戶編輯可變文檔模板時,在后臺進行上述檢查,以便在窗口或子窗口中提供問題的連續(xù)更新列表。如果列表為空,則用表示沒有發(fā)現(xiàn)問題的條目將其替代。這個后臺檢查可以僅僅在該軟件空閑時出現(xiàn),可以連續(xù)出現(xiàn),或者在其它時間點或情形時出現(xiàn)。
12.版面方法概述本公開的一個方面是在頁面上布置項目的方法。版面包括要布置的項目的集合,以及定義該項目在版面上的布置位置的一組規(guī)則或約束。描述了幾種版面方法,包括1.用于定義版面的模型。版面模型定義了能夠出現(xiàn)在版面中的項目的類型和屬性,以及用來定義應(yīng)當(dāng)如何布置項目的允許規(guī)則或約束。利用數(shù)據(jù)結(jié)構(gòu)在計算機101的工作存儲器中存儲版面。以下將詳細說明幾種版面模型。
2.創(chuàng)建和編輯版面的方法。它包括能夠用于創(chuàng)建版面的一組操作??梢杂密浖δ艿姆绞綄崿F(xiàn)此類操作,可以對軟件功能進行調(diào)用以便根據(jù)版面模型構(gòu)建數(shù)據(jù)結(jié)構(gòu)。以下將詳細說明此類操作。
3.計算版面中項目的位置和尺寸的方法。給定一個由一組項目和規(guī)則定義的版面,這種版面計算方法對根據(jù)規(guī)則如何布置項目進行了規(guī)定,并且它可以由在計算機101上執(zhí)行的軟件105形成。以下將詳細說明計算版面的方法。
最好是,將根據(jù)特定版面模型創(chuàng)建和編輯版面的方法、以及為該版面模型計算項目位置的方法合起來實現(xiàn)為一個軟件組件,即先前提及的版面引擎105。注意到,版面引擎105不包括用戶界面103??梢詫⒃S多不同的用戶界面同先前參照圖1A所描述的版面引擎105一起使用。
13.版面模型概述版面模型包括基礎(chǔ)版面模型和基礎(chǔ)模型的幾種擴展?;A(chǔ)版面模型定義了版面項目的基本屬性,以及用來定義版面的規(guī)則。還定義了幾條附加規(guī)則,用于擴展基礎(chǔ)版面模型。規(guī)則的某些組合是益處的,因為它們產(chǎn)生了簡單的版面模型。其它組合是有益處的,因為它們易于使版面模型的用戶理解。
以下說明基礎(chǔ)版面模型和附加規(guī)則。將會說明包含特定規(guī)則組合的幾種實現(xiàn)方式。
14.版面創(chuàng)建和編輯概述版面通常與文檔中的一個頁面部分相關(guān)聯(lián)。假定創(chuàng)建和編輯操作對最初被創(chuàng)建為空版面的版面起作用,并且創(chuàng)建和編輯操作是由用戶界面軟件103所調(diào)用的功能。在組合數(shù)據(jù)和文檔模板以生成文檔時,也可以由服務(wù)器軟件執(zhí)行此類操作,而無需用戶的直接輸入。
更佳地,用于創(chuàng)建或編輯版面的操作不直接對應(yīng)于軟件用戶執(zhí)行的操作。通常由用戶界面軟件103或更佳地由另一層軟件,將用戶的單個操作翻譯成多個版面創(chuàng)建操作,其中另一層軟件向版面引擎105提供比版面引擎105直接支持的操作更高層的接口。
創(chuàng)建和編輯版面的方法至少包括以下操作1.添加項目;2.刪除項目;3.添加規(guī)則;以及4.刪除規(guī)則。
可以增加其它操作以便對項目或規(guī)則進行修改。編輯操作的準確形式取決于所使用的具體版面模型。許多不同形式都是可能的。以下詳細說明此類操作。
在向版面中添加項目和規(guī)則時,容易添加矛盾的規(guī)則組合,矛盾的含義是指無論怎樣放置項目均不能滿足所有規(guī)則。此類版面稱為過約束的。相反,規(guī)則的給定組合可能容許多種可能的解決方案,也是有可能。例如,該項目的多種可能放置方式均滿足所有規(guī)則。此類版面稱為欠約束的。最好確保每個版面只有一種解決方案。因此,除用于創(chuàng)建版面的操作之外,應(yīng)用程序121還包括用來確保只有一種解決方案的方法。該方法被合并到版面創(chuàng)建方法和用于計算版面的方法之中。
由于需要防止用戶對沒有解決方案或有多種解決方案的版面進行創(chuàng)建,所以可以協(xié)同編輯操作一起執(zhí)行一致性和唯一性檢查??梢栽诿總€編輯操作后執(zhí)行此類檢查,以便測試該操作是否有效。如果無效,則不允許改變,并且立即向用戶提供適合的反饋。
因此,一致性和/或唯一性檢查可以被包括作為編輯操作的一部分??蛇x的,版面計算能夠確保為使用版面創(chuàng)建和編輯操作所創(chuàng)建的每個可能版面計算出一個定義明確的解決方案。
以下將詳細說明確保版面解決方案存在并且唯一的方法。
15.版面計算概述對于每個版面模型,都有對版面項目的位置和尺寸進行計算的相應(yīng)方法??梢栽趯τ谠搯栴}而言方便的任意二維坐標系中對位置和尺寸進行定義。
可以使用多種方法對版面項目的位置和尺寸進行計算,它們包括1.樹遍歷方法;2.單形法;3.帶有二次目標函數(shù)的改進型單形法;以及4.基于圖的版面。
樹遍歷方法適用于由基礎(chǔ)版面模型所組成的有限版面模型。其它方法用于基礎(chǔ)模型的各種擴展。對于解決各種優(yōu)化問題來說,方法2、3和4是等效的。
優(yōu)化問題包括一組約束和一個必須被最小化或最大化的目標函數(shù)。在應(yīng)用程序121中,對版面進行定義的某些規(guī)則表示約束,而一些規(guī)則用于對目標函數(shù)進行定義。
單形法是用于求解特定類型的優(yōu)化問題的公知方法。單形法適合于與作為本公開一部分的一些版面模型一起使用。
單形法只支持線性目標函數(shù),因此需要有一個嚴格的凸函數(shù),以確保版面有唯一的解決方案。通常使用二次目標函數(shù),因為存在用于求解具有線性約束和二次目標函數(shù)的優(yōu)化問題的公知技術(shù)。最簡單的方法是對單形法進行修改。此類方法在求解優(yōu)化問題領(lǐng)域中是非常公知的,并且可以使用任意方法,而并不背離本公開的范圍。
16.版面模型的詳細描述16.1基礎(chǔ)版面模型應(yīng)用程序121的一個方面包括一種布置版面項目集合的方法。通常,根據(jù)一組規(guī)則或約束將項目布置在矩形空間內(nèi)。圖22表示一組項目和約束的例子。
為了定義此類版面,描述了一個基礎(chǔ)版面模型?;A(chǔ)版面模型用于定義版面的基本結(jié)構(gòu)、以及對版面可變性的限制。例如,使用基礎(chǔ)版面模型,來定義版面項目之間的基本關(guān)系,設(shè)置項目的最小和最大尺寸,以及對項目的位置設(shè)置限制。使用基礎(chǔ)版面模型的擴展,來提供對版面的精確控制。基礎(chǔ)版面模型的優(yōu)點是1.版面設(shè)計者易于理解諸如剛性對象和可移動對象之類的物理模擬;2.易于通過圖形用戶界面進行表示和操作;3.軟件表示簡單,可以通過明確定義的操作集合來進行操作。
如圖22所示,在基礎(chǔ)版面模型中,版面包括一個或多個被稱為盒子的矩形版面項2201;由水平邊緣2215和垂直邊緣2216定義的、用于放置盒子的版面矩形;以及零條或多條規(guī)則2207、2211。
通常,將要在其中布置項目的矩形空間,表示文檔中一個頁面或一個頁面一部分的可印刷區(qū)域,其中每個項目表示一個圖形圖像或一個文本塊,盡管在基礎(chǔ)版面模型的某些應(yīng)用中該版面矩形可能并不存在。
版面中每個盒子的大小和位置,由它的外接矩形的四條邊緣的位置來定義??梢杂冒婷鎲挝灰?guī)定大小和位置,其中版面單位通常與諸如毫米之類的絕對度量單位有關(guān)。規(guī)則2207、2209、2211和2213對項目或版面矩形的各條邊緣之間的關(guān)系進行定義。規(guī)則可以定義同一個項目的相對邊緣之間的關(guān)系,諸如規(guī)則2211、2213;可以定義某個項目的邊緣與另一個項目的邊緣之間的關(guān)系,諸如規(guī)則2209;可以定義某個項目的邊緣與版面矩形的一條邊緣之間的關(guān)系,諸如規(guī)則2207;或者,可以定義版面矩形的相對邊緣之間的關(guān)系,諸如規(guī)則2217。在這個說明書中,邊緣是指項目或?qū)ο蟮淖筮吘?、右邊緣、頂邊緣或底邊緣?br>
在基礎(chǔ)版面模型中,將每個盒子的邊緣與稱為“對齊標記”或僅稱為“標記”的抽象版面項相關(guān)聯(lián)。還把版面區(qū)域的邊緣與標記相關(guān)聯(lián)。因此,基礎(chǔ)版面模型支持兩種類型的版面項盒子和標記。
術(shù)語“對齊標記”是對印刷機所使用的對準標記的抽象和概括,以使將要印刷的多幅圖像彼此頂端對齊。有兩種類型的對齊標記水平標記和垂直標記。水平標記表示頁面或版面上的垂直位置,并且可以看作是具有不確定長度或無限長的水平線。垂直標記表示頁面上的水平位置,并且在概念上是具有不確定長度或無限長的垂直線。
通常并不希望對對齊標記進行印刷——它們僅僅用于對盒子之間的定位和關(guān)系進行定義。用戶界面可采用多種方式顯示對齊標記(或者根本不顯示)。
將版面與二維坐標系相關(guān)聯(lián)。版面引擎105的任務(wù)是,確定所選坐標系中每個標記的位置或坐標。垂直標記具有水平坐標,而水平標記具有垂直坐標。更佳地,通過向一個指定的垂直標記和一個指定的水平標記分配坐標,對坐標系進行規(guī)定。通過相對于所指定標記的偏移值,確定所有其它標記的坐標。如果版面是具有固定尺寸的,則用于規(guī)定坐標系的標記通常是版面矩形的兩條邊緣。
盒子是通常與某些文本或圖形相關(guān)聯(lián)的矩形區(qū)域。在計算版面時,可利用盒子對容器進行表示。每個盒子與四個標記相關(guān)聯(lián),其中四個標記對盒子的邊緣進行定義。盒子實質(zhì)上是四個標記之間的關(guān)系。在基礎(chǔ)版面模型的擴展中,可以將附加標記與盒子相關(guān)聯(lián)。在基礎(chǔ)版面模型中,完全用與盒子的邊緣相關(guān)聯(lián)的標記來,對用于確定盒子的位置和尺寸的版面規(guī)則進行描述,但是在模型擴展中,將附加規(guī)則與盒子相關(guān)聯(lián)。
盒子和標記還用于對與文檔中出現(xiàn)的對象的形狀和位置不直接相對應(yīng)的形狀和位置進行表示。例如,也用盒子表示項目的理想尺寸,該尺寸可能與版面引擎105所計算的尺寸不同??梢允褂脴擞泚矶x有關(guān)其它項目放置的限制,例如,可以將標記放置在表示頁邊距的位置上,并且可以添加規(guī)則以確保版面引擎105不會把項目放置到頁邊距之外。
在基礎(chǔ)模型中,每條規(guī)則表示垂直偏移2209或者水平偏移2213,并且每條規(guī)則具有規(guī)定的大小2207,或者具有未知的非負大小2213(如虛線所示)。固定偏移規(guī)則對版面中的兩個標記之間的垂直或水平偏移的大小和方向進行了規(guī)定。未知偏移約束只規(guī)定兩個標記之間偏移的方向。例如,偏移2211指示盒子2219的邊緣2221必須總在同一盒子的邊緣2223之上。未知偏移約束的大小,表示需要由版面方法計算的值。
因此,在基礎(chǔ)模型中,有兩種類型的規(guī)則固定偏移規(guī)則和非負偏移規(guī)則。每種類型的偏移規(guī)則定義了與一對標記的相對位置相關(guān)的約束。
固定偏移規(guī)則指示第一標記位置和第二標記位置之間的偏移必須具有規(guī)定的值。例如,給定標記m和n,固定偏移規(guī)則是由fixed(m,n,d)所表示的約束,其由以下等式定義pos(n)-pos(m)=d,其中d為非負數(shù)。將支柱412表示為版面引擎內(nèi)的固定偏移規(guī)則。而且,如果容器具有固定寬度,則通過添加與表示該容器的左邊緣和右邊緣的標記相關(guān)的固定偏移約束,將其指示給版面引擎。類似地,如果容器具有固定高度,則通過在表示該容器的頂邊緣和底邊緣的標記之間的固定偏移約束,在版面引擎中進行表示。
距離d表示從一個標記到另一個標記的偏移,并且pos(u)表示標記u的位置。水平標記的位置是從版面坐標系的原點到該標記的垂直距離。垂直標記的位置是從版面坐標系的原點到該標記的水平距離??梢允褂萌魏伪阌诙x版面的坐標系。在固定偏移規(guī)則中,兩個標記必須是相同方向的。在這一點上,標記必須同為水平標記或者同為垂直標記。
注意到,上下文中的術(shù)語“固定的”,是指作為版面計算方法的輸入的值,并且版面引擎105不能對其進行改變。
非負偏移規(guī)則是這樣一個約束,該約束規(guī)定了兩個標記之間的偏移是非負的。標記m和標記n之間的非負規(guī)則,是由non-negative(m,n)所表示的約束,并且其由以下不等式定義pos(n)≥pos(m)。在非負偏移規(guī)則中,兩個標記必須是相同方向的。例如,標記必須同為水平標記或者同為垂直標記。
在基礎(chǔ)版面模型中,水平規(guī)則獨立于垂直約束,因此可以將計算版面的問題分成兩個獨立問題。圖23僅僅表示與圖22所示的版面相對應(yīng)的垂直偏移。在該實現(xiàn)方式中,用邏輯單位對距離進行規(guī)定。在圖23中,固定偏移規(guī)則已經(jīng)標記了以邏輯單位表示的偏移大小。在這種情況下,為了簡單起見假定每個邏輯單位相當(dāng)于1mm。邏輯單位可以是任何對于該應(yīng)用來說方便的尺寸,但是通常一個邏輯單位會小于最小可獨立尋址的印刷點。可采用如圖24所示的有向圖2400表示如圖23所示的垂直偏移規(guī)則。在圖24中,每個頂點2401表示一個水平標記,并且每個箭頭2403表示一條規(guī)則。用實線表示固定偏移規(guī)則(例如2402),并且用虛線表示非負偏移規(guī)則(例如2405)。在圖24中,例如,在根節(jié)點2404和終端節(jié)點2406之間的箭頭2402,表示圖23中的固定偏移規(guī)則2217,并且該規(guī)則定義了圖22中的版面矩形的高度。另外,非負偏移規(guī)則在由固定偏移規(guī)則所建立的邊界之內(nèi)是可變的。例如,增加h1的值,將使得h2和h3的值相應(yīng)減小,其二者均依賴于h1的終端節(jié)點2408。
通常,版面區(qū)域是具有固定大小的。通過將與具有固定偏移規(guī)則的版面區(qū)域的相對邊緣相關(guān)聯(lián)的標記進行連接,對其進行規(guī)定。在某些應(yīng)用程序中,還使版面引擎105根據(jù)版面區(qū)域的邊緣和版面內(nèi)的項目之間的關(guān)系,計算版面矩形的大小。通常,向該版面中添加規(guī)則,以便確保表示可印刷項目的盒子被限制在版面區(qū)域內(nèi),但是在某些實現(xiàn)方式中,這可能并不適用,并且可能不需要版面區(qū)域矩形。在基礎(chǔ)版面模型的某些應(yīng)用中,可能缺少版面矩形。
16.2基礎(chǔ)版面模型的替換表示在另一種實現(xiàn)方式中,以與上述方法不同但等效的方式,對基礎(chǔ)版面模型進行表示。這里,僅僅使用一種類型的規(guī)則、即最小偏移規(guī)則對基礎(chǔ)版面模型進行表示。
最小偏移規(guī)則規(guī)定了在第一標記和第二標記之間的最小允許偏移。在標記m和標記n之間的最小偏移規(guī)則,是由min(m,n,d)所表示的約束,并且其由以下不等式定義pos(n)-pos(m)≥d,其中d是一個表示最小允許偏移的數(shù)。在該表示中,數(shù)d可以是正數(shù)、負數(shù)或零,并且與最小偏移規(guī)則相關(guān)的兩個標記必須具有相同方向(即,同為水平標記或者同為垂直標記)。
在另一種等效實現(xiàn)方式中,可以使用最大偏移規(guī)則代替最小偏移規(guī)則。由max(m,n,d)所表示的最大偏移規(guī)則,由以下不等式定義pos(n)-pos(m)≤d,其中d是一個表示最大允許偏移的數(shù)。
為了證明只需要以上兩類規(guī)則中的一類規(guī)則,注意到,由于以下恒等式存在,所以任意最大偏移規(guī)則可以由等效的最小偏移規(guī)則所代替max(m,n,d)≡min(n,m,-d)。
為了證明基礎(chǔ)版面模型的替換表示與先前描述的表示等效,注意到,如以下恒等式所示的那樣,非負偏移規(guī)則是最小偏移規(guī)則的特例nonnegative(m,n)≡min(m,n,0),并且,正如以下恒等式所示,任意固定偏移規(guī)則等效于兩個最小偏移規(guī)則fixed(m,n,d)≡min(m,n,d)和max(m,n,d)≡min(m,n,d)和min(n,m,-d)。
相反,任意最小偏移規(guī)則可以使用額外標記t、固定偏移規(guī)則以及非負偏移來進行表示,如以下恒等式所示min(m,n,d)≡fixed(m,t,d)和nonnegative(t,n),如果d>0≡fixed(t,m,-d)和nonnegative(n,t),如果d<0,其中t為一個額外標記,用于標記相對于m的n的允許位置的限制。在d=0的特殊情況下,可以用m替代t,并且固定偏移規(guī)則是冗余的。
因此,存在許多允許對最小和最大偏移、固定偏移和非負偏移進行規(guī)定的等效表示。最小偏移規(guī)則可以用于表示所有這些類型的規(guī)則,因為該規(guī)則簡化了用于表示版面的數(shù)據(jù)結(jié)構(gòu)、以及用于處理該數(shù)據(jù)結(jié)構(gòu)的軟件。
更佳地,使用有向圖表示符合基礎(chǔ)版面模型的版面,其中圖的每個頂點對應(yīng)于一個標記,并且通過一個數(shù)字標記圖的每條邊緣,其中數(shù)字表示從由該邊緣的源頂點表示的標記到由該邊緣的目的頂點表示的標記之間的最小允許偏移。因此,對于任何給定版面,可生成一個圖形表示,其中由圖中的一個相應(yīng)頂點表示該版面中的每個標記,并且由一條相應(yīng)的有向邊緣表示每個最小偏移規(guī)則。在基礎(chǔ)版面模型中,可以在其表示中忽略盒子,因為每個盒子完全由與其邊緣相對應(yīng)的標記來進行描述。
有多種方法在計算機的存儲器中表示一個圖形,并且可以使用任何合適的表示。通常,為了進行顯示和編輯,采用除圖形表示之外的形式對包括項目和約束的版面進行存儲,是方便的,因此在交互式應(yīng)用程序中,通常不總是采用圖形的形式來對版面進行直接表示。圖形表示可以包括根據(jù)需要用數(shù)字或其它信息對圖形的邊緣和頂點進行標記的方法。
圖33A-33C顯示了如何可以只使用固定偏移規(guī)則和非負偏移規(guī)則以及只使用最小偏移規(guī)則來表示容器的最小和最大高度。在圖33A中,顯示了一個容器3300,它具有40個單位的最小允許高度、和100個單位的最大高度。通過一個其頂邊緣與標記3301相關(guān)聯(lián)并且其底邊緣與標記3303相關(guān)聯(lián)的盒子,在版面引擎105中對容器3300進行表示。圖33B中的有向圖具有四個頂點3305、3307、3309和3311。頂點3305表示標記3301,頂點3307表示標記3303。其它兩個頂點3309和3311表示額外標記,該額外標記對標記3303相對于標記3301的允許移動范圍進行了定義。使用由該圖中的實線邊緣3317所表示的固定偏移規(guī)則,相對于標記3301對以上標記的位置進行固定。使用由該圖中的虛線邊緣3319所表示的兩個非負偏移規(guī)則,以便將標記3303的位置限制在兩個額外標記3311和3309之間。圖33C中的第二有向圖表示只使用兩個頂點3313和3315的相同約束,其中頂點3313表示標記3301,并且頂點3315表示標記3303。使用兩條邊緣3319來表示最小偏移規(guī)則。從頂點3313到3315的邊緣,表示最小值為40的最小偏移規(guī)則。從頂點3315到3313的邊緣,表示具有最小偏移-100的最小偏移規(guī)則。這等效于最大值為100的從3313到3315的最大偏移規(guī)則。
16.3形狀規(guī)則在可變數(shù)據(jù)印刷應(yīng)用程序中,能夠定義盒子的寬度和高度之間的關(guān)系,是方便的。但在基礎(chǔ)版面模型中無法實現(xiàn)。
例如,一個盒子可以對應(yīng)于將要被插入到版面中的一幅圖像,并且可能需要對圖像的大小進行調(diào)整,以便與可用空間相適應(yīng)。這種情況下,最好是能夠?qū)凶拥目v橫比進行規(guī)定,并且使版面引擎105根據(jù)該版面中其它項目的尺寸確定盒子的最佳大小。另一個例子是,盒子可以對應(yīng)于未規(guī)定其高度和寬度的文本塊的外接框,因此需要由版面引擎105對其高度和寬度進行確定。
可以擴展基礎(chǔ)版面模型,以便允許稱為形狀規(guī)則的附加規(guī)則,該規(guī)則定義盒子的寬度和高度之間的關(guān)系,并且包括兩種類型的形狀規(guī)則幅形(aspect)規(guī)則和文本規(guī)則。
幅形規(guī)則規(guī)定盒子必須具有特定的縱橫比。文本規(guī)則規(guī)定盒子的外形應(yīng)該是特定文本框的外接框。通過專用模塊處理文本的版面。稍后說明文本版面的例子。
以下詳細描述形狀規(guī)則的行為,因為其準確的行為取決于計算版面所用的方法。取決于為計算項目的位置和尺寸所選的方法,在不同的實現(xiàn)方式中,上述規(guī)則可以具有不同的行為。
16.4相同偏移規(guī)則在規(guī)定版面時便于擁有的另一類約束,是能夠規(guī)定兩個距離相等的約束。利用由標記m、n、s和t的equal(m,n,s,t)所表示的相同偏移規(guī)則,來對該約束進行規(guī)定,其中m和n具有相同方向,s和t具有相同方向。通過以下等式對相同偏移規(guī)則equal(m,n,s,t)進行定義offset(m,n)=offset(s,t),其中offset(a,b)表示從第一標記a到第二標記b的偏移,從而offset(a,b)=pos(b)-pos(a)。
通過添加相同偏移規(guī)則,可以擴展基礎(chǔ)版面模型。在版面模型中允許相同偏移規(guī)則,能夠非常容易地對過約束的版面進行創(chuàng)建。
并非所有實現(xiàn)方式都支持相同偏移規(guī)則,因為相同偏移規(guī)則需要更通用的版面方法,該方法不如版面引擎105中首選方法有效。更佳地,版面引擎105包括下面定義的最小化距離規(guī)則,取代相同偏移規(guī)則作為用于使各個偏移相等的備選方法。
16.5涉及盒子的中心的規(guī)則在基礎(chǔ)版面模型中,只有盒子的邊緣參與版面規(guī)則。還希望能夠?qū)凶拥闹行闹g的關(guān)系進行定義。在基礎(chǔ)版面模型的擴展中,每個盒子總是與兩個附加標記相關(guān)聯(lián)。這些標記包括通過盒子的中心的垂直標記和水平標記。
在允許相同偏移規(guī)則的模型中,通過使用相同偏移規(guī)則,可以把標記和每個盒子的中心相關(guān)聯(lián),因此并不需要向模型中增加規(guī)則來支持涉及盒子中心的規(guī)則。
16.6固定中心規(guī)則作為涉及盒子中心的規(guī)則的特殊情況,在另一種實現(xiàn)方式中,存在對基礎(chǔ)版面模型的擴展,該擴展允許相對于頁面、或者相對于頁面或版面區(qū)域的邊緣,對每個盒子的中心的垂直或水平位置進行固定。這個特殊情況避免了對相同偏移規(guī)則的需求,因此可以使用更簡單的計算版面的方法。
可以把固定中心規(guī)則認為是與盒子的相對邊緣相關(guān)聯(lián)的一對標記之間的關(guān)系,因此不需要向版面中添加通過盒子中心的附加標記。
16.7最大化偏移和最小化偏移規(guī)則到目前為止所描述的基礎(chǔ)模型版面規(guī)則和附加規(guī)則,對于規(guī)定準確約束、諸如項目的精確尺寸和項目之間的間隔,以及對于規(guī)定項目的位置和尺寸變化性限制來說,是有用的。借助上述規(guī)則,能夠容易地實現(xiàn)對過約束或欠約束的版面進行定義。為了更精確地控制版面,一種好的策略是,使用基礎(chǔ)模型規(guī)則以及諸如相同偏移規(guī)則和固定中心規(guī)則之類的其它精確規(guī)則,來定義欠約束的版面,并且添加附加的、更靈活的規(guī)則,用于對項目的尺寸和位置的首選項進行規(guī)定。為此,可使用兩種附加類型的規(guī)則最小化和最大化規(guī)則。
到目前為止所定義的規(guī)則對版面方法必須遵守的約束進行定義。與上面定義的規(guī)則不同,最小化和最大化規(guī)則為版面方法定義目標函數(shù)。
由minimizeoffset(m,n)所表示的最小化偏移規(guī)則,向版面引擎105指示從標記m到標記n的偏移應(yīng)該盡可能小(即,為負)。以下詳細定義該規(guī)則的行為,因為其取決于計算版面的方法。
由maximizeoffset(m,n)所表示的最大化偏移規(guī)則,向版面引擎105指示從標記m到標記n的偏移應(yīng)該盡可能大(即,為正)。以下詳細定義該規(guī)則的行為,因為其取決于計算版面的方法。
最小化偏移和最大化偏移規(guī)則對于包括在線性目標函數(shù)中來說,是有用的,并且由此可以被包括在適合使用單形法進行計算的版面模型中。如果使用線性目標函數(shù),則每個最小化規(guī)則或最大化規(guī)則貢獻一個線性項給目標函數(shù)。在這種情況下,這兩類規(guī)則中只有一類規(guī)則是必需的,因為規(guī)則minimizeoffset(m,n)等效于maximizeoffset(n,m)。因此,包括這些類規(guī)則的版面模型的數(shù)據(jù)表示只需要對其中一類規(guī)則進行支持。例如,數(shù)據(jù)結(jié)構(gòu)可能只支持最小化偏移規(guī)則,并且使用等效的最小化偏移規(guī)則對每個最大化偏移規(guī)則進行表示。
16.8最小化距離規(guī)則最大化偏移和最小化偏移規(guī)則的使用,可能產(chǎn)生其中兩個標記之間的理想間隔為無窮大的版面,因此上述規(guī)則并不總是產(chǎn)生明確定義的版面。為了避免此問題,可以用其它類型的規(guī)則代替最大化偏移規(guī)則和最小化偏移規(guī)則。可選地,利用由minimizedist(m,n)所表示的稱為最小化距離規(guī)則的另一類規(guī)則,來對距離進行規(guī)定。例如,兩個標記m和n之間的偏移的絕對值應(yīng)盡可能小。最小化距離規(guī)則僅僅應(yīng)用于具有相同方向的標記之間。在具體實現(xiàn)方式中,使用下文描述的稱為首選偏移規(guī)則的另一類規(guī)則代替最小化距離規(guī)則。
注意到,通過使用以下恒等式,可以使用固定偏移規(guī)則、最小化和最大化偏移規(guī)則以及非負偏移規(guī)則對最小化距離規(guī)則進行近似minimizedist(m,n)≡minimizeoffset(m,t)和minimizeoffset(n,t)和nonnegative(m,t)和nonnegative(n,t),其中t是添加到版面中的額外標記,并且在任何其它規(guī)則中都不涉及。上述近似可能是不精確的,并且它取決于所使用的精確版面計算方法。特別地,版面方法計算的項目的精確布置取決于所選的目標函數(shù)。
還會注意到,通過使用以下恒等式,還可使用最小化距離規(guī)則對最小化偏移規(guī)則進行近似minimizeoffset(m,n)≡minimizedist(t,m)和fixed(t,n,d);其中t是添加到版面中的額外標記,并且d是一個大的正數(shù),表示比m和n之間的最大期望距離更大的距離。上述近似是不精確的,并且項目的精確布置取決于版面計算方法的精確實現(xiàn),但是可以證明,通過向允許固定偏移和非負偏移規(guī)則的任何版面模型中僅僅添加最小化距離規(guī)則,能夠提供與最大化和最小化偏移規(guī)則類似的功能。
在某些實現(xiàn)方式中,最小化距離規(guī)則還可以包括表示規(guī)則強度的額外值??梢詫⒋艘?guī)則表示為minimizeoffset(m,n,s),其中m和n是與該規(guī)則相關(guān)的標記,s是表示規(guī)則強度的正數(shù)。在這種情況下,當(dāng)一條以上的最小化距離規(guī)則影響標記的位置時,較強的規(guī)則與較弱的規(guī)則相比對位置的影響更大。
16.9首選偏移規(guī)則在具體實現(xiàn)方式中,使用稱為“首選偏移規(guī)則”的另一類規(guī)則,代替使用最小化距離規(guī)則。由preferred(m,n,d)所表示的首選偏移規(guī)則,規(guī)定從標記m到標記n的首選偏移為d。通過以下恒等式,可以用最小化距離規(guī)則表示首選規(guī)則preferred(m,n,d)≡fixed(m,t,d)和minimizedist(t,n),其中t是添加到版面中的額外標記,以便表示相對于m的位置來說n的首選位置。
相反,通過以下恒等式,可以利用首選偏移規(guī)則表示最小化距離規(guī)則minimizedist(m,n)≡preferred(m,n,0)。
因此,向基礎(chǔ)版面模型的擴展添加最小化距離規(guī)則或者首選偏移規(guī)則,將生成等效的模型。使用首選偏移規(guī)則代替最小化距離規(guī)則,因為對于通常規(guī)定版面關(guān)系來說,這種表示通常需要較少的標記和較少的規(guī)則。
根據(jù)需要,首選偏移規(guī)則也可以包括表示規(guī)則強度的額外值。可以將此規(guī)則表示為preferred(m,n,d,s),其中m和n是與規(guī)則相關(guān)的標記,d為表示從m到n的首選偏移的數(shù),并且s是表示規(guī)則強度的正數(shù)。在這種情況下,當(dāng)一條以上的首選偏移規(guī)則影響一個標記的位置時,較強的規(guī)則與較弱的規(guī)則相比對該位置的影響更大。通過以下恒等式,帶有強度的首選偏移規(guī)則等效于帶有強度的最小化距離規(guī)則preferred(m,n,d,s)≡fixed(m,t,d)和minimizedist(t,n,s),其中t為添加到版面中的額外標記,用于表示相對于m的位置來說n的首選位置,并且minimizedist(m,n,s)≡preferred(m,n,0,s)。
16.10首選版面模型一個理想的版面模型包括為添加以下類型的上述規(guī)則而擴展的基礎(chǔ)版面模型1.用于水平或垂直地固定盒子的中心的規(guī)則;2.用于支持包括文本和圖像的盒子的形狀規(guī)則;以及3.首選偏移規(guī)則。
該版面模型是足夠靈活的,以支持通常所需要的全部版面特征,同時也是足夠簡單的,以方便用戶理解,以具有一個簡單的數(shù)據(jù)表示,并且它還能夠支持對版面項的位置和尺寸進行計算的快速方法。
16.11示例版面圖37A顯示了通過使用盒子、標記和規(guī)則,在版面引擎105的一種實現(xiàn)方式中如何對圖4所示的示例版面進行表示。通過標記3701、3703、3705和3707對版面區(qū)域的邊界進行表示。版面區(qū)域通常表示模板中一個頁面的一部分。通過固定偏移規(guī)則3709對版面區(qū)域的高度進行表示。通過固定偏移規(guī)則3711對版面區(qū)域的寬度進行表示。利用圖37A所示的兩個盒子3702和3704,在版面引擎105中對圖4所示的兩個容器進行表示。將標記3701和3705指定作為原點標記。
由標記3713、3715、3717和3719對第一個盒子3702的四條邊緣進行表示。盒子3702的左上角在頁面上有固定位置,其在版面區(qū)域的左邊緣的右側(cè)150個邏輯單位處,并且在版面區(qū)域的頂邊之下200個單位處。由兩條規(guī)則3735和3737對其進行表示。規(guī)則3735確保了盒子3702的左邊緣在版面區(qū)域的左邊緣的右側(cè)150個單位處,并且規(guī)則3737確保了盒子3702的頂邊緣在版面區(qū)域的頂邊之下的200個單位處。盒子3743的高度和寬度是不固定的,并因此由版面引擎105對其進行計算。最小偏移規(guī)則3744指示該盒子的最小寬度為120個邏輯單位。規(guī)則3742指示該盒子的最小高度為100個邏輯單位。首選偏移規(guī)則3741向版面引擎105指示盒子3702的首選高度為550個邏輯單位。另一個首選偏移規(guī)則3743向版面引擎105指示盒子3702的首選寬度也是550個邏輯單位。盒子的首選寬度和高度是根據(jù)該盒子所表示的容器的內(nèi)容來確定的。最小偏移規(guī)則3739向版面引擎105告知盒子3702的底邊緣不能在由標記3703所表示的版面區(qū)域底邊的下面。
通過標記3721、3723、3725和3727對第二個盒子3704的四條邊緣進行表示。將盒子3704的頂邊緣和底邊緣的位置相對于版面區(qū)域進行固定。通過標記3725表示頂邊緣的位置。通過固定偏移規(guī)則3731將頂邊緣固定在版面區(qū)域頂邊以下的200個邏輯單位處。同樣,通過規(guī)則3733將盒子的底邊緣固定在版面區(qū)域頂邊以下的750個邏輯單位處。
利用固定偏移規(guī)則3729將盒子3704的寬度固定為550個邏輯單位,但是盒子的左邊緣和右邊緣的位置是不固定的,并且必須由版面引擎105對其進行計算。最小偏移規(guī)則3747向版面引擎指示由標記3723所表示的盒子的右邊緣不能超過由標記3707所表示的版面區(qū)域的右邊緣。
附加的最小偏移規(guī)則3748和3749確??勺冞吘壉A粼诎婷鎱^(qū)域內(nèi)。在本例中,這些規(guī)則是冗余的,并且在某些實現(xiàn)方式中,可以在計算版面之前刪除冗余規(guī)則??梢酝ㄟ^下列方式檢測冗余規(guī)則臨時刪除該規(guī)則,并且使用推動操作來確定對受影響的標記進行推動是否違反該規(guī)則。如果使用推動操作不違反該規(guī)則,則該規(guī)則是冗余的。
通過固定偏移規(guī)則3745對支柱412進行表示。該規(guī)則向版面引擎105指示兩個盒子3702和3704之間的距離表示是200個邏輯單位。
圖37B顯示了表示如圖37A所示的水平偏移規(guī)則的圖??梢允褂昧硪粋€類似的圖(未示出)對垂直偏移規(guī)則進行表示。頂點3751表示與版面區(qū)域的左邊緣相對應(yīng)的標記3705。頂點3761表示與版面區(qū)域的右邊緣相對應(yīng)的標記3707。頂點3753表示與盒子3702的左邊緣相對應(yīng)的標記3713。頂點3755表示與盒子3702的右邊緣相對應(yīng)的標記3715。頂點3757表示與盒子3704的左邊緣相對應(yīng)的標記3721。頂點3759表示與盒子3704的右邊緣相對應(yīng)的標記3723。
通過由圖的邊緣3767和3769表示的一對最小偏移規(guī)則,對固定偏移規(guī)則3735進行表示。通過圖的邊緣3771對最小偏移規(guī)則3744進行表示,并且通過圖的邊緣3773對最大偏移規(guī)則3746進行表示。通過圖的邊緣3775和3777對固定偏移規(guī)則3745進行表示。通過圖的邊緣3779和3781對固定偏移規(guī)則3729進行表示。通過圖的邊緣3783對最小偏移規(guī)則3747進行表示。
圖37C表示用于存儲入37B所示的圖的存儲器結(jié)構(gòu)。通過一個數(shù)據(jù)結(jié)構(gòu)、例如3791對圖的各頂點進行表示,該數(shù)據(jù)結(jié)構(gòu)至少包括該頂點所表示的標記的位置、以及一個表示離開該頂點的所有邊緣的鄰接列表。鄰接列表由記錄組成,每條記錄表示一條邊,并且包含至少一個指向目的頂點的指針(諸如指針3793)、以及從源頂點到目的頂點的最小允許偏移(例如3794)。由于鄰接列表的大小是變化的,所以用鏈表對其進行存儲。圖37C沒有明確地顯示相鄰記錄之間的鏈接。
在如圖37D所示的單獨的圖中對首選偏移進行存儲。通過該圖中的一條邊緣,諸如邊緣3795,對各首選偏移進行表示。用于存儲首選偏移圖的數(shù)據(jù)結(jié)構(gòu),與用于存儲最小偏移規(guī)則的數(shù)據(jù)結(jié)構(gòu)類似。通過指針(未明確示出)鏈接兩個圖中的相應(yīng)頂點。在某些實現(xiàn)方式中,向每個圖添加額外邊緣,以確保每條邊緣都有一條逆向邊緣。這使得有可能高效地沿正方向或反方向遍歷該圖。
17.版面創(chuàng)建和編輯的詳細描述17.1創(chuàng)建和編輯版面的基本操作創(chuàng)建和編輯版面的最簡單方法是允許對各類的項目進行添加、刪除,以及允許對由所支持的版面模型允許的各類規(guī)則進行添加、刪除。在該方法中,當(dāng)通過對涉及正在刪除的項目的任何規(guī)則進行自動刪除,而從版面中刪除一個項目時,只需要最小一致性檢查,就能防止版面數(shù)據(jù)結(jié)構(gòu)變得矛盾。在該方法中,不保證能夠確定滿足所有規(guī)則的項目的位置和尺度。
避免包含冗余信息的版面也是有用的,因為這能降低版面的復(fù)雜度,從而使它更容易而便于用戶理解,并且刪除冗余信息的過程可以向用戶提供反饋,以便使版面對于用戶來說更清楚。冗余信息還能夠增加表示版面的數(shù)據(jù)結(jié)構(gòu)的大小,并且通知減緩版面計算。
上述用于表示涉及來自于基礎(chǔ)版面模型中的規(guī)則的版面的有向圖結(jié)構(gòu)(圖24),自動地提供了用于禁用某些類型的冗余信息的方法。圖中不允許有一條以上具有相同源頂點和目的頂點的有向邊緣。這防止將多條最小偏移規(guī)則應(yīng)用于同一偏移。如果在同一對標記之間有一條以上的最小偏移規(guī)則(以相同的順序,即具有相同的第一標記和相同的第二標記),則其中一條規(guī)則是冗余的,因為只需要具有最小的負的最小偏移值規(guī)則。
更佳地,用于添加最小偏移規(guī)則的操作,自動地用新增規(guī)則代替已經(jīng)由相同源頂點和目的頂點表示的任何現(xiàn)有的最小偏移規(guī)則??蛇x地,如果就同一偏移已經(jīng)存在最小偏移值更小(即更小的負值)的最小偏移規(guī)則,則向現(xiàn)有版面中添加最小偏移規(guī)則的操作不進行任何處理。
在具體實現(xiàn)方式中,支持用于添加和刪除由基礎(chǔ)版面模型所支持的所有種類規(guī)則的操作。上述規(guī)則包括固定偏移規(guī)則、非負偏移規(guī)則和最小偏移規(guī)則,盡管它們都是用最小偏移規(guī)則進行表示的。例如,通過添加兩條相應(yīng)的最小偏移規(guī)則,實現(xiàn)添加固定偏移規(guī)則的操作。提供了用于對任意標記的位置進行固定或解除固定的操作。對標記的位置進行固定,等效于在該標記和同方向的原點標記之間添加一個固定偏移規(guī)則。還提供了用于獨立地固定任一盒子的中心的水平位置或垂直位置的操作。版面創(chuàng)建和編輯操作的多種組合也是可能的。
由于各種原因,可以對盒子中心的水平位置進行有效地固定。例如,如果盒子的兩條垂直邊緣的水平位置相對于版面區(qū)域是固定的,則盒子的水平位置以及寬度是完全確定的,因此,盒子中心的水平位置也是固定的。在這種情況下,用于使盒子中心的水平位置相對于版面固定的操作(即,添加固定中心規(guī)則),可以不進行任何處理,因為該規(guī)則是冗余的。這同樣適用于對盒子中心的垂直位置進行固定。
在一種實現(xiàn)方式中,也支持用于添加和刪除首選偏移規(guī)則和最小化距離規(guī)則的操作。在該實現(xiàn)方式中,利用等效的首選偏移規(guī)則對最小化距離規(guī)則進行表示。可以用有向圖表示首選偏移規(guī)則,在有向圖中,一個頂點表示一個標記,并且通過將對應(yīng)于與首選偏移規(guī)則相關(guān)的標記的頂點進行連接的一條邊緣,對每條首選偏移規(guī)則進行表示。由于有向圖只允許具有相同源頂點和目的頂點的邊緣,所以這看起來好像不適合表示具有一條以上與相同的兩個標記有關(guān)的首選偏移規(guī)則的版面,但其結(jié)果是,在其中首選偏移規(guī)則包括強度的具體實現(xiàn)方式中,借助于以下恒等式,可以用一條等效的首選偏移規(guī)則代替與相同的兩個標記有關(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í)行首選版面計算時,以上恒等式是有效的。
17.2基于示例的版面創(chuàng)建和編輯在創(chuàng)建和編輯版面時,希望避免創(chuàng)建過約束的版面,因為此類版面不利于生成文檔。避免沖突規(guī)則的處理可以向用戶提供反饋,以便增進用戶對正在創(chuàng)建的版面的理解。通過自動地防止錯誤,在創(chuàng)建版面期間避免矛盾的規(guī)則還能減少用戶的工作量。
在一些實現(xiàn)方式中,可以使用基于示例的編輯,以避免過約束的版面?;谑纠木庉嬍?,用于創(chuàng)建和編輯版面的操作總是在遵守所有約束的版面示例上進行操作。注意到,最小化偏移規(guī)則、最大化偏移規(guī)則、最小化距離規(guī)則和首選偏移規(guī)則不對版面強加約束,并且可以將其忽略以便避免過約束的版面。在可變數(shù)據(jù)印刷應(yīng)用程序中,可以通過允許用戶構(gòu)建顯示文檔預(yù)覽的示例版面,來完成以上處理。預(yù)覽可以是通過將實際數(shù)據(jù)和文檔模板進行組合而生成的一篇文檔的顯示,或者預(yù)覽可以包含只是與期望插入到文檔模板中的數(shù)據(jù)類似的樣本數(shù)據(jù),或者可選地,只有項目的大小和位置可能與將從該模板生成的實際文檔中的期望尺寸和位置近似相同。
在創(chuàng)建項目時,最好是規(guī)定新建項目的位置和尺寸,所以項目的示例位置總是已知的。為了對這些值進行存儲,通過相應(yīng)標記的位置,對用于表示版面的圖中的各個頂點進行標記。另外,只有規(guī)則與項目的當(dāng)前位置和尺寸不發(fā)生沖突時,才可以對規(guī)則進行添加。例如,只有所涉及標記的當(dāng)前位置服從最小偏移規(guī)則時,才可以向版面中添加最小偏移規(guī)則。類似地,在添加固定偏移規(guī)則時,偏移值必須和與該規(guī)則有關(guān)的標記之間的偏移相等。當(dāng)盒子中心的水平或垂直位置是固定的時,根據(jù)在執(zhí)行添加規(guī)則的操作時盒子中心的實際位置,盒子的位置和尺寸是已知的,并且水平或垂直中心是固定的。
用戶可以經(jīng)由界面103,指示可能需要向版面中添加規(guī)則的、對版面的改變。如果用戶所指示的示例版面不滿足將要添加的規(guī)則,則如果可能的話,就對該版面進行自動調(diào)整,以便使新增規(guī)則與該版面一致。例如,當(dāng)用戶通過對話框或者通過拖動盒子的一條邊緣而改變具有固定寬度的容器的寬度時,對項目的位置進行修改,并且還更新規(guī)則。這可能需要若干版面操作,諸如刪除某些現(xiàn)有規(guī)則、改變所涉及標記的位置、以及添加新規(guī)則。例如,當(dāng)改變標記的位置時,應(yīng)用程序121首先刪除如果對該標記的位置進行改變就會違反的任何規(guī)則,更新該標記的位置,并添加與該標記的新位置一致的新規(guī)則。
在編輯或創(chuàng)建版面時,有時必須在不違反任何約束的情況下,相對于另一個標記或者相對于版面原點,對一個標記或一個以上的標記進行移動。如果需要移動的標記受到許多約束的影響,則上述處理可能是一項非常復(fù)雜的操作。版面引擎105最好是提供一個稱為“推動”的操作,該操作在不違反任何約束的情況下,沿水平方向或垂直方向?qū)⒁唤M標記移動一個給定距離,并且在必要時還移動不在原始組的其它標記,以實現(xiàn)請求的結(jié)果。
17.3推動操作版面引擎105響應(yīng)于來自用戶界面103的輸入,實現(xiàn)推動操作,以便在不違反任何約束的情況下,沿水平方向或垂直方向?qū)⒁唤M標記移動一個給定距離,并且必要時還移動不在原始組中的其它標記,以實現(xiàn)請求的結(jié)果。
推動操作在一組具有相同方向的標記上起作用,并且可以利用稱為推動圖的圖對其進行描述。給定由標記和最小偏移規(guī)則的集合定義的示例版面、連同分配給該版面中的每個標記的位置,可以對相應(yīng)的推動圖進行定義。推動圖是一個有向圖,其中每個頂點相應(yīng)于版面中的一個標記,并且每一條邊緣相應(yīng)于一條最小偏移規(guī)則,其中實際偏移等于最小偏移規(guī)則允許的最小值。
版面的推動圖是一個有向圖,有向圖的邊緣指示哪些標記可以直接推動構(gòu)成該版面的其它標記。如果增加第一個標記的坐標值導(dǎo)致違反第一個和第二個標記之間的最小偏移規(guī)則,即當(dāng)它們之間的偏移已經(jīng)是允許的最小值時,第一個標記能夠直接推動第二個標記(沿正方向)。注意到,假定在創(chuàng)建或編輯版面時,已經(jīng)用等效的最小偏移規(guī)則代替了所有基礎(chǔ)模型規(guī)則。
當(dāng)沿正方向移動標記時(即,增加其坐標值時),還必須將與推動圖中可以從其相應(yīng)頂點到達的頂點相對應(yīng)的任何標記移動相同距離,以便避免違反任何最小偏移規(guī)則。
當(dāng)沿負方向移動標記時(即,減小其坐標值時),還必須將與反向推動圖中可以從其相應(yīng)頂點到達的任一標記沿相同方向移動相同距離,以便避免違反任何最小偏移規(guī)則。除了邊緣的方向相反之外,反向推動圖與推動圖相同。
可以利用對有向圖中的可到達頂點進行確定的各種方法來實現(xiàn)上述處理。
推動操作通過在不違反任何最小偏移規(guī)則的情況下移動多組標記來起作用。為了計算一組標記的允許移動范圍,為每個最小偏移規(guī)則定義一個稱為“松弛(slack)”的量。給定任一最小偏移規(guī)則min(m,n,d),則該規(guī)則的松弛由offset(m,n)-d給出。松弛是在違反該規(guī)則前標記m能夠移動的最大距離(沿正方向),并且也是在違反該規(guī)則前標記n能夠沿負方向移動的最大距離(即,坐標能夠減少的最大值)。如果在示例版面中不違反該規(guī)則,則最小偏移規(guī)則的松弛總是一個非負數(shù)。推動圖中的每條邊緣對應(yīng)于松弛為0的規(guī)則。
對于一組標記來說,允許的最大正向移動是所有最小偏移規(guī)則min(m,n,d)的松弛值中的最小值,其中m在該組中,而n不在該組中。這是在不移動該組外的任何其它標記并且不違反任何最小偏移規(guī)則的情況下,能夠沿正方向移動該標記的最大距離。能夠沿反方向移動一組標記的最大距離,可以類似地定義為min(n,m,d)形式的所有最小偏移規(guī)則的松弛值中的最小值,其中m在該組中,而n不在該組中。如果沒有對沿給定方向移動一組標記進行限制的最小偏移規(guī)則,則最大距離是無窮大的(即,對標記能夠移動多遠沒有限制)。
推動操作對將要移動的當(dāng)前一組標記以及一個推動距離進行跟蹤,其中推動距離是它必須將當(dāng)前組內(nèi)的標記推動的剩余距離。在執(zhí)行操作步驟時,對該組標記和推動距離進行更新。推動操作在一次或多次增加中對標記進行移動。根據(jù)由當(dāng)前組標記的最大允許移動值,對每次增加中的移動距離進行確定。在每次增加前,將可由該組中的標記推動的附加標記添加到該組中,因此在每次增加時對不同組的標記進行移動。
圖25表示在推動操作的第一實現(xiàn)方式中包含的方法2500。推動操作在步驟2501中開始,在該步驟中保存版面的原點。由于推動操作能夠改變定義坐標系的標記的位置,所以對該標記及其位置進行記錄,以便能夠稍后在步驟2513中恢復(fù)坐標系。在步驟2501之后,推動操作繼續(xù)到步驟2502,在該步驟中將剩余推動距離和0進行比較。如果剩余推動距離為0,則不執(zhí)行任何處理,并且操作進入步驟2513,在該步驟中對坐標系的原點進行恢復(fù)。這提高下列方式實現(xiàn)將版面中的所有標記移動一個適當(dāng)值,以便恢復(fù)在步驟2501中所保存的原點標記的原始位置。如果在步驟2502中所測試的推動距離不為0,則操作進入步驟2503,在該步驟中,根據(jù)版面中該標記的當(dāng)前位置更新推動圖。接著,操作進入步驟2505。在步驟2505中,通過添加可由當(dāng)前組中的任意標記沿推動方向推動的任意附加標記,對將要移動的這組標記進行更新。例如,將其相應(yīng)頂點在推動圖(或者如果移動距離是反方向的話,則為反向推動圖)中可以從與當(dāng)前組內(nèi)的任意標記相對應(yīng)的頂點到達的標記,添加到當(dāng)前標記組中。操作繼續(xù)到步驟2507,在該步驟中,計算當(dāng)前增加的距離。增加的距離是給定方向上當(dāng)前組標記的剩余推動距離和最大允許移動距離中的較小者。如果推動距離是正的,則該距離總是正的。在計算出移動距離之后,操作繼續(xù)到步驟2509,在該步驟中,將當(dāng)前組內(nèi)的所有標記移動一個距離,該距離是在步驟2507中所計算的距離。在步驟2509之后,操作進入步驟2511,在該步驟中,通過從中減去移動距離而計算出剩余推動距離。在步驟2511之后,操作返回到步驟2502,在該步驟中,對在步驟2511中所計算的距離進行測試,以便確定是否需要另一次迭代。
圖25所描述的推動操作方案從不會失敗,但是如果在操作期間移動了原點標記,則操作的行為是不直觀的。例如,如果將一組標記向右推動,而不是將該標記向右移動,則其它標記可能會向左移動。該行為是由恢復(fù)原點的步驟2513造成的。實際上,該行為有時是有用的。例如,為了使盒子的寬度增加10個距離單位,即使不能將右邊緣移動10個單位之多,將盒子的右邊緣向右推10個單位,如果可能的話,這也將會使盒子的寬度增加10個單位。在這一點上,如果右邊緣只能向右移動3個單位,但是左邊緣能夠向左移動7個單位,則推動操作將自動地向左移動左邊緣。副作用是其它項目可能也會移動。
有另一種形式的、不會移動原點標記的推動操作,也是有用的。通過圖26中的方法2600對其進行了說明。推動操作的此種實現(xiàn)方式除了省略了步驟2501和2513之外,按相同的方式進行,省略步驟2501和2513是因為它們是多余的,但是該實現(xiàn)方式包括了附加測試,即,在步驟2505和2507之間所插入的步驟2606。測試步驟2606確定當(dāng)前標記組是否包括原點標記。假如包括,則操作停止并且失敗,因為在不移動原點標記的情況下,不能將該標記推動請求的距離。
圖27A和27B、27C和27D、以及27E和27F共同給出了推動操作如何起作用的示例。這些圖表示由兩個容器構(gòu)成的版面,這兩個版面是最小寬度為15個單位的可變寬度容器2701、以及寬度為20個單位的固定寬度容器2704。通過具有與標記A和B關(guān)聯(lián)的左邊緣和右邊緣的盒子,對容器2701進行表示。通過具有與標記C和D關(guān)聯(lián)的左邊緣和右邊緣的盒子,對容器2704進行表示。這些圖還顯示了由標記E表示的頁面邊緣2707。
圖27A表示在開始推動操作前版面的初始狀態(tài)。項目2701具有由最小偏移規(guī)則2702所表示的15個單位的最小寬度。項目2704具有由固定偏移規(guī)則2705所表示的20個單位的固定寬度。通過由固定偏移規(guī)則2703所表示的長為6個版面單位的支柱對兩個項目2701和2704進行連接。在項目2704和由標記E表示的頁面邊緣2707之間,有一條附加的最小偏移規(guī)則2706,它具有15個單位的最小長度。該規(guī)則防止項目2704到頁面邊緣的距離小于15個單位。在調(diào)用推動操作之前,實際距離為20個單位。說明了用于將標記A向右推動15個單位的推動操作的步驟。圖27B還顯示了該版面的推動圖2709。圖2709顯示了表示標記B和C的頂點,由于固定偏移規(guī)則2703,這兩個頂點通過兩個方向上的邊緣相連接。表示B和C的頂點還由于固定偏移規(guī)則2705在兩個方向上相連接。
圖27C表示該循環(huán)的第一次迭代的結(jié)果。在第一次迭代中,在步驟2503中,對推動圖2709進行計算。在步驟2505中,從推動圖中確定標記A沒有對任何其它標記進行推動,并且可自己移動。在步驟2507中,確定在不違反最小偏移規(guī)則2702的情況下標記A可以移動的最大距離為3個單位。由于該距離小于所請求距離,所以在步驟2509中將標記A移動3個單位,從而產(chǎn)生如圖27B所示的版面。在步驟2511中所計算的剩余距離現(xiàn)在為12個單位。在該循環(huán)的第二次迭代中,在步驟2503中,對圖27D所示的推動圖2711進行計算。在該圖中,標記A現(xiàn)在推動標記B,因為規(guī)則2702的松弛現(xiàn)在為零,并且因此標記A也推動標記C和D。
圖27E表示該循環(huán)的第二次迭代的結(jié)果,在該迭代中確定標記B、C和D現(xiàn)在全由標記A進行推動,因此必須一起移動四個標記。在步驟2507中,確定標記A、B、C和D能夠移動的最大距離為5個單位,而不違反標記D和由標記E表示的頁面邊緣2707之間的第二最小偏移規(guī)則2706。剩余距離為12個單位,但是標記D只能移動5個單位,所以分別將標記A、B、C和D移動5個單位。在步驟2511中,計算剩余距離為7個單位。在該循環(huán)的第三次迭代中,在步驟2503中,計算圖27F所示的推動圖2713。在該圖中,標記A推動所有的標記。
在圖26所示的第二種形式的推動操作中,測試2606確定在將要移動的標記組中包含原點標記E,因此停止該操作。在圖25所示的第一種形式的推動操作中,循環(huán)的第三次迭代使得在步驟2509中將所有標記移動了剩余的7個單位,并且在隨后的步驟2511中,計算剩余距離為零,因此,步驟2502中的測試使得該過程轉(zhuǎn)到步驟2513,在該步驟中,通過將所有標記左移7個單位,對原點標記E的位置進行恢復(fù)。在該例中,兩種形式的推動操作產(chǎn)生了相同結(jié)果。在該例中,總共只能將標記A推動8個單位,而不是所請求的15個單位。
17.4帶有固定中心的推動操作在包含固定中心規(guī)則的版面模型中,需要對推動操作進行修改,以便知道固定中心。如果盒子中心的水平位置是固定的,則必須總是沿相反方向?qū)⒑凶拥淖筮吘壓陀疫吘壱苿酉嗤嚯x,此類標記是彼此“相對的”,或者是“相對”標記。類似地,如果盒子中心的垂直位置是固定的,則必須總是沿相反方向?qū)⒑凶拥捻斶吘壓偷走吘壱苿酉嗤嚯x。
為了修改推動操作以包含固定中心,用兩組標記代替將要推動的標記組。一組標記、即正向組是沿正方向推動的,另一組標記、即相對組是沿負方向推動的。在步驟2505中,向這兩組標記中每一組添加標記如下。如果一個標記與兩組之一中包含的標記相對,則向另一個組中添加相對標記、以及由該相對標記推動的任何標記。
圖32詳細表示了當(dāng)允許固定中心規(guī)則、諸如在步驟2505使用固定中心規(guī)則時,如何確定兩組標記的方法3200。在圖32中,假定要推動的初始組標記是垂直標記,并且正將其向右推動,同時假定坐標系正向右增加。類似地實現(xiàn)沿其它方向和朝向推動標記。在步驟3201中,將由當(dāng)前組標記所推動的所有標記添加到正向組中(忽略固定中心規(guī)則)。通過查找可從表示正向組標記的那組頂點到達的所有頂點,使用推動圖計算步驟3201。另外,如果任何兩個相對標記被包含在正向組中,則也將原點標記添加到該組中。在步驟3201之后,在步驟3203中,將與當(dāng)前組內(nèi)的任一標記相對的所有標記添加到相對標記組中。另外,如果相對組中包含兩個相對標記,則將原點標記添加到相對組中。將原點標記添加到任一組中,會有效地使推動操作在步驟2606的測試之后終止。在步驟3203之后,在步驟3205中,把由相對組內(nèi)的標記向左推動的所有標記添加到相對組中。由于正在沿負方向推動標記(即,正在減小它們的坐標值),所以除了使用反向推動圖之外,上述步驟是以與步驟3201中相同的方式來實現(xiàn)的。在步驟3205之后,在步驟3207中,將與相對組中的標記相對的所有標記添加到正向組中。步驟3207與步驟3203相反。在步驟3207之后,在步驟3209中,執(zhí)行一個測試,以檢查在步驟3207中是否將新標記添加到正向組中。假如添加了,則計算返回到步驟3201,以便重復(fù)步驟3201、3203、3205和3207,直到不再向兩個組的任一組中添加更多的新標記為止。
在步驟2507中,為這兩組獨立地計算移動距離,并且兩個距離中的較小者(即,其數(shù)量較小者)變?yōu)橐苿拥木嚯x。在步驟2509中,將標記沿相反方向移動相同距離。沿正方向移動一組中的標記,并且沿負方向移動另一組中的標記。
17.5帶有形狀規(guī)則的推動操作由于形狀規(guī)則涉及水平和垂直標記,所以為包含帶有形狀規(guī)則的版面模型而修改推動操作,可能是復(fù)雜的。問題是在推動標記時,由于形狀規(guī)則和其它規(guī)則的組合,在相同方向的標記之間可能產(chǎn)生復(fù)雜的相互作用。特別地,有可能造成沒有唯一解答的循環(huán)依賴。為避免此問題,對版面模型設(shè)置進行限制,只對這樣的盒子應(yīng)用形狀規(guī)則,在該盒子中在最小偏移規(guī)則中出現(xiàn)至多一個與一條垂直邊緣相對應(yīng)的標記、以及至多一個與一條水平邊緣相對應(yīng)的標記。即,形狀規(guī)則盒子的每一對相對邊緣中的至少一條邊緣,一定不受最小偏移規(guī)則的限制。該限制避免了由形狀規(guī)則引起的標記之間的復(fù)雜關(guān)系。利用該限制,可以對推動算法進行修改,從而每當(dāng)在步驟2509中對涉及形狀規(guī)則的盒子的邊緣進行移動時,就應(yīng)用形狀規(guī)則。通過移動盒子的自由邊緣,應(yīng)用形狀規(guī)則,其中自由邊緣是任何最小偏移規(guī)則中不涉及的邊緣。
17.6使用推動操作編輯文檔模板當(dāng)用戶正在對文檔模板進行編輯時,GUI301使用推動操作來修改示例版面。圖34表示GUI301如何允許用戶移動容器的固定邊緣的示例方法3400。在步驟3401中,用戶指示應(yīng)當(dāng)移動邊緣,例如通過用鼠標133和指針313對邊緣進行選擇并拖動來實現(xiàn)。在步驟3401之后,在步驟3402中,應(yīng)用程序103對與正在移動的邊緣相對應(yīng)的標記的位置解除固定。通常,通過添加固定偏移規(guī)則來固定邊緣的位置,其中固定偏移規(guī)則對表示該邊緣的標記和與該邊緣相同方向的原點標記之間的偏移進行固定。為了對該邊緣解除固定,刪除固定偏移規(guī)則,以便允許對該邊緣的位置進行改變。在步驟3402之后,在步驟3403中,向版面引擎105添加額外約束,以便限制該邊緣緣的允許位置。當(dāng)一條邊緣是固定的時,不能移動該邊緣,因此不需要對該邊緣有任何移動附加約束。然而,當(dāng)使用版面引擎105對邊緣的位置進行改變時,通常對該邊緣的移動范圍進行限制。例如,可以向版面引擎105告知不能將該邊緣移出版面區(qū)域的邊緣之外。另一個例子是,如果該邊緣是容器的左邊緣,則可以在表示版面矩形的左邊緣的標記和表示容器的該邊緣的標記之間,添加非負偏移約束。此外,還應(yīng)該強制保持容器的最小和最大寬度??梢允褂梦臋n模板,以獨立于版面引擎105對各個容器的最小和最大寬度、以及最小和最大高度進行存儲。當(dāng)用戶正在拖動容器的邊緣時,通過在表示容器的左邊緣和右邊緣的標記之間添加最小偏移約束和最大偏移約束,版面引擎105能夠強制保持容器的最小和最大寬度設(shè)置。
在步驟3403之后,在步驟3405中,應(yīng)用程序121調(diào)用推動操作以便對該邊緣進行移動。推動操作確保該邊緣的移動不會違反任何約束,并且將移動限定在版面規(guī)則所允許的范圍之內(nèi)。在推動操作之后,在步驟3407中,刪除在步驟3403中添加的約束,然后在步驟3411中,將該邊緣的位置固定在新位置。在步驟3411之后,應(yīng)用程序121使用版面引擎105,以在步驟3413中如圖28、29、30A和30B所述重新計算版面。步驟3413確保應(yīng)用所有的最小化距離規(guī)則和首選偏移規(guī)則。步驟3411是必需的,以便在執(zhí)行步驟3413時,防止版面引擎105把該邊緣移動到其它位置。最后,在步驟3413中已經(jīng)對版面進行重新計算后,應(yīng)用程序121更新顯示屏144,以便顯示改變邊緣位置的結(jié)果,并且該更新是完全的。當(dāng)用戶用鼠標拖動容器的邊緣時,重復(fù)圖34所示的步驟,以便在拖動時提供即時的反饋。
圖35表示如何利用推動操作來編輯文檔模板的另一種方法3500。方法3500在步驟3501中開始,在該步驟中,用戶請求對固定寬度容器的寬度進行改變。假定容器的位置是可變的,其左邊緣和右邊緣都是不固定的。通過利用鍵盤132在GUI301顯示的屬性對話框中輸入一個新的寬度,可以實現(xiàn)上述處理。在一種實現(xiàn)方式中,利用鼠標133的右鍵點擊該容器,將顯示一個與調(diào)色板311類似的上下文菜單。然后可以從上下文菜單中選擇“屬性…”圖標,以便對屬性對話框進行顯示。在步驟3501之后,在步驟3503中,計算容器的當(dāng)前寬度與新寬度的差值。在步驟3503之后,在步驟3505中,將容器的寬度從固定的改變?yōu)椴还潭ǖ?。通過在表示容器的左邊緣和右邊緣的標記之間添加固定偏移規(guī)則,使得容器的寬度變成固定的。同樣,步驟3505包括刪除固定偏移規(guī)則。在步驟3505之后,在步驟3507中,向版面中添加約束,以便對容器的邊緣的移動進行限制。在文檔模板中可以有各容器的最小和最大寬度。通過向版面中添加規(guī)則來強制保持上述限制。通過添加與表示該容器的左邊緣和右邊緣的標記相關(guān)的最小偏移規(guī)則,強制保持最小值,并且通過添加與表示該容器的左邊緣和右邊緣的標記相關(guān)的最大偏移規(guī)則,強制保持最大值。
在步驟3507之后是步驟3509。在步驟3509中,利用推動操作將與該容器的右邊緣相對應(yīng)的標記向右推動一個距離,該距離為寬度的差。如果寬度變化為負,表示用戶請求更小的寬度,則將該標記推動一個負距離——因此將其向左推動而不是向右推動。在下一步3511中,對剩余請求寬度變化進行計算。如果步驟3509中的推動操作成功地將右邊緣推動了所計算的距離,則容器的寬度將會已經(jīng)變成正確的尺寸了,并且剩余距離將為零。如果步驟3509中的推動操作不成功,則當(dāng)前寬度將不等于請求的寬度,并且剩余距離不為零。在步驟3511之后,在步驟3513中,利用推動操作將左邊緣向左推動一個距離,該距離是在步驟3511中所計算的剩余變化尺寸。如果剩余寬度變化為負,則將左邊緣向左推動一個負距離。即,將該邊緣向右推動。
如果在步驟3513中成功地將左邊緣推動了在步驟3511中所計算的距離,則當(dāng)前的寬度將等于所請求的寬度。否則,該寬度將盡可能地接近所請求的寬度。在步驟3513之后,在步驟3515中,刪除在步驟3507中所添加的約束,并且在步驟3517中,通過添加與表示該容器的左邊緣和右邊緣的標記相關(guān)的固定偏移約束,將寬度固定為新的寬度。在步驟3517之后,在步驟3519中對版面進行重新計算,并且在步驟3521中更新顯示屏,以反映最新計算的版面,從而完成對容器的寬度進行改變的操作。下文詳細解釋計算版面的過程。在圖35所示的示例中,假定使用圖26中所概括的第二種形式的推動操作。如果使用圖25中所概括的形式,則步驟3511和3513將是不必要的。
18.版面計算的詳細描述18.1用單形算法計算版面在一種實現(xiàn)方式中,允許的規(guī)則是基礎(chǔ)模型中的規(guī)則,連同相同偏移規(guī)則、幅形規(guī)則、最小偏移規(guī)則和最大偏移規(guī)則。這里,基礎(chǔ)模型規(guī)則等效于線性不等式約束,并且相同偏移規(guī)則是線性約束,并且最小偏移規(guī)則和最大偏移規(guī)則用于定義線性目標函數(shù)。在該模型中,規(guī)則定義了線性規(guī)劃,因此,可以使用單形算法或者求解線性規(guī)劃的任何其它方法,來執(zhí)行版面計算。
在該實現(xiàn)方式中,通過將與最小偏移規(guī)則相關(guān)的一對標記之間的每個偏移相加在一起,然后從這個總和中減去與最大偏移規(guī)則相關(guān)的一對標記之間的每個偏移,來計算目標函數(shù)。如果規(guī)則具有強度,則在相加或相減前首先用相應(yīng)規(guī)則的強度乘以偏移值。
可惜的是,在不對單形法進行重大修改的情況下,在使用單形法對其版面進行計算的模型中,不存在包括文本規(guī)則的已知方法。
18.2改進的單形法在另一種實現(xiàn)方式中,所允許的規(guī)則是基礎(chǔ)模型中的規(guī)則、以及相同偏移規(guī)則、幅形規(guī)則、最小距離規(guī)則和首選偏移規(guī)則。在該實現(xiàn)方式中,將最小偏移規(guī)則和相同偏移規(guī)則轉(zhuǎn)換為線性約束,并且最小距離規(guī)則和首選偏移規(guī)則用于定義二次目標函數(shù)。在該模型中,約束是線性恒等式或者為線性不等式,并且目標函數(shù)是一個二次函數(shù)??梢允褂枚蝺?yōu)化領(lǐng)域中普通技術(shù)人員已知的方法,對此類問題進行求解??梢允褂酶倪M的單形法來計算該模型中的版面。
正如單形法一樣,在不對二次規(guī)劃進行重大修改的情況下,沒有利用二次規(guī)劃來處理允許具有可變寬度和高度的文本框的模型的已知方法。
18.3基于圖的版面計算在另一種實現(xiàn)方式中,所使用的版面模型允許所有基礎(chǔ)模型規(guī)則、首選偏移規(guī)則和形狀規(guī)則。該模型與首選版面模型相同,只是不允許固定中心規(guī)則。在該實現(xiàn)方式中,使用最小偏移規(guī)則表示基礎(chǔ)模型規(guī)則,并且將其存儲為有向圖。將首選偏移規(guī)則存儲為單獨的有向圖。對形狀規(guī)則進行單獨存儲。與單形法和二次規(guī)劃方法相比,該方法的優(yōu)點是它同時包含幅形規(guī)則和文本規(guī)則,并且可對該方法進行修改以便包含其它形狀規(guī)則。
另外,在該實現(xiàn)方式中,每個容器與一個盒子相關(guān)聯(lián)。對于某些容器,可以將另一個單獨的盒子與該容器相關(guān)聯(lián),并且將其用于表示該容器的理想尺寸和/或形狀。利用最小偏移規(guī)則,告知版面引擎105使表示容器的印刷或顯示形狀的盒子盡可能地接近表示理想形狀的盒子的尺寸和形狀。通過對相關(guān)聯(lián)的盒子應(yīng)用形狀規(guī)則,定義容器的理想尺寸和形狀。版面計算方法使容器的尺寸和形狀盡可能地接近理想尺寸和形狀。不是總有可能使容器正好具有理想尺寸和形狀,因為其在理想尺寸和形狀時可能不能與版面中的可用空間相適應(yīng)。例如,約束可能防止其成為理想尺寸或形狀。
使用最小偏移規(guī)則定義約束,其中約束對標記的可能位置進行限制,首選偏移規(guī)則用于定義目標函數(shù),其中利用版面計算方法對目標函數(shù)進行最小化,并且利用形狀規(guī)則計算方法對該計算方法進行動態(tài)控制。為了定義目標函數(shù),將每條首選偏移規(guī)則和一個能量值相關(guān)聯(lián)。首選偏移規(guī)則的能量是首選偏移和實際偏移間差值平方的一半。稱為總能量的目標函數(shù),是所有首選偏移規(guī)則的全部能量之和。如果為首選偏移規(guī)則指定了強度,則將強度和能量相乘??梢哉J為首選偏移規(guī)則是一個彈簧,該彈簧具有固有長度,并且在壓縮或拉伸時受到張力作用。首選偏移規(guī)則的張力是規(guī)則的強度與實際偏移和首選偏移間差值的乘積。規(guī)則的強度類似于彈簧的剛度。版面引擎105通過平衡所有首選偏移規(guī)則的張力而使總能量最小化,來計算版面。
圖28表示在計算版面時所涉及的主要步驟。版面計算方法2800在不違反任何最小偏移規(guī)則的情況下,對標記進行移動(即,改變其位置),直到總能量最小化為止。方法2800在步驟2801中開始,在該步驟中,版面引擎105搜索能夠移動的一組標記,以便在不違反任何基礎(chǔ)模型規(guī)則的情況下減小目標函數(shù)的值。在步驟2803中,執(zhí)行測試,以測試該搜索是否成功,假如成功,則該方法進入步驟2805,否則,版面計算完成,并且方法2800停止。在步驟2805中,將標記沿適當(dāng)方向移動適當(dāng)距離,以便降低總能量。在步驟2805之后,方法2800返回到步驟2801,在該步驟中,搜索將要移動的另一組標記。以下將詳細說明用于選擇要移動的多組標記的方法、和用于計算移動標記的距離的方法。為了確保圖28描述的處理可以終止,忽略標記位置的微小變化,和/或引起總能量的微小變化的標記位置變化。在一種實現(xiàn)方式中,將位置變化限制為整數(shù)個邏輯單位。
圖29表示與圖28所示的過程等效的過程2900,只是在移動一組水平標記(步驟2903)之前首先移動垂直標記(步驟2901)。步驟2905中的測試起到與步驟2803中的測試相同的作用。有多種可能的方式用以組織用于降低總能量的方法,而并不背離本公開的范圍。
圖30A詳細地表示了在如步驟2901-A所示的實現(xiàn)方式中可以如何執(zhí)行步驟2901的方法。在步驟3001中,對垂直標記的推動圖進行計算。這用來對可由一個給定標記推動的標記進行確定。在某些實現(xiàn)方式中,該圖可以是與表示規(guī)則的圖相分離的數(shù)據(jù)結(jié)構(gòu)。在其它實現(xiàn)方式中,可以將兩個數(shù)據(jù)結(jié)構(gòu)進行組合。在步驟3003中,通過從表示垂直標記和水平最小偏移規(guī)則的圖中檢索第一個頂點,檢索第一個垂直標記??梢杂卸喾N可能的順序?qū)擞涍M行檢索。在一種實現(xiàn)方式中,可以按照在表示水平最小偏移規(guī)則的圖中存儲相應(yīng)頂點的順序,對標記進行檢索。在步驟3003之后,該方法進入步驟3005,在該步驟中,計算由在步驟3003中所選擇的標記能夠向右推動的標記。步驟3005對在不違反最小偏移規(guī)則的情況下可向右移動一個非零距離的一組標記進行確定。該組標記包括在步驟3003中所選擇的標記,以及可由選定標記推動的所有標記(即,與推動圖中可從對應(yīng)于選定標記的頂點到達的頂點相對應(yīng)的所有標記)。步驟3007對在不違反最小偏移規(guī)則的情況下在步驟3005中所確定的那組能夠標記向右移動的最大距離進行確定。步驟3007中的計算與作為推動操作的步驟2507的一部分而執(zhí)行的計算相同。在步驟3007之后,步驟3009對該組中的各個標記應(yīng)當(dāng)移動的距離進行計算,以便降低總能量,該距離不大于在步驟3007中所計算的距離。以下將對步驟3009進行詳細描述??梢詫⒁苿泳嚯x限制為整數(shù)個邏輯單位。在步驟3009之后,該方法進入步驟3011,在該步驟中,將所有標記移動在步驟3009中所計算的距離。由于標記可能已經(jīng)改變位置,所以可能需要更新推動圖,以便反映新位置的結(jié)果。如果在步驟3009中所計算的距離等于在步驟3007中所計算的最大允許距離,則需要改變推動圖。在步驟3011后的步驟3013中執(zhí)行該處理。向右移動標記沒有減少總能量,也是有可能的。在這種情況下,在步驟3009中所計算的距離將為0,并且在步驟3011中該標記將不會實際改變位置。實際上,步驟3011和3013都不進行任何處理,并且在某些實現(xiàn)方式中可以跳過它們。步驟3015、3017、3019、3021和3023分別等效于步驟3005、3007、3009、3011和3013,只是移動方向相反。在上述步驟中,使用反向推動圖而不是推動圖。軟件工程領(lǐng)域的普通技術(shù)人員可以理解,有可能設(shè)計用于推動圖的有向圖數(shù)據(jù)結(jié)構(gòu),從而能夠沿相反方向遍歷同一推動圖,因此不需要單獨的反向推動圖。在步驟3023之后,進行測試,以確定在步驟3003中是否訪問了所有頂點,如果沒有訪問,則該方法返回到步驟3003,在該步驟中選擇下一個標記。假如訪問了所有的頂點,則完成步驟2901,并且計算進入步驟2903。
步驟2903與步驟2901相同,只是它所考慮的是水平標記和垂直最小偏移規(guī)則,而不是垂直標記和水平最小偏移規(guī)則。
圖31表示如何執(zhí)行步驟3009中的計算的細節(jié)。在步驟3101中,相對于當(dāng)前組內(nèi)的標記從它們的當(dāng)前位置起的位置變化,計算總能量的偏導(dǎo)數(shù)??偰芰康膶?dǎo)數(shù)等于張力之和。偏導(dǎo)數(shù)等于使得當(dāng)前組內(nèi)的標記和當(dāng)前組外的標記相關(guān)聯(lián)的首選偏移規(guī)則的張力之和。即,總和是preferred(n,m,d,s)形式的規(guī)則上的總和,其中m是當(dāng)前組內(nèi)的標記,而n是當(dāng)前組外的標記。注意到,對于任意標記m和n來說,規(guī)則preferred(m,n,d,s)等效于規(guī)則preferred(n,m,-d,s)。通過使得張力的和盡可能地接近于零,將使能量最小化。在步驟3103中,通過將標記移動距離δ,來完成上述處理,其中δ由下式給出δ=-D/S,其中D是張力之和,S是將當(dāng)前組內(nèi)的標記和當(dāng)前組外的標記相關(guān)聯(lián)的首選偏移規(guī)則的強度之和。在步驟3105中,執(zhí)行測試,以確定目標函數(shù)是否正沿為當(dāng)前組標記考慮的移動方向降低。這等效于測試δ是否為正。如果通過沿當(dāng)前方向?qū)擞涍M行移動不能降低能量,則在步驟3107中將移動距離設(shè)置為零。如果通過沿當(dāng)前方向?qū)擞涍M行移動能夠降低能量,則在步驟3109中計算移動距離。移動距離是δ和在步驟3007中所計算的數(shù)值之中的較小者??梢詫擞浀囊苿酉拗茷檎麛?shù)個邏輯單位,從而將步驟3007所計算的距離四舍五入為整數(shù)個邏輯單位。這確保了版面計算的終止。
如同應(yīng)用于上述推動操作一樣,將同樣的與原點標記相關(guān)的考慮應(yīng)用于版面計算。在這一點上,版面計算可以忽略原點標記,其中步驟3005將總是對能夠移動的一組標記進行查找,將要被移動的那組標記可以包括對水平坐標系原點進行定義的指定垂直標記。在這種情況下,步驟3007總是生成一個非零的正距離,并且步驟3011可能改變原點標記的位置。在這種情況下,應(yīng)當(dāng)在步驟3001之前對原點標記的位置進行存儲,并且通過將該版面中的所有垂直標記移動一個距離,該距離是在計算期間原點標記已經(jīng)移動的距離的負距離,對原點標記的位置進行恢復(fù)。在另一種實現(xiàn)方式中,在步驟3007中對原點標記進行考慮。在這一點上,如果在將要移動的那組標記中包括原點標記,則在步驟3007中計算的距離為零。在這種情況下,在執(zhí)行版面計算時,無須對原點進行保存或恢復(fù)。
形狀規(guī)則只用于具有不固定寬度和不固定高度的容器。對于此類容器,在版面引擎105中用兩個盒子對包含內(nèi)容的容器的部分進行表示。一個盒子表示容器中包含的顯示或印刷文本或圖像的邊界。由版面引擎計算這個盒子的邊界。另一個盒子表示盒子的理想形狀。該盒子由形狀規(guī)則進行控制,并且通常不印刷或不向用戶顯示。這兩個盒子共享一個水平標記和一個垂直標記。例如,這兩個盒子的左邊緣和頂邊緣的位置總是相同的。是否共享左邊緣或右邊緣,或者是否共享頂邊緣或底邊緣,是沒有差別的。通過最小距離規(guī)則將剩余的兩條垂直邊緣聯(lián)系起來,并且,類似地,通過最小距離規(guī)則將剩余的兩條水平邊緣聯(lián)系起來。最小距離規(guī)則向版面引擎指示兩個盒子的尺寸應(yīng)盡可能地彼此接近。
在對與這樣一對相關(guān)盒子的任意一個盒子的一條邊緣相關(guān)聯(lián)的標記進行移動時,考慮形狀規(guī)則。在步驟3003中,忽略并且跳過屬于具有不共享形狀規(guī)則的盒子的標記,但是,如果對表示無形狀規(guī)則的相關(guān)聯(lián)盒子的邊緣的任何標記進行了移動,則在步驟3009之前對上述不共享標記進行調(diào)整。同樣的方法適用于應(yīng)用于水平標記的等效步驟。根據(jù)形狀規(guī)則對不共享標記進行調(diào)整,以便使能量函數(shù)最小化。該過程確保在垂直和水平標記之間能量是平衡的。
在形狀規(guī)則是幅形規(guī)則的情況下,直接將能量最小化。如果顯示框的寬度和高度是W和H,并且理想盒子的寬度和高度是w和h,則當(dāng)W+H=w+h時,獲得最小能量。如果由幅形規(guī)則所定義的高度對寬度之比為r,則可以按以下方式計算理想盒子的寬度和高度w=(1+r)-1(W+H)和h=r(1+r)-1(W+H)。
在形狀規(guī)則為文本規(guī)則的情況下,理想盒子的形狀沒有簡單公式。文本版面引擎執(zhí)行計算,以便將文本布置到矩形空間內(nèi)。利用文本版面引擎為理想盒子計算尺寸。文本版面引擎執(zhí)行計算,以便把文本塊布置到具有給定寬度的空間內(nèi),并且能夠快速計算所布置的文本塊的高度。文本版面引擎包括自動換行計算,以便將一長行文本換行成為多行。文本版面引擎根據(jù)與該文本相關(guān)聯(lián)的格式化信息,對文本進行布置。格式化信息可以包括段落樣式、用于每個字符的字體大小和字型,諸如粗體或加下劃線。
在一種實現(xiàn)方式中,將理想寬度設(shè)置為最寬的文本行的寬度,將理想高度設(shè)置為由文本版面引擎所計算的已布置的文本塊的高度,該文本塊的寬度等于顯示框的寬度。如果寬度小于最長行的寬度,或者顯示框的高度不足以包含該文本,則上述處理具有增加能量懲罰的效果。
在另一種實現(xiàn)方式中,利用文本版面引擎按不同的寬度布置文本,以計算每個寬度的高度,直到找到產(chǎn)生最低能量值的寬度為止。如果最寬的文本行不具有與顯示框相同的寬度,則可以將理想寬度設(shè)置為最寬的文本行的寬度,可以將理想高度設(shè)置為在沒有換行時文本版面引擎所計算的高度。當(dāng)文本包含長文本行,并且它必須進行換行,以便適應(yīng)顯示框時,使用搜索策略,以找到導(dǎo)致能量最小的版面的寬度??梢栽O(shè)計許多搜索理想寬度的可能策略,而不背離本公開的范圍。特別地,可以使用折半搜索策略。
在另一種實現(xiàn)方式中,如果文本包含長文本行,并且它必須進行換行以適應(yīng)顯示框時,根據(jù)能否布置文本以使之與顯示框相適應(yīng),對理想盒子的尺寸進行計算。如果文本與顯示框不相適應(yīng),則使理想盒子的寬度和高度大于顯示框的寬度和高度。如果文本與顯示框相適應(yīng),則使理想盒子的寬度和高度小于顯示框的寬度和高度。對于其顯示框大于或小于包含文本所必需的尺寸的版面來說,該策略具有增加懲罰的效果??梢杂卸喾N對理想盒子的準確尺寸進行計算的可能方法,而不背離本公開的范圍。可以使用的一種特殊方法是,如果通過與顯示框的現(xiàn)有寬度相等的寬度對文本進行布置,則首先計算文本的高度,然后將所布置的文本的高度和顯示框的高度的差值的一半加到顯示框的寬度和高度之中,以獲得理想盒子的尺寸。
18.3.1簡單的一維版面示例圖39表示在章節(jié)18.3和后續(xù)章節(jié)中描述的版面機制的使用示例。利用A、B和C表示三個盒子3901。通過位于左邊緣、頂邊緣、右邊緣和底邊緣的標記3905定義每個盒子3901。將頁面的左邊緣和右邊緣定義為兩個垂直標記(3903和3904),其中這些標記之間有固定距離。固定偏移規(guī)則3902對容器的某些邊緣和頁面的邊緣之間的距離進行規(guī)定。
規(guī)則具體為·把頁面的寬度固定為50個單位。
· PA、即容器A的首選寬度為22個單位。
· PB、即容器B的首選寬度為16個單位。
· PC、即容器C的首選寬度為13個單位。
·盒子A的左邊緣(圖39中稱為“a”)距離頁面的左邊緣1個單位。
·盒子A的右邊緣(稱為“m”)可自由移動。
·盒子B的左邊緣(稱為“b”)在a的右側(cè)6個單位處。
·盒子B的右邊緣在“m”的左側(cè)1個單位處。
·盒子C的左邊緣在“m”的右側(cè)2個單位處。
·盒子C的右邊緣(稱為“c”)在頁面右邊緣的左側(cè)1個單位處。
分別用WA、WB和WC表示盒子A、B和C的當(dāng)前寬度。為方便起見,使用這樣一個坐標系,該坐標系以頁面的左邊緣為零點,向頁面的右側(cè)增加。同時假定字母“a”、“b”、“c”和“m”表示上述坐標系內(nèi)相應(yīng)標記的位置。
首選偏移規(guī)則的能量是首選偏移和實際偏移間差值平方的一半。用于該版面的目標函數(shù)、即總能量,是所有首選偏移規(guī)則的能量之和。因此,目標函數(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]。
注意到,為了查找每個盒子的寬度,從該盒子的最右標記的位置中減去該盒子的最左標記的位置,以獲得一個非負數(shù)。因此,WB為(m-b-1),因為m和盒子B的右邊緣之間的間隔為1個單位。同樣,WC為(c-m-2),因為c在m的右側(cè),并且盒子C的左邊緣和標記m之間的距離為2個單位。
為了使目標函數(shù)最小化,注意到,“m”是唯一一個可移動的標記(實際上,“m”以及與其最接近的兩個標記可以移動,并且可以將它們看作方程式中的控制變量,因此,為簡單起見,使用稱為“m”的那個標記)。在這種情況下,簡單地找到能量函數(shù)相對于變量m的偏導(dǎo)數(shù),并且對導(dǎo)數(shù)為零進行求解,就足夠了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)。
注意到第三項(m-c+15)的負號,因為導(dǎo)數(shù)是相對于m的,而m在該項中為負。
δE/δm=m-a-22+m-b-17+m-c+15=3m-a-b-c-22-17+15=3m-a-b-c-24。
通過對這個值為零進行求解,有可能找到最小能量。已知a、b和c的值分別為1、7和49。
0=3m-1-7-49-243m=1+7+49+24=81m=27。
由于只有一個變量,因此過程結(jié)束。因此,給定配置的最小能量是在標記“m”在頁面左邊緣的右側(cè)27個單位處時獲得的。
18.3.2簡單的二維版面示例圖40A表示版面機制的另一種使用示例。在這種情況下,由于有可以移動的水平和垂直標記,所以該示例涉及二維方向上的張力。
在由標記4002限定邊界的具有已知固定尺寸的矩形頁面內(nèi),顯示了三個標有A、B、C的盒子4001。固定偏移規(guī)則4003、4004、4005和4006對A和C的三條邊緣的位置進行確定。A的下邊緣(水平邊緣)可以移動,但是通過固定偏移規(guī)則連接到B的上邊緣(稱為“m”),因此,兩個標記只能一起移動,并且移動相同距離。類似地,B的右邊緣(稱為“n”)和C的左邊緣可以移動,但是只能一起移動,并且移動相同距離,因為它們之間有一條固定偏移規(guī)則。
由于盒子B的寬度和高度都可以改變,所以可以對盒子B應(yīng)用形狀規(guī)則。所選擇的規(guī)則為縱橫比規(guī)則,該規(guī)則規(guī)定盒子B的高寬比應(yīng)盡可能地接近0.5(在圖40A中,用標有RB=0.5的箭頭指示)。盒子A的首選高度為22個單位,并且盒子C的首選寬度為36個單位。由于盒子A和C都不能在二維方向上進行改變(由于規(guī)則4005、4006),所以都沒有形狀規(guī)則。
規(guī)則具體為·把頁面的寬度固定為50個單位。
·把頁面的高度固定為36個單位。
· PA、即容器A的首選高度為22個單位。
· RB、即容器B的首選高寬比為0.5。
· PC、即容器C的首選寬度為36個單位。
·盒子A的上邊緣(稱為“a”)距離頁面的頂邊2個單位。
·盒子A的左邊緣在頁面左邊緣的右側(cè)1個單位處。
·盒子A的右邊緣在其左邊緣右側(cè)18個單位處。
·盒子B的上邊緣(稱為“m”)可以移動。
·盒子A的下邊緣比m高2個單位。
·盒子B的左邊緣(稱為“b”)在頁面左邊緣的右側(cè)1個單位處。
·盒子B的下邊緣(稱為“d”)比頁面的下邊緣高3個單位。
·盒子B的右邊緣(稱為“n”)可以移動。
·盒子C的左邊緣在“n”的右側(cè)2個單位處。
·盒子C的下邊緣比頁面的下邊緣高3個單位。
·盒子C的右邊緣(稱為“c”)在頁面右邊緣的左側(cè)2個單位處。
·盒子C的上邊緣比其下邊緣高16個單位。
使HA,WA,HB,WB和HC,WC分別是盒子A的高度和寬度、盒子B的高度和寬度、以及盒子C的高度和寬度。
使PHB和PWB分別是盒子B的首選高度和寬度。盒子B的首選高度和寬度不是版面算法的固定輸入;相反,它們是通過使用盒子B的形狀規(guī)則在某些階段計算的,其中形狀規(guī)則是與其寬度和高度有關(guān)的縱橫比規(guī)則。這些值是作為盒子B的高度和寬度的加權(quán)平均值計算的PWB=(WB+HB)/(1+RB)= 2/3(WB+HB)PHB=RB(WB+HB)/(1+RB) = 1/3(WB+HB)。
表示上述方法的能量的目標函數(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ù)的偏導(dǎo)數(shù),直到再也不能減小兩個方向上的張力的絕對值之和為止,就足夠了。該處理生成張力最小的方案。使用張力的絕對值,從而能夠在停止條件中同樣地對正負張力進行處理。偏導(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-PWR。
通過將其設(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)。
對本例而言,使盒子B的初始寬度和高度分別為15和10個單位,因此,m=d-10=33-10=23,且n=b+15=16。
WB=15HB=10
m=23n=16。
計算盒子B的首選寬度和高度PWB=2/3(WB+HB)=2/3(15+10)=50/3=162/3=16(當(dāng)被減少到最接近的整數(shù)時)。
PHB=1/3(WB+HB)=1/3(15+10)=25/3=81/3=8(當(dāng)被減少到最接近的整數(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時)=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時)=33-PHB-2-2-22=7-PHB
=7-8=-1。
張力為負,表示標記需要向左或向上移動,以減小這些張力。
總張力是垂直和水平張力的絕對值的總和TTOTAL=|TX|+|TY|=|-7|+|-1|=7+1=8。
版面機制繼續(xù)依次減小水平和垂直方向上的張力,直至再也不能減小總張力為止。
首先沿水平方向移動垂直標記。盡早將B的首選寬度計算如下PWB=2/3(WB+HB)=16。
唯一能夠移動的垂直標記是“n”,以及通過固定偏移規(guī)則(距離其右側(cè)2個單位)與其相連的標記。對兩個標記進行移動,以使水平張力最小化。由于另一個標記的位置可以被推導(dǎo)為(n+2),所以確定應(yīng)當(dāng)將“n”移動到的位置,就足夠了。如先前由下列關(guān)系式確定的那樣,計算n的位置,以便減小目標函數(shù)相對于n的偏導(dǎo)數(shù)n=1/2(11+PWB)=1/2(11+16)=131/2=13(當(dāng)被減小為最接近的整數(shù)時)。
將標記“n”移動到位置13,以便減小水平張力,還將盒子B的寬度變成12,即WB=12HB=10m=23n=13。
由于形狀規(guī)則,盒子B的首選寬度和高度變?yōu)?
PWB=2/3(WB+HB)=2/3(12+10)=44/3=142/3=14(當(dāng)被減小為最接近的整數(shù)時)。
PHB=1/3(WB+HB)=1/3(12+10)=71/3=7 (當(dāng)被減小為最接近的整數(shù)時)。
現(xiàn)在必須對總張力進行重新計算,以便查看總張力是否已減小了,并且如果沒有減小,則版面過程停止。新張力為TX=9-PWB=9-14=-5。
TY=7-PHB=7-7=0。
TTOTAL=|TX|+|TY|=|-5|+|0|=5。
由于新張力已經(jīng)從8降到5,所以該過程將繼續(xù)。
現(xiàn)在,沿垂直方向移動水平標記。此時,只有“m”以及與其相連的標記可以移動。計算應(yīng)當(dāng)將“m”移動到的位置,因為與其相連標記將移動到(m-2)。如早先由下列關(guān)系式確定的那樣,使目標函數(shù)相對于m的偏導(dǎo)數(shù)最小化m=1/2(59-PHB)=1/2(59-7)=26。
將標記“m”移動到位置26,以便減小垂直張力,將通過固定偏移規(guī)則與其相連的標記移動到位置24。
WB=12HB=7m=26n=13現(xiàn)在重新計算盒子B的首選寬度和高度、以及總張力PWB=2/3(WB+HB)=2/3(12+7)=38/3=122/3=12(當(dāng)被減小為最接近的整數(shù)時)。
PHB=1/3(WB+HB)=1/3(12+7)=61/3=6(當(dāng)截斷為最接近的整數(shù)時)。
TX=9-PWB=9-12=-3。
TY=7-PHB=7-6=1。
TTOTAL=|TX|+|TY|=|-3|+|1|=4。
由于總張力已經(jīng)從5減小到4,所以該過程將繼續(xù)。再次沿水平方向移動垂直標記,以便減小張力。
n=1/2(11+PWB)=1/2(11+12)=111/2
=11(當(dāng)被減小為最接近的整數(shù)時)。
將標記“n”移動到位置11。盒子B的寬度變成10個單位。
WB=10HB=7m=26n=11重新計算盒子B的首選寬度和高度、以及總張力PWB=2/3(WB+HB)=2/3(10+7)=34/3=111/3=11(當(dāng)被減小為最接近的整數(shù)時)。
PHB=1/3(WB+HB)=1/3(10+7)=52/3=5(當(dāng)被減小為最接近的整數(shù)時)。
TX=9-PWB=9-11=-2。
TY=7-PHB=7-5=2。
TTOTAL=|TX|+|TY|=|-2|+|2|=4。
由于總張力沒有減小到4以下,所以該過程停止。可選地,還可以在過程停止前移動水平標記。
本例的最終結(jié)果可能如圖40B所示的那樣。注意到,在這種情況下盒子A和C可以重疊。這可能是所期望的效果。如果不是預(yù)期的效果,則為了防止此種情況發(fā)生,必須添加其它約束。例如,可以添加最小偏移規(guī)則,以便強迫盒子C的左邊緣保持在盒子A的右邊緣的右側(cè)。
本例僅僅顯示了一個形狀規(guī)則和兩個首選偏移規(guī)則,但是實際應(yīng)用程序可以對每個盒子使用形狀規(guī)則。取決于在盒子內(nèi)將要顯示的內(nèi)容,形狀規(guī)則也可能不同。例如,可以使用縱橫比規(guī)則和文本形狀規(guī)則。每條規(guī)則按其自身的方式對盒子的理想形狀進行計算。
18.4帶有固定中心的基于圖的算法在版面引擎105中,允許使用固定中心規(guī)則,因此需要修改版面計算,以正確地處理固定中心規(guī)則。在圖30B中,如步驟2901-B所示,顯示了對步驟2901(圖29)中的版面計算的修改,并且其類似于在推動操作中為支持固定中心規(guī)則所做的修改。圖30B幾乎與圖30A相同,只是圖30B表示了在計算版面時如何對固定中心進行考慮。在圖30A和30B中,步驟3001、3003、3005、3009、3013、3015、3019、3023和3025是共同的。
在圖30B中,步驟3005和3015必須包括在計算推動標記時的相對標記。計算兩組標記,而不是計算沿一個方向移動的單組標記;一組向右移動,另一組向左移動。這一點與推動操作中相同。在圖30B中,步驟3008代替步驟3007,在步驟3008中,獨立地為兩組標記計算最大移動距離(忽略固定中心規(guī)則),然后兩個值中的較小者(就數(shù)量而言)即為標記能夠移動的最大距離。用步驟3012代替步驟3011,用步驟3022代替步驟3021,區(qū)別在于一起移動兩組標記。在步驟3012中,將包含了在步驟3003中所選擇的標記的那一組向右移動,并且將包含了與第一組中的標記相對的標記的那一組向左移動。在步驟3022中,將包含了在步驟3003中所選擇的標記的那一組向左移動,并且將包含了與第一組中的標記相對的標記的那一組向右移動。相同的考慮適用于為包括固定中心而修改推動操作的情況。在這一點上,如果任意兩個相對標記在同一組中,則應(yīng)將原點標記添加到這兩個組中。邏輯上,如果包括了原點標記,則應(yīng)將具有相同朝向的所有相對標記對添加到兩個組中,因為移動原點需要移動所有固定標記,并且因此也必須移動所有帶有固定中心的盒子。當(dāng)然,不必要實際上創(chuàng)建包含原點標記和所有相對標記對的組,因為不應(yīng)該對它們進行移動。如果任一組中都不包括原點標記,則步驟3008將最大距離設(shè)置為零,因此步驟3009、3012和3013不進行任何處理,并且可以將其跳過。步驟3018代替步驟3017,并且和步驟3008一樣,為包含了在步驟3003中所選擇的標記的那一組計算最大距離,而且還為與包含所選標記的那一組中的標記相對的所有標記計算最大距離。類似地,如果這兩個組中的任一組包含原點標記,則步驟3018應(yīng)將最大距離設(shè)置為零。
19.印刷文檔圖36表示在從文檔模板生成并印刷文檔的過程中涉及的方法3600的步驟。方法3600在步驟3601中開始,在該步驟中,應(yīng)用程序121連接到數(shù)據(jù)庫,并且將數(shù)據(jù)庫游標設(shè)置在包含了所需源數(shù)據(jù)的表格的開始位置。用戶可以利用圖14所示的對話框指定需要連接哪個數(shù)據(jù)庫。在步驟3601之后,在步驟3603中,從數(shù)據(jù)庫表格中讀出下一條記錄,并且更新游標以指向下一條記錄。由于文檔集中的每篇文檔相應(yīng)于一條記錄,開始一篇新文檔,并且將頁面計數(shù)器重置在文檔模板的開始。隨后進入步驟3605,在該步驟中應(yīng)用程序121為正在生成的文檔開始一個新頁面,并且生成用于該頁面的版面并將其應(yīng)用于該頁面。在步驟3607中,使用當(dāng)前記錄中的數(shù)據(jù),來計算在當(dāng)前頁面上的版面內(nèi)的每個容器的理想尺寸。接著,在步驟3609中,使用在步驟3607中所計算的理想尺寸調(diào)整版面規(guī)則。此類操作可以包括改變首選偏移規(guī)則的值,并根據(jù)在步驟3607中計算的理想尺寸對幅形規(guī)則進行更新。此外,對于文本的寬度和高度均不固定的可變文本容器,協(xié)同文本規(guī)則一起確定高度和寬度,其中文本規(guī)則取決于在步驟3603中所提取的數(shù)據(jù)庫記錄的某個字段中的文本。在步驟3609中對此類文本規(guī)則進行更新。在步驟3609之后,在步驟3611中計算當(dāng)前頁面的版面。在計算出版面以后,在步驟3613中提交并印刷頁面。在已經(jīng)印刷了頁面以后,在步驟3615中執(zhí)行測試,以便確定是否印刷了當(dāng)前文檔的所有頁面。若沒有全部印刷,則方法3600返回到步驟3605,以開始計算下一個頁面。如果已經(jīng)為當(dāng)前文檔印刷了文檔模板中的所有頁面,則方法3600繼續(xù)到步驟3617,在該步驟中,執(zhí)行另一個測試,以確定當(dāng)前記錄是否為數(shù)據(jù)庫表格中的最后一條記錄。如果已經(jīng)處理了數(shù)據(jù)庫表格中的所有記錄,則方法3600完成,否則該過程返回到步驟3603,在該步驟中,讀出數(shù)據(jù)庫表格中的下一條記錄,以便印刷下一篇文檔。
20.預(yù)先計算可能的文本形狀用于提高版面機制的速度的一種方法、諸如章節(jié)18所描述的基于圖的版面方法是,對該版面可能包含的任何文本的所有形狀進行預(yù)先計算。通過在執(zhí)行版面計算前計算形狀,版面機制可以更快地進行處理,因為已經(jīng)執(zhí)行了對文本形狀的計算,并且將其結(jié)果進行存儲以用于隨后的快速檢索。通過圖41A-41K中的例子,來說明對某些文本的可能形狀進行計算的方法。
該方法的工作方式如下1.如圖41A所示,根據(jù)需要在單詞之間保持適當(dāng)?shù)拈g距,以首尾相連的方式水平地布置文本文字(在外接框4103內(nèi)顯示每個單詞4102)。然后將單詞的總體配置的寬度和高度確定為包圍單詞的最小盒子4101。在存儲數(shù)據(jù)結(jié)構(gòu)中對外接框4103的尺寸進行存儲。必要時,可使用不同字體測量單詞。注意到,為了清楚起見,在外接框4103和文字框4102之間有一個小的間隔,但是在實際實現(xiàn)時該間隔并不存在。
2.獲得外接框的寬度,然后將寬度減小所用坐標系的一個單位。接著,使用新寬度作為寬度約束,再次布置文本。按照這個寬度約束和文本語言的文本流動規(guī)則的要求,文本將流動到后續(xù)的行中。不存在高度約束,因此可以根據(jù)需要使用若干行。根據(jù)該結(jié)果確定新的外接框,如圖41B所示,并且在存儲數(shù)據(jù)結(jié)構(gòu)中對這個新的外接框進行存儲。字符間距4105遵循文本語言的自然間距規(guī)則。例如,在英語中,不把行尾的間隔計算在外接框計算結(jié)果內(nèi)。對于某些語言來說,對于構(gòu)成單詞或詞間間距的定義可能與給出的示例不同。
3.重復(fù)步驟2直到不能把文本布置在更窄的外接框內(nèi)為止。圖41C-41K舉例說明了該過程。注意到,在本例中,諸如單詞“Brevity”之類的每個單詞可以有可選的連字符斷點4104,如圖41h-41k所示,斷點允許把單詞斷開。當(dāng)英語中出現(xiàn)此種情況時,規(guī)則將添加連字符4106。雖然該處理取決于文本語言的規(guī)則,但是在計算外接框時,通常包含這種動態(tài)插入的標點符號的尺寸和位置。
4.計算的文本形狀是存儲的外接框。當(dāng)需要知道文本塊在給定的寬度約束、高度約束、或者寬度與高度約束下可以有多大時,可以在版面機制中使用以上形狀。還可以使用上述形狀,來了解在給定的一維方向上的下一個最大或最小形狀,以便快速地在文本塊的幾種可能版面中做出決定。
顯然,打算使上述實現(xiàn)方式與使用具有已知最小尺寸的字間間距從左向右書寫的語言一起使用。對于不遵循此類規(guī)則的語言,可制定另一種替換方案。例如,某些亞洲語言以列的方式從上向下書寫字符,然后從右向左書寫各列。對于此種語言,需要修改版面過程,以交換垂直和水平尺寸的作用,并且可以將間隔符號的尺寸減小到某個更小的值或零。因此,將會在步驟1中垂直堆疊字符,然后在步驟2中,將高度減少1個單位(其可能是字符的高度),并且重復(fù)該過程,以形成越來越寬的外接框。類似地,每種語言的斷字規(guī)則取決于文本的語言。
21.表格創(chuàng)建示例圖42A-42C表示使用如章節(jié)18所描述的基于圖的版面機制構(gòu)建表格的一些方法。將表格定義為被劃分成單元格的矩形區(qū)域,每個單元可選地保存諸如文本或圖像之類的某些內(nèi)容。
圖42A表示對表格進行定義的一種方法。使用導(dǎo)向4203對行和列的位置進行定義。將容器4201放置在導(dǎo)向之間,以充當(dāng)表格中的單元格,并且可以在其中放置內(nèi)容。在導(dǎo)向4203和容器4201的相應(yīng)鄰接邊緣之間附加支柱4202,以便對相鄰單元格的內(nèi)容之間的邊距進行定義。如果打算使各單元格彼此對齊,則支柱可以具有任意所需長度,包括零長度。
導(dǎo)向可以是不固定的(它們可以是浮動導(dǎo)向),以便每個單元格的內(nèi)容可以推動導(dǎo)向,由此允許調(diào)整行和列的尺寸以便適應(yīng)不同尺寸的內(nèi)容?;蛘撸梢詫?dǎo)向固定到頁面上,以便把行和列限制在某個尺寸或位置。通過在導(dǎo)向之間放置支柱,也可以利用浮動導(dǎo)向來控制行和列的尺寸。這允許整個表格在頁面上移動(由于沒有把導(dǎo)向固定到頁面上),但是仍然可以利用該技術(shù)控制行和列的尺寸。
注意到,將該表格中的容器的外邊固定到頁面上。該處理可能是不必要的。另一種替換的更好方法可以是,使用導(dǎo)向定義表格的最外邊界,并且在導(dǎo)向和容器的外邊緣之間放置支柱,以便允許那些邊緣一起進行移動。
圖42B表示定義表格的另一種替換方法。在本例中不使用導(dǎo)向。相反,把支柱4205直接附加在相鄰容器4204的邊緣之間,以便指定行與列的邊距尺寸。只有在最上的容器和最左的容器之間才需要這種指定邊距的支柱4205。通過使用長度為零的支柱4206,將表格內(nèi)的其它容器鏈接到這些約束。
在圖42B所示的例子中,通過高度為零的支柱4206鏈接頂行容器的底邊緣,從而將其底邊緣彼此準確對齊。類似地,利用高度為零的支柱鏈接底行容器的頂邊緣,以便將它們對齊。同時,這意味著只需一個垂直支柱4205就能定義并控制那兩行之間的邊距尺寸。實際上,這是非常有用的,因為它意味著對表格邊距的更改只涉及改變一個支柱的首選或?qū)嶋H距離,而無不是像圖42A中的示例要求的那樣對多個支柱進行改變。對于所示的鏈接最左一列的右邊緣并且還鏈接最右一列的左邊緣的零寬度的支柱4206,類似的邏輯關(guān)系也成立。
像在圖42A中那樣,圖42B中的例子還將表格的外邊緣固定到頁面上。就像對齊內(nèi)邊緣那樣,有可能使用零長度的支柱來對齊容器的所有外邊緣,而不是按上述方式對表格的位置和尺寸進行固定。這允許將表格移動到頁面上的任何需要之處,而無需一個接一個地對多條固定外邊緣的位置進行改變??梢允褂谜鹿?jié)18.3中所描述的版面方法實現(xiàn)該方法。
第三種替換方法可以使用導(dǎo)向來定義表格的外邊緣,并且使用零長度的支柱來對齊表格的內(nèi)邊緣。有導(dǎo)向和支柱的許多其它可變組合也能夠?qū)崿F(xiàn)相似的效果。
注意到,需要某些對齊表格內(nèi)邊緣的方法,以便形成傳統(tǒng)觀念的表格。圖42C表示在既不使用導(dǎo)向也不使用支柱來對齊內(nèi)邊緣時所出現(xiàn)的情況。將容器4207再次作為表格的單元格,并利用支柱4208對相鄰容器之間的距離進行定義。然而,注意到,本例缺少防止對角相對的容器重疊的方法,因為沒有使行和列的內(nèi)邊緣分開。
這可能會產(chǎn)生容器和內(nèi)容的重要并且可變的排列,并且章節(jié)18.3以及后續(xù)章節(jié)中描述的版面方法能夠生成此種排列(并非版面方法的所有現(xiàn)有示例均能生成此種排列)。然而,對于傳統(tǒng)觀念的表格,圖42A和42B所示的例子更適于實現(xiàn)完全對齊的行和列。
工業(yè)適用性上述方法適用于計算機和數(shù)據(jù)處理行業(yè),并且特別適用于利用可變數(shù)據(jù)再現(xiàn)實質(zhì)上具有相同格式和版面的大量文檔的情況。其例子包括為名稱、地址和其它個人資料均不同的許多人生成信件。另一個例子是,生成與不同度假目的地有關(guān)的廣告小冊子,其中每個小冊子的特征在于包括文本和圖像的獨特內(nèi)容,但是所有小冊子都是根據(jù)通用版面而生成的,其中該版面表示發(fā)布廣告的組織機構(gòu)的品牌或者式樣。許多其它例子也適用。
上文僅僅描述了本發(fā)明的某些實施例,可以對其做出各種修改和/或改變,而并不背離本發(fā)明的范圍和實質(zhì),所述實施方式是說明性的而不是限制性的。
權(quán)利要求
1.一種基于模板創(chuàng)建可變數(shù)據(jù)文檔的版面的方法,所述方法包括以下步驟在該模板中設(shè)置至少一個容器,以形成所述版面;建立至少一個與該容器的至少一個特征中每個選定特征相關(guān)聯(lián)的約束;使用圖形用戶界面顯示由所述建立步驟建立的、與由所述設(shè)置步驟設(shè)置的容器相關(guān)聯(lián)的約束;以及修改版面,以便通過把內(nèi)容放置到多個容器中而生成文檔,其中在滿足版面內(nèi)的每個約束的條件下,根據(jù)所放置內(nèi)容的屬性,改變所述至少一個容器的至少一維尺寸和所述至少一個容器在所述版面內(nèi)的位置中的至少一個。
2.根據(jù)權(quán)利要求1的方法,其中,所述建立包括建立兩個所述約束,其中每個所述約束與所述容器的一個相應(yīng)特征有關(guān)。
3.根據(jù)權(quán)利要求2的方法,其中,所述特征是從包括以下特征的組中選擇的所述容器的角、所述容器的邊的中點、所述邊的非中點、所述容器的中線上的非中點、以及所述容器的中心點。
4.根據(jù)權(quán)利要求1的方法,其中,所述放置內(nèi)容的所述屬性包括所述放置內(nèi)容的尺寸。
5.根據(jù)權(quán)利要求4的方法,其中,所述尺寸包括所述放置內(nèi)容的寬度。
6.根據(jù)權(quán)利要求4的方法,其中,所述尺寸包括所述放置內(nèi)容的高度。
7.根據(jù)權(quán)利要求1的方法,其中,通過用戶操作與由圖形用戶界面內(nèi)所述版面的表示描述的所述對應(yīng)特征一致的指示設(shè)備,執(zhí)行用戶發(fā)起的選擇。
8.根據(jù)權(quán)利要求1的方法,其中,所述建立包括以下步驟之一對沒有預(yù)先設(shè)置約束的所述對應(yīng)特征設(shè)置一個約束;以及重置所述對應(yīng)特征,以刪除預(yù)先設(shè)置的約束。
9.根據(jù)權(quán)利要求8的方法,其中,在具有設(shè)定約束的每個所述特征上提供一個約束符號。
10.根據(jù)權(quán)利要求1的方法,其中,所述容器為矩形,并且所述尺寸包括所述容器的寬度和高度,而且對于每個所述容器來說,所述內(nèi)容包括文本和/或圖像內(nèi)容。
11.根據(jù)權(quán)利要求10的方法,其中,所述特征包括所述容器的角,并且具有設(shè)定約束的每個所述角在所述版面內(nèi)保持固定。
12.根據(jù)權(quán)利要求10的方法,其中,所述特征包括所述容器的邊緣的中點,并且在滿足下列條件的情況下改變?nèi)萜鞯某叽绾?或位置對于具有設(shè)定約束的每個所述邊緣中點來說,(1)邊緣可以對稱地擴張或收縮,以及(2)邊緣的中點保持固定。
13.根據(jù)權(quán)利要求10的方法,其中,所述特征包括所述容器的對應(yīng)邊緣上的非中點,并且在滿足以下條件的情況下改變?nèi)萜鞯某叽绾?或位置對于具有設(shè)定約束的每條邊緣來說,(1)邊緣的長度可以自由地擴張或收縮,以及(2)不沿與該邊緣垂直的方向移動該邊緣。
14.根據(jù)權(quán)利要求10的方法,其中,所述特征包括所述容器的水平和垂直中線上的非中點位置,并且在滿足以下條件的情況下改變?nèi)萜鞯某叽绾臀恢弥械闹辽僖粋€對于具有設(shè)定約束的每條中線來說,(1)中線保持固定,(2)與中線平行的邊緣可以對稱地擴張或收縮,以及(3)可以獨立于固定的中線對與中線垂直的邊緣進行定位。
15.根據(jù)權(quán)利要求10的方法,其中,所述一個特征包括所述容器的中心點,并且在滿足以下條件的情況下改變?nèi)萜鞯某叽绾?或位置對于具有設(shè)定約束的中心點來說,(1)中心點保持固定,以及(2)容器的第一對平行邊緣擴張或收縮第一數(shù)量,而另一對平行邊緣擴張或收縮第二數(shù)量。
16.根據(jù)權(quán)利要求11的方法,還包括以下步驟對所述容器的另一個角設(shè)置另一個約束,其中所述另一個約束是根據(jù)預(yù)定規(guī)則設(shè)置的。
17.根據(jù)權(quán)利要求1的方法,其中,所述設(shè)置步驟包括在模板內(nèi)設(shè)置第一和第二容器,以形成所述版面;所述建立步驟包括選擇第一容器的一條邊緣、即第一條邊緣,選擇第二容器的一條邊緣、即第二條邊緣,所述選擇包括使用所述圖形用戶界面顯示對所述第一條和第二條邊緣的選擇;以及所述修改包括修改所述版面,以便通過把內(nèi)容放置到容器中而生成文檔,其中在第一條邊緣和第二條邊緣之間的位置偏移固定的條件下,根據(jù)所放置內(nèi)容的屬性,改變第一容器和第二容器的尺寸和位置中的至少一個。
18.根據(jù)權(quán)利要求17的方法,其中,通過用戶操作至少與由圖形用戶界面內(nèi)所述版面的表示描述的所述對應(yīng)邊緣一致的指示設(shè)備,執(zhí)行用戶發(fā)起的選擇,所述方法還包括在圖形用戶界面內(nèi)顯示一個支柱符號,該支柱符號表示第一條邊緣和第二條邊緣之間的所述位置偏移。
19.根據(jù)權(quán)利要求18的方法,其中,通過所述指示設(shè)備在所述第一容器內(nèi)的選擇性操作,并將所述操作的指示設(shè)備移動到所述第二容器內(nèi),來執(zhí)行所述選擇,由此跨越所述第一條和第二條邊緣,因此所述指示設(shè)備的取消選擇操作將形成所述邊緣之間的所述支柱。
20.根據(jù)權(quán)利要求18的方法,其中,通過所述指示設(shè)備在所述第一容器內(nèi)的第一操作和所述指示設(shè)備在所述第二容器內(nèi)的第二操作,執(zhí)行所述選擇。
21.根據(jù)權(quán)利要求1的方法,其中,所述建立包括在該版面內(nèi)建立一個導(dǎo)向,并且在所述一個容器和該導(dǎo)向之間設(shè)置偏移;以及所述修改包括通過把內(nèi)容放置到所述一個容器內(nèi)而生成文檔來修改版面,其中在保持偏移的條件下,根據(jù)所放置內(nèi)容的屬性,改變所述一個容器的尺寸和位置中的至少一個。
22.根據(jù)權(quán)利要求21的方法,還包括在所述模板內(nèi)設(shè)置另一個容器,以及在所述另一個容器和所述導(dǎo)向之間設(shè)置另一個偏移。
23.根據(jù)權(quán)利要求21的方法,還包括在版面內(nèi)移動導(dǎo)向的步驟。
24.根據(jù)權(quán)利要求21的方法,其中,通過用戶操作與圖形用戶界面內(nèi)所述版面的表示描述的所述導(dǎo)向一致的指示設(shè)備,執(zhí)行對所述偏移的所述設(shè)置,所述方法還包括在圖形用戶界面內(nèi)顯示一個關(guān)聯(lián)符號,關(guān)聯(lián)符號表示所述導(dǎo)向和所述容器之間的關(guān)聯(lián)。
25.根據(jù)權(quán)利要求1的方法,其中,所述設(shè)置包括在模板中設(shè)置第一容器和第二容器,以形成所述版面;以及所述修改步驟包括通過把內(nèi)容放置到第一容器和第二容器中而生成文檔來修改版面,其中,在改變第一容器的至少一個屬性、并且該至少一個屬性與第二容器的對應(yīng)一個屬性同步的條件下,根據(jù)內(nèi)容的屬性,改變第一容器和第二容器的尺寸和位置中的至少一個。
26.根據(jù)權(quán)利要求25的方法,其中,所述內(nèi)容至少包括文本內(nèi)容,第一容器的所述一個屬性是從包括所述文本內(nèi)容的文本大小、行間距和字符間距的組中選擇的。
27.根據(jù)權(quán)利要求1的方法,其中,所述建立還包括在該至少一個容器內(nèi)建立多個欄,并且相鄰的欄由分隔線分開;以及所述修改包括通過把文本內(nèi)容放置到該至少一個容器中,來修改該文檔,以便使一個容器和欄的尺寸是可變的,而分隔線的尺寸是固定的。
28.根據(jù)權(quán)利要求27的方法,其中,所述容器具有可見背景,并且所述設(shè)置所述多個欄還包括在所述容器內(nèi)設(shè)置一個邊界,并且所述欄位于該邊界內(nèi)。
29.根據(jù)權(quán)利要求1的方法,其中,所述建立還包括在至少一個所述容器內(nèi)建立多個欄,并且相鄰欄用分隔線分開;以及所述修改包括修改版面,以便通過把至少文本內(nèi)容放置到所述一個容器中而生成至少一個所述文檔,以便使所述一個容器和欄的尺寸是可變的,而分隔線的尺寸是固定的。
30.根據(jù)權(quán)利要求1的方法,其中,所述建立還包括在所述至少一個容器內(nèi)建立多個欄,以便由兩條邊界和位于所述兩條邊界中心的分隔線構(gòu)成將在其中放置文本的相鄰欄,并且改變所述兩條邊界中一條邊界的位置,以改變相鄰所述欄之間的分隔線的尺寸;以及所述修改包括通過把文本內(nèi)容放置到所述至少一個容器內(nèi)來修改文檔。
31.根據(jù)權(quán)利要求30的方法,其中,通過用戶發(fā)起的在沿所述一個邊界的一個位置處對所述一個邊界的選擇,改變所述一個邊界的所述位置。
32.根據(jù)權(quán)利要求31的方法,其中,通過用戶操作與圖形用戶界面內(nèi)所述版面的表示描述的所述一條邊界一致的指示設(shè)備,并且將所述選擇的邊界移動到所述版面內(nèi)的另一個位置,來執(zhí)行所述選擇。
33.根據(jù)權(quán)利要求1的方法,其中,所述修改包括通過把內(nèi)容放置到容器內(nèi)而生成文檔來修改版面,以便在根據(jù)容器的背景顏色和模板的背景之間的關(guān)系確定容器的內(nèi)部邊距的條件下,改變?nèi)萜鞯某叽绾臀恢弥械闹辽僖粋€。
34.根據(jù)權(quán)利要求1的方法,其中,所述建立包括建立一個容器區(qū)域,所述容器區(qū)域具有固定尺寸和與所述容器相關(guān)聯(lián)的可變位置;以及所述修改包括通過把內(nèi)容放置到容器中而生成文檔來修改所述版面,從而在該容器不違反相關(guān)聯(lián)容器區(qū)域的條件下,根據(jù)所放置內(nèi)容的屬性,改變?nèi)萜鞯某叽绾臀恢弥械闹辽僖粋€。
35.根據(jù)權(quán)利要求34的方法,其中,所述容器區(qū)域為圍繞所述容器的最大區(qū)域。
36.根據(jù)權(quán)利要求34的方法,其中,所述容器區(qū)域為所述容器內(nèi)的最小區(qū)域。
37.根據(jù)權(quán)利要求1的方法,其中,所述至少一個容器具有高度和寬度;所述建立包括將所述高度和寬度中的至少一個設(shè)置為固定尺寸;以及所述修改包括通過把內(nèi)容放置到容器中而生成文檔來修改所述版面,從而在所述高度和寬度中設(shè)置的那一個保持在所述固定尺寸的條件下,根據(jù)所放置內(nèi)容的屬性,改變?nèi)萜鞯牧硪粋€尺寸和位置中的至少一個。
38.根據(jù)權(quán)利要求37的方法,其中,所述設(shè)置包括檢測用戶發(fā)起的、對定義了所述一個高度和寬度的所述容器的邊緣的選擇。
39.根據(jù)權(quán)利要求38的方法,其中,通過用戶操作與圖形用戶界面內(nèi)所述版面的表示描述的所述對應(yīng)邊緣一致的指示設(shè)備,來執(zhí)行用戶發(fā)起的選擇,所述方法還包括在圖形用戶界面中顯示一個符號,該符號表示所述邊緣之間的固定尺寸。
40.根據(jù)權(quán)利要求1的方法,其中,所述設(shè)置包括在模板中設(shè)置一批容器,以形成所述版面;所述建立包括(i)在該版面內(nèi)設(shè)置多個導(dǎo)向,以將所述一批容器分成行和列,行和列構(gòu)成由所述容器定義的單元格,以及(ii)在每個所述導(dǎo)向和每個所述容器的一條對應(yīng)鄰邊之間建立偏移;以及所述修改包括通過把內(nèi)容放置到容器中而生成文檔來修改版面,從而在保持偏移的條件下,根據(jù)放置內(nèi)容的屬性,改變?nèi)萜鞯某叽绾臀恢弥械闹辽僖粋€。
41.根據(jù)權(quán)利要求1的方法,其中,所述設(shè)置包括在模板中的列和行設(shè)置一批容器,以形成所述版面;所述建立包括建立相鄰容器的邊緣之間的偏移,用以規(guī)定所述列和行的邊距尺寸;以及所述修改包括通過把內(nèi)容放置到容器中而生成文檔來修改版面,從而在保持偏移的條件下,根據(jù)所放置內(nèi)容的屬性,改變?nèi)萜鞯某叽绾臀恢弥械闹辽僖粋€。
42.根據(jù)權(quán)利要求41的方法,其中,在第一容器和相鄰列和行中的緊鄰容器之間設(shè)置所述偏移,所述方法還包括在每行每列中的相鄰容器之間設(shè)置多個長度為零的偏移。
43.一種其上記錄有程序的計算機可讀介質(zhì),該程序適合于使計算機執(zhí)行根據(jù)模板生成可變數(shù)據(jù)文檔的版面的過程,所述程序包括用于在模板中設(shè)置至少一個容器以形成所述版面的代碼;用于建立至少一個與該容器的至少一個特征中每個選定特征相關(guān)聯(lián)的約束的代碼;用于使用圖形用戶界面顯示與設(shè)置的容器相關(guān)聯(lián)的所建立約束的代碼;以及用于修改版面以便通過把內(nèi)容放置到多個容器中而生成文檔的代碼,其中在滿足版面內(nèi)的每個約束的條件下,根據(jù)所放置內(nèi)容的屬性,改變所述至少一個容器的至少一維尺寸和所述至少一個容器在所述版面內(nèi)的位置中的至少一個。
44.一種用于根據(jù)模板創(chuàng)建可變數(shù)據(jù)文檔的版面的計算機裝置,所述裝置包括用于在模板中設(shè)置至少一個容器以形成所述版面的裝置;用于建立至少一個與該容器的至少一個特征中每個選定特征相關(guān)聯(lián)的約束的裝置;用于通過使用圖形用戶界面在顯示設(shè)備上顯示與設(shè)置的容器相關(guān)聯(lián)的所建立約束的裝置;以及用于修改版面以便通過把內(nèi)容放置到多個容器中而生成文檔的裝置,其中在滿足版面內(nèi)的每個約束的條件下,根據(jù)所放置內(nèi)容的屬性,改變所述至少一個容器的至少一維尺寸和所述至少一個容器在所述版面內(nèi)的位置中的至少一個。
全文摘要
公開了用于可變文檔印刷的方法和裝置,其中配置了圖形用戶界面,以便允許用戶操作與用于生成可變文檔的模板內(nèi)的內(nèi)容容器相關(guān)聯(lián)的版面規(guī)則。一種方法包括根據(jù)模板創(chuàng)建可變數(shù)據(jù)文檔的版面。該方法首先在模板內(nèi)設(shè)置至少一個容器,以形成版面,然后建立至少一個與該容器的至少一個特征中每個所選特征相關(guān)聯(lián)的約束,其中建立步驟包括對于每個特征,檢測用戶發(fā)起對相應(yīng)特征的選擇。然后修改版面,以便通過把內(nèi)容放置到容器中而生成文檔,其中在滿足該版面內(nèi)的每個約束的條件下,根據(jù)所放置內(nèi)容的一個屬性,改變該至少一個容器的至少一維尺寸和/或該至少一個容器在版面內(nèi)的位置。
文檔編號G06T11/60GK1607522SQ200410076909
公開日2005年4月20日 申請日期2004年9月3日 優(yōu)先權(quán)日2003年10月15日
發(fā)明者安德魯·詹姆斯·羅, 勞倫斯·克魯, 艾倫·韋爾夫·湯尼森, 安德魯·約翰·惠特菲爾德·金, 拉克倫·詹姆斯·帕特里克 申請人:佳能株式會社