43489


XSL-FOで柱やノンブルの位置をページごとに変更したいと考えています。  
XSL-FOではどのように記述すればページごとにレイアウトを変更することができるでしょうか？  
例えば、奇数ページは柱やノンブルを左寄せ、偶数ページは右寄せにできればと思います。


CC BY-SA 3.0
2018-04-23T01:55:43.070
43484
2018-04-23T06:04:49.450
25399
question
xsl xsl-fo
XSL-FOでページごとにレイアウトを自動変更したい


XSL-FOでは、各ページのレイアウトの設定は、fo:layout-master-set で行います．  
この中で、左ページ用のレイアウト、右ページ用レイアウトを、fo:simple-page-master で定義します．  
例えば以下のようになります．

[code]

    <fo:layout-master-set>
      <fo:simple-page-master master-name="odd-pagemaster">
        :
      <fo:simple-page-master>
      <fo:simple-page-master master-name="odd-pagemaster">
        :
      <fo:simple-page-master>
    </fo:layout-master-set>
    
[/code]

このように定義したレイアウトをどのように配置するかを、  
fo:page-sequence-master で設定します．  
例えば以下のようになります．

[code]

    <fo:page-sequence-master master-name="PageMaster">
     <fo:repeatable-page-master-alternatives>
       <fo:conditional-page-master-reference master-reference="odd-pagemaster" odd-or-even="even"/>
       <fo:conditional-page-master-reference master-reference="odd-pagemaster" odd-or-even="odd"/>
       </fo:repeatable-page-master-alternatives>
    
[/code]

  
この  
fo:conditional-page-master-reference の odd-or-evenに "even"を指定すると偶数ページに、  
"odd"を指定すると奇数ページに、それぞれ指定された master-reference のレイアウトが適用されます．

> 例えば、奇数ページは柱やノンブルを左寄せ、偶数ページは右寄せにできればと思います。

一般的に、柱やノンブルのような各ページに共通するような内容は、ページのヘッダやフッタに配置します．  
前述の方法で奇数ページ、偶数ページの切り替えはできるようになりますので、それぞれのページのfo:simple-page-
masterの中で定義したヘッダ、フッタの領域の出力時に  
右寄せ、左寄せなどを指定します．  
例えば、

[code]

      <fo:simple-page-master master-name="odd-pagemaster">
       <fo:region-after region-name="afterLeft" extent="10.0mm" ...
    
[/code]

と指定した奇数ページのページマスタのフッタ領域の出力時に

[code]

      <fo:page-sequence...>
        <fo:static-content flow-name="afterLeft">
         <fo:block text-align="end">
           <fo:inline>
              <fo:page-number/>
           </fo:inline>
         </fo:block>
       </fo:static-content>
        :
    
[/code]

とノンブルに text-align="end"と指定すれば、end側に揃えられます．


CC BY-SA 3.0
2018-04-23T06:04:49.450
43489
2018-04-23T06:04:49.450
21153
43484
answer