2015-02-06 56 views
2

這可能是使用XSL-FO一個相當普遍的問題:我嘗試建立具有明確規範計費:XSL-FO不同的頁眉/頁腳根據頁面位置

  1. 「主頭」:上每一頁(文字,標誌和條形碼)
  2. 「子頭」:(客戶數據)

    - >在第一頁上這個塊應該是頁面高度

    的約10% - >打開所有其他頁面此塊應該是關於th Ë一半,因此,可以說5%

  3. 「最後頁頁腳」:只是場(合計金額和簽名)

  4. 「每一頁的頁腳」的最後一頁上:只爲印刷日期

  5. 「身體」:計費(每一個位置)的內容應自動之間流動的所有頁眉和頁腳的

所以我知道一些點可以通過屬性來實現頁面位置:

<fo:page-sequence-master master-name="masterSequenceName1"> 
<fo:repeatable-page-master-alternatives> 
    <fo:conditional-page-master-reference master-reference="masterNamePageFirst1" page-position="first"></fo:conditional-page-master-reference> 
    <fo:conditional-page-master-reference master-reference="masterNamePageLast1" page-position="last"></fo:conditional-page-master-reference> 
    <fo:conditional-page-master-reference master-reference="masterNamePageAny" page-position="any"></fo:conditional-page-master-reference> 
</fo:repeatable-page-master-alternatives> 
</fo:page-sequence-master> 

我可以定義區域分別關於該案件,但有這些問題:

  1. 如果第一頁是最後的(只有一個頁面),最後一個頁面頁腳將不會出現。知道頁面位置可以具有「唯一」的值,可能也會爲此設置靜態內容。但是我仍然會有兩塊相同的內容,每當我想編輯這個部分時,我都必須改變它兩次。
  2. 主標題通常可以通過一個區域設置 - 之前引用page-position =「any」(這是標準),但不知何故,這對我不起作用。我只是在不是第一個或最後一個頁面的頁眉。不應該這實際上是頁面位置=「休息」所需的功能?
+0

@讓FrançoisSavard,我不認爲這是你鏈接的問題的重複:這個問題是關於不同(靜態)頁眉/頁腳根據序列中的頁面位置(第一,中,最後),鏈接的是關於具有動態內容的頁眉/頁腳,具體取決於頁面內容。 – lfurini 2015-02-06 23:03:51

回答

5

page-position屬性指出(強調)的定義的說明:

若干這些值可以同時是真實的;例如,'any' 總是如此,當'first'和'last'都爲 時,'only'爲真。因此,有必要訂購 fo:conditional-page-master-references,以便在包含更多測試之前執行至少包含測試 ,這也是正確的。

換句話說,即當選爲構建一個頁面的conditional-page-master-reference第一位,其條件評價爲真,和下面的參考,甚至沒有考慮。

