自訂書本列印
系統會使用關聯至每個資料類型 (IE XML、GRAPHICS 和 PARTSLIST) 的 XSLT 轉換樣式表資產來為轉譯成 XSL FO 的 XML 內容設定樣式。每個此類資料類型的基礎列印樣式表均稱為 defaultPrint.xsl。
另外還有兩個列印樣式表:一個用於「封面」 (CoverPage.xsl),位於 InS_Data/Work/Applications/PrintServer/Work/Templates 資料夾中,defaultPresentationToc.xsl 用於「目錄」,位於 InS_Data/Work/Applications/PrintServer/Data/Ext/PrintStorage/Templates 資料夾中。
您可以採用數種方式來自訂 PDF 書本列印:
• 透過組態,經由變更列印設定
• 以程式設計方式,透過 BookPrint 委派
• 經由自訂列印轉換樣式表
所有樣式表均包括一個名為 print-customizations.xsl 的自訂樣式表,以便使用標準 XSLT 方法來任意自訂樣式設定,比如新增優先順序較高的範本相符結果來在轉換流程期間掌握主導權。
列印設定組態檔
print-settings.xml 檔案位於 InS_SW/Config/System/Config/Core/Settings 下,可讓您透過組態來控制書本列印的數方面內容。
設定檔案包含以下內容:
• 包括同等檔案 custom-print-settings.xml 來提供自訂支援。
• 頁面幾何定義 (各種頁面大小、頁面定向、邊界,以及分配給每一頁之頁首與頁尾的垂直空間)。
• 各種預設設定、預設文字和預設本地化字串。
在剖析 print-settings.xml 期間會包括同等檔案 custom-print-settings.xml 來新增自訂設定 (適用於自訂程式碼) 及/或重新定義預設列印設定。列印設定檔案的格式只會使用一些慣例且幾乎為自由格式。
含 ID 屬性的設定
除了頁面幾何定義以外,設定只會有一個 ID 屬性而不會受限於特定的元素名稱或標示階層:與設定相關聯的元素必須具有一個名為 id 的屬性。屬性命名方式建議僅採用相應設定以獲得唯一性。因此,為能查詢設定,與列印相關的樣式表會使用一個經過定義的 xsl:key 以便讓任意元素均可與 id 屬性相符:
custom-print-settings.xml 檔案會早在任何預設值之前便透過實體參照包括於其中:
使用某項設定的 id 值經由列印設定檔案查詢該設定時,xsl:key 會以文件順序傳回相符的所有元素,這表示最先傳回的會是 ID 屬性值與預設設定相同的任何自訂元素,因為自訂設定顯示在 ootb 部份之前。
因此,所編寫的樣式表會選取由索引鍵查詢所傳回的第一個元素,以便自訂的設定透過顯示在相應的預設值之前來獲得高於預設值的優先順序。
由於只有元素的 id 值會用來查詢設定,因此可以頗為自由地修改設定的 XML 階層與元素名稱;若有意以自訂元素取代預設設定,則該元素應單純使用與其重新定義之預設設定上所用 id 屬性相同的值。
頁面版面配置定義
每個 pagesizes/page 元素都有用於相應版面配置內容的屬性。所選的頁面定義會透過 XSL FO 套用至轉譯為 PDF 的所有內容 (封面、目錄,以及 PDF IE 除外的所有資料類型)。納入書本列印的 PDF IE 會以其現有的本身頁面大小內嵌至其中。
• 目前定義的頁面大小為縱向與橫向定向的 A4 和 US Letter。每個頁面都有屬性 id (A4、A4L、US 和 USL)。
• 透過父項設定 pagesizes 屬性預設值可設定預設頁面大小 (適用於要轉譯進行列印的 XML 內容),該預設值會參照使用 id 值的頁面元素。
請注意,頁面元素必須具有與元素所定義之頁面幾何相關的屬性 (頁面大小、邊界、頁首/頁尾垂直空間的值),且必須顯示為含有 id 值 pagesizes 之設定的子項。經由僅為您自己的元素提供 id 屬性值 pagesizes 可重新定義預設頁面設定,並可將其屬性值設定為相應頁面元素的 id 值而無須遵守預設的元素階層。不過,既然用意在於使用下拉選單來延伸「書本預覽」對話方塊讓使用者以動態方式選擇頁面大小和定向,以及從列印設定的目前預設標示驅動下拉選單邏輯,對於頁面幾何定義所作的任何自訂都必須遵循相同的慣例,以便讓下拉選單功能可正確運作。
自訂封面頁首內容
封面頁的樣式設定是由樣式表 InS_Data/Work/Applications/PrintServer/Work/Templates/CoverPage.xsl 所執行。封面頁內容會完全衍生自樣式表與其所取得的參數;cover.xml 檔案只是一個預留位置,以便滿足必須在 XML 上套用樣式表的需求。
在 print-settings.xml 檔案中,預設元素 <application id="application"> 會持有顯示在封面和封底右上角的字串:
欲以自訂值取代此字串,只須在 custom-print-settings.xml 檔案中新增具有相同 id 值的元素即可:
由於系統會先選取自訂元素,因此其定義會優先於預設值:
要在封面頁首左側角落處插入的圖像是透過 XSLT 參數 imageUrl 所提供。依預設,BL 會為其指派值 http://localhost.ptc.com:8080/PrintServer/Images/ptc-master-color.png。相應的圖像位於 InS_SW/SW/Applications/e3C.ear/PrintServer.war/Images 底下,其中還包括用於列印的其他預設圖像,比如適用於零件清單、媒體等等的圖示:
透過
imageUrl 傳遞的圖像路徑會經由 BookPrint 委派以動態方式解析,而此企業邏輯可透過程式設計方式進行自訂。若在自訂中取代圖像,您可使用列印設定 ID
cover-image-height 來設定其高度。單位必須為 cm、mm、in、pt、pc、px 或 em。請參閱
https://www.w3.org/TR/2001/REC-xsl-20011015/xslspec.html#section-N8185-Definitions-of-Units-of-Measure。

