XPS Documents
- documents which, in turn, bind a collection of fixed pages. All page markings are specified with
<Glyphs>
or<Path>
elements on the fixed page. These elements can be grouped within one or more<Canvas>
elements. Page markings are positioned by real-number coordinates in the coordinate space of the fixed page. The coordinate space can be altered by applying a render transformation. - 所有的頁面標記都是用在固定頁面上的
<Glyphs>
or<Path>
符號或元素指定的.這些元素可以在一個或多個“canvas”元素中進行分組,頁面標記是由固定頁面的坐標空間中的實數坐標定位的。可以通過應用渲染轉換來改變坐標空間。
Chapter 0. XML 樹結構
- XML 文檔形成了一種樹結構,它從"根部"開始,然后擴展到"枝葉"。
- XML 文檔必須包含根元素。該元素是所有其他元素的父元素。
- XML 文檔中的元素形成了一棵文檔樹。這棵樹從根部開始,並擴展到樹的最底端。
- 所有的元素都可以有子元素:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<child>
<subchild>.....</subchild>
</child>
</root>
- 父、子以及同胞等術語用於描述元素之間的關系。父元素擁有子元素。
- 相同層級上的子元素成為同胞(兄弟或姐妹)。
- 所有的元素都可以有文本內容和屬性(類似 HTML 中)。
Chapter 1. xps文檔格式
一個xps文件其實是一個壓縮包,將文件擴展名改為.zip就是一個壓縮包,然后解壓就可以得到一系列文件,如下圖:
- 其中,有FixedDocumentSequence根部的負載(payload)是fixed payload,FixedDocumentSequence指向FixedDocument,而FixedDocument指向FixedPage,一個xps中可以有多個fixed payload
- 通過the XPS Document StartPart relationship查找包中標識fixed payload根部的FixedDocumentSequence 部分,然后FixedDocumentSequence指向FixedDocument,而FixedDocument指向FixedPage。
- 所有要呈現的內容都必須包含在XPS Document中。
- FixedPage 包含頁面呈現的所有可視元素內容,每一頁都有固定的
大小和方向。頁面上視覺元素的布局由固定的頁面標記決定。
這適用於圖形(graphics)和文本(text),它們用精確的排版來表示。頁面的內容使用一組強大但簡單的視覺原語來描述。 - 每個FixedPage部分使用
<Path>
和<Glyphs>
元素(使用各種畫筆元素)和<Canvas>
分組元素指定<FixedPage>
元素中的頁面內容。<ImageBrush>
和<Glyphs>
element(或其子元素或后代元素)可以通過URI引用圖像部分或字體部分。它們應該通過相對URI引用這些部分。
1.1 推薦命名方式
- FixedDocumentSequence命名為.fdseq格式,如: “/FixedDocSeq.fdseq”
- FixedDocument命名為 /Documents/n/*.fdoc,其中n代表fixed document sequence里的序號,如:/Documents/3/FixedDocument.fdoc
- FixedPage “/Documents/n/Pages/” 是前三部分a, “.fpage” 是后邊部分的擴展名. n 代表包含包含此頁面的fixed document。如:/Documents/2/Pages/3.fpage”表示
- Resource
- 特定於特定文檔的資源命名為:/Documents/n/Resources/,其中n是特定的固定文檔。
- 要跨文檔共享的資源應該以段“/Resources/”開頭,並且應該有一個全局惟一標識符的最終段,然后對該資源進行適當的擴展 如:“/Resources/63B51F81-C868-11D0-999C- 00C04FD655E1.odttf”.
下邊的XPS Document包含兩個FixedDocument parts :
1.2 標記模型
- XPS文檔標記是一種基於xml的標記語言,使用元素、屬性和名稱空間。
- XPS文檔標記的模式只包含元素及其屬性、注釋和空格。不允許在標記中插入任意字符數據。
- 固定頁面標記是使用元素和屬性表示的,基於內容和屬性的高級抽象模型。
- 一些固定的頁面元素可以保存“內容”,這些內容被表示為子元素。
- 屬性可以表示為屬性或子元素。
- XPS文檔標記還使用資源和資源字典,它們允許元素共享屬性值。
- 一些固定的頁面屬性是可組合的,這意味着頁面標記效果是通過將給定元素的屬性值與其父元素和父元素的屬性值相結合來確定的。例如:
<Path>
元素的不透明度值為0.5,嵌套在<Canvas>
元素中,不透明度值為0.5,因此在呈現時<Path>
元素的不透明度為25%。 - 用於呈現頁面標記元素的坐標空間也是可組合的。默認情況下,元素以1/96的單位在一個坐標空間中呈現。一個特定元素的有效坐標空間是通過依次應用每個父元素和祖先元素的Transform 或RenderTransform屬性指定,從最外層到最內層,包括元素自身的仿射矩陣變換而創建的。
- 一些屬性值也可以使用子元素來表示,以描述屬性值。元素名派生自父元素名和屬性名的組合,由點(.)字符分隔。
- 子屬性元素的順序非常重要:它們必須出現在父元素的任何內容之前,並且必須出現在模式[M2.72]中指定的序列中。
- 在指定
canvas
的Clip
和RenderTransform
屬性時,二者必須在canvas
的任何path
和glyphs
內容之前出現。如下:
- xml:lang是
<FixedPage>
元素需要的,可以與<Canvas>
,<Path>
,和<Glyphs>
元素一起使用。它在任何其他固定頁面標記元素上都無效。
Chapter 2. Text
- 共享相同特征的文本運行由
<Glyphs>
元素表示,<Glyphs>
元素上的屬性集允許完整地描述字形特征,如填充(fill )和不透明度(opacity),以及剪切(clip)信息。元素<Glyphs>
允許指定Unicode字符串,並支持雙向和垂直文本。
<FontRenderingEmSize>
:描述字大小。<FontUri>
:<OriginX>
:指定運行中第一個字形的x坐標,單位為有效坐標空間。<OriginY>
:指定運行中第一個字形的y坐標,單位為有效坐標空間。<IsSideways>
:表示一個字形在它的一邊轉動,原點被定義為未轉動字形的頂端中心。<Indices>
:呈現字形運行的字形索引及其屬。
indices有如下幾種表現形式:
<UnicodeString>
:包含由元素所呈現的文本字符串. <StyleSimulations>
:指定一個樣式模擬。有效值為None,斜體模擬,BoldSimulation, BoldItalicSimulation。<RenderTransform>
:為<Glyphs>
元素指定的字形運行建立一個新的坐標系。渲染變換(render transform)影響<clip>
、不透明度<opacity>
、<fill>
、<OriginX>
、<OriginY>
單個符號的實際形狀和前向寬度aw。渲染轉換還會影響Indices屬性中指定的字體大小和值。<Clip>
: 限制元素的呈現區域。只有位於clip區域內的<Glyphs>
元素的部分(甚至是部分剪切的字符)在頁面上產生標記。<Opacity>
:定義字形元素的一致透明度。值范圍從0(完全透明)到1(完全不透明),包括在內。此范圍之外的值無效.
- 如果沒有指定Fill屬性,則
<Glyphs>
元素沒有可見效果。 <Glyphs>
元素的一些屬性是可組合的,也就是說,呈現給頁面的標記是由屬性和<Glyphs>
元素的父元素和祖先元素的所有相似屬性組合而成的。- 每個字形都定義了一些標准,以指定它如何與其他字形對齊。
前向寬度aw
- 前向寬度指示后續字形的位置,相對於當前字形的來源。按照IsSideways和BidiLevel屬性定義的前進方向進行測量。基礎字形通常有一個非零前進寬度,組合字形有一個零前進寬度。
- aw是用的fontemsize的百分比來衡量的。aw是一個實值。
為了避免舍入誤差的累積,必須將前進值計算為后續字形的精確非圓原點減去前面字形的計算(即四舍五入)aw。
chapter 3 <path>
3.1 the <Path>
element.
- Vector graphics are created using the
element. - The description of the geometric area of the path (the geometry) is described by the Data property
3.2 <Path>
元素的屬性
- Data: Describes the geometry of the path.
- RenderTransform :Establishes a new coordinate frame for all attributes of the path and for all child elements of the path, such as the geometry defined by the <Path.Data> property element.
- The
element is the sole means of adding vector graphics and images to a fixed page. It defines a single vector graphic to be rendered on a page. Some properties of the element are composable, meaning that the markings rendered to the page are determined by a combination of the property and all of the like-named properties of its parent and ancestor elements. <Path>
元素是將矢量圖形和圖像添加到固定頁面的唯一方法。它定義了一個在頁面上呈現的單一向量圖形。元素<Path>
的一些屬性是可組合的,這意味着呈現給頁面的標記是由屬性的組合和它的父元素和祖先元素的所有同名屬性決定的。- The Data property contains a geometric description of the area on which to apply a given effect. This description can take one of two forms: verbose or abbreviated. In the verbose form, the geometry is described in the
<Path.Data>
property element using the elements described in Section 4.2, “Geometries and Figures,” on page 61. In abbreviated form, it is described using abbreviated syntax in the Data attribute. < Data >
屬性包含對應用給定效果的區域的幾何描述。這個描述可以采用兩種形式之一:冗長或縮寫。在詳細的形式中,幾何是在<路徑中描述的。屬性元素,使用第4.2節中描述的元素“幾何圖形和數字”,在第61頁。在縮寫形式中,它在Data屬性中使用縮寫語法進行描述。要了解更多信息,請參見第74頁的“縮寫幾何語法”。- A single path geometry may be used in the Data property of the
element to describe its overall geometry. A path geometry may also be used in the Clip property of the <Canvas>
,<Path>
, or<Glyphs>
elements to describe a clipping region. - 單個路徑幾何可以用於描述其整體幾何形狀的
<Path>
元素的Data屬性。路徑幾何也可以用於描述剪切區域的<Canvas>
,<Path>
, or<Glyphs>
元素的Clip屬性。
小結
- 這是有關xps文檔的一部分內容,簡述了一些xps入門級的零碎知識點,主要包含xml樹結構,以及節點之間的關系以及接待你屬性等,還有許多沒讀到沒加進來的,后續讀完原文會繼續完善的。