【文章內(nèi)容簡(jiǎn)介】
reakbeforepage/xsl:attribute?end if? 固定行分頁,需要借助IF + 上面的breakafter或者breakbefore,在行?end foreach?前,如下語句控制每頁5行:?if:position() mod 5 =0?xsl:attribute name=breakbeforepage/xsl:attribute?end if?. 頁眉頁腳 標(biāo)準(zhǔn)的頁眉頁腳,即單個(gè)頁眉頁腳,使用Word的功能即可。 擴(kuò)展的頁眉頁腳,可使用?start:body??end body?把主體部分“框”起來,凡是在這兩個(gè)標(biāo)記之外的東西,都將被當(dāng)作頁眉頁腳。. 頁碼和頁數(shù) 可以用Word的“自動(dòng)圖文集”,在任意地方插入頁碼,這個(gè)是“自然頁碼”。 如果在某種情況下想讓頁碼從特定值開始,比如新的組頁碼重新編號(hào),則需要借助命令,如在foreach后寫:?initialpagenumber:1?。這里的“1”,實(shí)際上也可以用數(shù)據(jù)文件中的XML元素來替換。. 末頁、奇偶頁不同 Word可在頁眉頁腳部分實(shí)現(xiàn)首頁不同或奇偶頁不同,沒法實(shí)現(xiàn)末頁不同,即使借助代碼控制,實(shí)際實(shí)現(xiàn)的也是末頁布局不同,而非“頁眉頁腳”不同。?start@lastpage:body??end body?報(bào)表本身僅有一頁時(shí),則用?start@lastpagefirst:body??end body?例子“Advanced\Last Page”,注意布局需要獨(dú)立成頁,即之前需要加分頁符。 以偶數(shù)頁結(jié)束,主要目的是顯示偶數(shù)頁頁眉頁腳?section:forcepagecount。’endonevenlayout’?如果僅顯示空白頁,則用?section:forcepagecount。’endoneven’? 以奇數(shù)頁結(jié)束,主要目的是顯示奇數(shù)頁頁眉頁腳?section:forcepagecount。’endonoddlayout’?如果僅顯示空白頁,則用?section:forcepagecount?!痚ndonodd’?. 使用多媒體元素. Word功能可以使用公式、繪圖(如組織結(jié)構(gòu)圖、線條等)、藝術(shù)字、剪貼畫。如果想通過代碼在有限范圍內(nèi)控制這些對(duì)象,比如顯示文字、縮放、旋轉(zhuǎn)、移動(dòng)、復(fù)制,可參考User Guide中的“Drawing, Shape and Clip Art Support”。. 復(fù)選框插入復(fù)選框窗體域,因其選中代表True,不選代表False,需要我們輸入條件表達(dá)式,如:。不過運(yùn)行后表現(xiàn)為菱形。. 下拉框插入下拉框窗體域,定義下拉框的元素,并同樣在“自己鍵入”內(nèi)輸入需要引用的XML標(biāo)記如%AREA_INDEX%。這里要注意元素的順序,因?yàn)槭怯庙樞蛱?hào)和運(yùn)行時(shí)的值進(jìn)行匹配的,也就是XML數(shù)據(jù)中,AREA_INDEX是自然數(shù)2……。. 超鏈接可以直接利用Word功能設(shè)置超鏈接,也可以在鏈接地址中,全部或部分引用XML數(shù)據(jù)文件中的標(biāo)記,做到動(dòng)態(tài)超鏈接:{SUPPLIER_SITE_URL}或者:8000/OA_MEDIA/{CURRENCY_CODE}.gif. 圖片可以直接利用Word功能插入圖片,也可以僅將該圖片當(dāng)作占位圖,在圖片的“設(shè)置圖片格式”的網(wǎng)站標(biāo)簽頁內(nèi)的“可選文字”,輸入真正的圖片地址: 來自網(wǎng)站的圖片:url:{‘://localhost:8000/OA_MEDIA/’}。 來自EBS的圖片:url:{‘${OA_MEDIA}/’}。 動(dòng)態(tài)指定地址:url:{IMAGE_URL}。 動(dòng)態(tài)拼接的地址:url:{concat(SERVER,’/’,IMAGE_DIR,’/’,IMAGE_FILE)}。 直接來自內(nèi)容為BLOB的XML元素,僅用于“Data Templates”:fo:instreamforeignobject contenttype=image/jpgxsl:valueof select=IMAGE_ELEMENT//fo:instramforeignobject. 圖表可使用Template Builder向?qū)Р迦雸D表,類型有:條形圖垂直、條形圖水平、餅圖、線形圖。向?qū)傻拇a,可在圖片的“設(shè)置圖片格式”網(wǎng)站標(biāo)簽頁內(nèi)的“可選文字”里看到,我們可以做進(jìn)一步修改。. 其它常用語法. 字段引用在前面的窗體域中,我們直接引用XML文件中的Tag標(biāo)記,如?QUANTITY?。這種對(duì)XML元素的引用,是相對(duì)當(dāng)前層次的組來說;如果上層組中,有個(gè)同名Tag,就要通過類似“相對(duì)路徑”的方式引用,如?../QUANTITY?。這里的“../”個(gè)數(shù),不是布局中的相對(duì)層測(cè)個(gè)數(shù),而是XML數(shù)據(jù)文件中的相對(duì)層次!轉(zhuǎn)換為XSLFO后,真正的語法分別是:xsl:valueof select=.//QUANTITY xdofo:fieldname=QUANTITY / xsl:valueof select=../../QUANTITY xdofo:fieldname=../../QUANTITY / . 函數(shù)引用 行號(hào),準(zhǔn)確講是分組中記錄順序號(hào):xsl:valueof select=position()/ 總行號(hào):xsl:valueof select=last()/更多函數(shù)請(qǐng)參考XSL手冊(cè)。. 分組、排序、重新分組 可以通過向?qū)瓿煞纸M、排序:?foreach:XML元素??sort:XML元素?!痑scending’。datatype=‘text’??sort:XML元素?!痑scending’。datatype=‘text’?……?end foreach? 數(shù)據(jù)重新分組,不再限制于原始XML數(shù)據(jù)文件的層次關(guān)系數(shù)據(jù)為“Sales Report”,重新按年、月分組,理解如下實(shí)例,需要一點(diǎn)“想象力”:GYEARGMONTH SalesCategorySales (in thousand USD)FINDUSTRY999 EEE. 變量、參數(shù) 模版變量和普通的編程語言類似,模版中也可以使用變量,參考“累計(jì)數(shù)”部分。 模版參數(shù),只能通過API調(diào)用傳入,不能用于EBS并發(fā)請(qǐng)求聲明參數(shù):xsl:param name=P_NAME xdofo:ctx=begin/用$引用參數(shù):?if:AMOUNT$P_NAME?傳入?yún)?shù):參考API部分。. 空值判斷 有標(biāo)記,值不空?if:Element_Name!=?Somethine Here?end if? 有標(biāo)記,值空?if:Element_Name and Element_Name=?Somethine Here?end if? 無標(biāo)記?if:not(Element_Name)?Somethine Here?end if?. 數(shù)字和日期格式可以使用Word窗體域中的格式化功能,也可以在窗體域中輸入XMLP的格式化命令,這兩者不能同時(shí)使用,建議使用前者;后者語法參考User Guide“Number and Date Formatting”。. 理解上下文上下文代表XMLP語句的作用域,比如一個(gè)If語句,到底是針對(duì)一個(gè)單元格、一行、還是一列。在前面的介紹中,我們已經(jīng)用過section、column、row,下面列出XMLP的所有上下文及其含義:上下文含義等價(jià)XSLFOsection類似Word中節(jié)的概念,不同Section的頁碼將重新編號(hào)、頁眉頁腳也重新開始,通常用于foreach@section,使新組分頁column作用于表格中的整列,通常用來格式化列、動(dòng)態(tài)顯示列、交叉報(bào)表列cell僅作用于表格中的一個(gè)單元格,通常與column配合使用,實(shí)現(xiàn)交叉報(bào)表block作用于表格中的一個(gè)單元格或者RTF中的一個(gè)自然段fo:blocksinlineThe context will bee the single statement inside an block. This context is used for variables.fo:inlineincontextThe statement is inserted immediately after the surrounding statement. This is thedefault for ?sort? statements that need to follow the surrounding foreach asthe first element.inblockThe statement bees a single statement inside an fo:block (RTF paragraph). This istypically not useful for control statements (such as if and foreach) but is usefulfor statements that generate text, such as calltemplate.inlinesThe statement will affect multiple plete inline sections. An inline section is text that uses the same formatting, such as a group of words rendered as bold.See If Statements in Boilerplate Text, page 258.beginThe statement will be placed at the beginning of the XSL stylesheet. This is required for global variables. See Defining Parameters, page 281.endThe statement will be placed at the end of the XSL stylesheet.. 高級(jí)布局. 動(dòng)態(tài)列動(dòng)態(tài)列的含義是:設(shè)計(jì)時(shí)不知道有多少列,運(yùn)行時(shí)XML數(shù)據(jù)文件中有確切的列數(shù)。如例子“Advanced\Dynamic Columns\TestScore”:TestScoreRow Header and SplittingColumn Header and GroupsContent and Splitting標(biāo)題(必需):?splitcolumnheader:TestScore??TestScoreRange?列寬(可選):?splitcolumnwidth:@width?數(shù)據(jù)(必需):?splitcolumndata:TestScore? ?NumOfStudents?. CrossTab交叉報(bào)表也叫矩陣報(bào)表、數(shù)據(jù)透視表,需要實(shí)現(xiàn)行列轉(zhuǎn)換、數(shù)據(jù)匯總,實(shí)現(xiàn)機(jī)制和“動(dòng)態(tài)列”完全不同,主要用重新分組的功能。我們使用“Sales Report”的數(shù)據(jù),構(gòu)建如下交叉報(bào)表,注意和普通重新分組的差異之處:IndustryHEADERYEARfor:INDUSTRYsum(sales)endHEADER:?horizontalbreaktable:1?YEAR:?foreachgroup@column:ROW。YEAR??YEAR??end foreachgroup?for:?foreachgroup:ROW。INDUSTRY?INDUSTRY:?INDUSTRY?sum(sales):?foreachgroup@cell:currentgroup()。YEAR??sum(currentgroup()//SALES)??end foreachgroup?end:?end foreachgroup?,可以在Template Builder中通過向?qū)瓿?,不需要手工寫代碼。. 屬性控制對(duì)文檔的控制,可以在服務(wù)器端統(tǒng)一配置,參見“服務(wù)器端配置”,也可以在模版級(jí)別進(jìn)行控制,比如控制生成的PDF文件密碼、字體路徑,可以通過Word的“文件/屬性”設(shè)置相關(guān)參數(shù):. 嵌套模板/子模板嵌套模板是在模板中定義一個(gè)子模板,然后在需要的地方調(diào)用它,如在頁眉頁腳中調(diào)用它,這樣也可以突破頁眉和頁腳中不允許使用窗體域的限制。 定義子模板子模板標(biāo)記之間可以使用任何的標(biāo)記和內(nèi)容,和模板的主體部分沒有任何區(qū)別。?template:internaltemplate YOUR_TEMPLATE_NAME?……?end template? 調(diào)用子模板?call:internaltemplate YOUR_TEMPLATE_NAME?. Word目錄(TOC,Table of Content)Word有自動(dòng)產(chǎn)生目錄的功能,那么在模版中如何實(shí)現(xiàn)呢?按照User Guide中的說明,TOC還是沒法測(cè)試成功。. PDF標(biāo)