預設範本會以命名範本 CoverHeader 來發表封面頁首。簡而言之,它會取得參數 imageUrl 的值作為圖像來源、根據設定 cover-image-height 縮放圖像高度,以及在頁首的右側角落處插入設定 application 的值:
或者,如果要自訂進一步封面版面配置,您可以透過自訂樣式表來變更 XSLT 樣式表本身的處理過程。
最後,可使用 XML 型錄來重新定義圖像的 URL 值以便對應至另一個 URI。
本地化字串
封面樣式表會預期在頁首右側角落處插入一個單一字串值。樣式表也可參照預期要本地化的元素。封面和目錄只會使用三個預設的本地化字串:目錄標題、刻意留白頁的模板文字,以及用於產生 PDF 的本地化時間戳記。
慣例是在含有 id 屬性的父項元素中放置本地化內容,該元素的子項持有本地化字串,且每個子項會在屬性 xml:lang 中顯示其相應的語言代碼。因此,您可依照透過其 id 屬性重新定義任何其他設定的相同方式來重新定義預設的本地化字串,不過自訂內容必須遵循以子項元素的形式來呈現本地化字串的慣例:
IE XML 與零件清單內容在持有本地化字串的參照 XLIFF 與 XML 檔案中使用類似的慣例,其中本地化內容是分開位在個別檔案中。由於列印設定只持有一些本地化字串,因此會在列印設定檔案中直接包括相應字串。
使用延伸功能函數解決本地化內容
解析本地化字串時,列印樣式表會透過其 id 屬性值查詢元素,然後使用 XSLT 延伸功能函數來選取它其中一個子項。select-lang() 延伸功能函數會由左至右逐一測試每個參數值,然後傳回其 xml:lang 值符合函數中其中一個參數的第一個子項。使用者的語言偏好設定集 (來自 UI) 會以參數的形式提供給列印樣式表,其中語言代碼會指派給名為 lang1 至 lang6 的變數。
若是如上圖定義的自訂元素具有 id 屬性值 thispageintentionallyleftblank,那麼在 UI 下拉選單中選取德文作為偏好語言時,樣式表將會傳回 xml:lang 值為 de 之子項的內容:
列印日期和時間
本地化的列印日期時間戳記是使用以 ICU 物件庫 (
http://site.icu-project.org/) 作為基礎的 XSLT 延伸功能函數
formattedDate() 所發表。由於列印伺服器的執行位置可能與實際存取位置不同,或伺服器可能並未配置為與使用者位置相同的時區,因此會使用延伸功能函數
utc-timestamp() 將顯示的列印日期與時間選擇為國際標準時間 (UTC)。
formattedDate() 延伸功能函數最多需要三個參數:
1. 日期時間戳記字串 - 可使用各種不同的時間戳記格式提供,但您可以使用採 YYYY-MM-DD 數字格式的日期,比如 "2018-02-26"。
◦ 在此模式中的任何字元若不在 ['a'...'z'] 和 ['A'...'Z'] 的範圍之內,便會被視為以引號括住的文字。比方說,像 ':'、'.'、' '、'#' 和 '@' 這樣的字元即使沒有用單引號括住,也會顯示在產生的時間文字裡。
◦ 單引號可用來「逸出」字母。兩個單引號在同一列時,無論位於以引號括住的序列之內還是之外,均表示一個「真正的」單引號。
若此參數遺失,函數將會套用預設值。
3. 用來指定國家/地區及語言代碼 (例如,"ru" 為俄文、"fr" 為法文,或 "pt-BR" 為巴西葡萄牙文) 的地區設定。若此參數遺失,函數將會套用預設值。