另外要記住很重要的一點是,條件(page-positionodd-or-evenblank-or-not-blank選擇頁面的主人,而不是特定的靜態內容

所以,看你的問題:

1.如果第一頁是最後的(只有一個頁面),最後一個頁面頁腳 將不會出現。

出現這種情況是因爲第一conditional-page-master-reference適用於第一和唯一的頁面,在你的例子中,一個指向"masterNamePageFirst1"其中(我猜的,因爲它是不是在這個問題)有一個區域,之後進入其中僅映射了「每頁頁腳」。

明知頁面位置可以有「才」的價值,成爲了可能, 將設置一個靜態內容這一點,太。但我仍然會有 兩塊相同的內容,並且每當我想編輯這個 部分時,我都必須改變它兩次。

您不必再重複兩次相同的內容:你可以把它變成一個命名模板,並調用模板從兩個靜態內容裏面。

2.主頭通常可通過前區域被設置與 參考頁面位置=「任何」(這是標準的),但不知何故 ,這將不適合我。我只是在 不是第一個或最後一個頁面獲得標題。不應該這實際上是所需的功能 of page-position =「rest」

靜態內容映射到一個區域:該區域檢查是否是在頁面的主人第一個和最後一頁實際存在

編輯:完整FO例如

下面是示出了根據使用fo:markers頁位置僅供/第一/休息/任何頁面和不同頁眉/頁腳既不同頁面幾何一個例子和fo:retrieve-markers

我用FOP 1.1對其進行了測試,結果pdf應該符合您的規格。

<?xml version="1.0" encoding="UTF-8"?> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
    <fo:layout-master-set> 
     <fo:simple-page-master master-name="singlePage" margin="1cm"> 
      <fo:region-body margin-top="5cm" margin-bottom="4cm" background-color="#FFFFAA"/> 
      <fo:region-before extent="4cm" background-color="#AAFFFF"/> 
      <fo:region-after extent="3cm" background-color="#FFAAFF" display-align="after"/> 
     </fo:simple-page-master> 
     <fo:simple-page-master master-name="firstPage" margin="1cm"> 
      <fo:region-body margin-top="5cm" margin-bottom="2cm" background-color="#FFFFAA"/> 
      <fo:region-before extent="4cm" background-color="#AAFFFF"/> 
      <fo:region-after extent="1cm" background-color="#FFAAFF" display-align="after"/> 
     </fo:simple-page-master> 
     <fo:simple-page-master master-name="middlePage" margin="1cm"> 
      <fo:region-body margin-top="2cm" margin-bottom="2cm" background-color="#FFFFAA"/> 
      <fo:region-before extent="1cm" background-color="#AAFFFF"/> 
      <fo:region-after extent="1cm" background-color="#FFAAFF" display-align="after"/> 
     </fo:simple-page-master> 
     <fo:simple-page-master master-name="lastPage" margin="1cm"> 
      <fo:region-body margin-top="2cm" margin-bottom="4cm" background-color="#FFFFAA"/> 
      <fo:region-before extent="1cm" background-color="#AAFFFF"/> 
      <fo:region-after extent="3cm" background-color="#FFAAFF" display-align="after"/> 
     </fo:simple-page-master> 
     <fo:page-sequence-master master-name="allPages"> 
      <fo:repeatable-page-master-alternatives> 
       <fo:conditional-page-master-reference page-position="only" master-reference="singlePage"/> 
       <fo:conditional-page-master-reference page-position="first" master-reference="firstPage"/> 
       <fo:conditional-page-master-reference page-position="rest" master-reference="middlePage"/> 
       <fo:conditional-page-master-reference page-position="last" master-reference="lastPage"/> 
      </fo:repeatable-page-master-alternatives> 
     </fo:page-sequence-master> 
    </fo:layout-master-set> 
    <fo:page-sequence master-reference="allPages"> 
     <!-- 
      header 
     --> 
     <fo:static-content flow-name="xsl-region-before" font-size="90%"> 
      <!-- main header on every page --> 
      <fo:block>Text, logo, barcode</fo:block> 
      <!-- sub header --> 
      <fo:retrieve-marker retrieve-class-name="subHeader" retrieve-position="first-starting-within-page"/> 
     </fo:static-content> 
     <!-- 
      footer 
     --> 
     <fo:static-content flow-name="xsl-region-after" font-size="90%"> 
      <!-- special footer --> 
      <fo:retrieve-marker retrieve-class-name="footer" retrieve-position="first-starting-within-page"/> 
      <!-- common footer on every page --> 
      <fo:block>printing date dd/mm/yyyy</fo:block> 
     </fo:static-content> 
     <!-- 
      document body 
     --> 
     <fo:flow flow-name="xsl-region-body"> 
      <!-- empty blocks with markers for the header --> 
      <fo:block> 
       <!-- sub header for the first page --> 
       <fo:marker marker-class-name="subHeader"> 
        <fo:block>LARGE SUB HEADER</fo:block> 
       </fo:marker> 
      </fo:block> 
      <fo:block> 
       <!-- sub header for the not-first pages --> 
       <fo:marker marker-class-name="subHeader"> 
        <fo:block>small sub header</fo:block> 
       </fo:marker> 
      </fo:block> 
      <!-- normal content --> 
      <!-- 
       YOUR REAL CONTENT GOES HERE 
       (I just put some blocks with page breaks to produce a few pages) 
      --> 
      <fo:block break-after="page">Long sequence with many pages ...</fo:block> 
      <fo:block break-after="page">... bla bla bla ...</fo:block> 
      <fo:block>... the end</fo:block> 
      <!-- empty block with marker for the footer --> 
      <fo:block> 
       <!-- footer for the last page --> 
       <fo:marker marker-class-name="footer"> 
        <fo:block>TOTAL AMOUNT $$$ AND SIGNATURES</fo:block> 
       </fo:marker> 
      </fo:block> 
     </fo:flow> 
    </fo:page-sequence> 
</fo:root> 
相關問題