- 注意事項
- タグの省略記述
- 文字の装飾
- 出力文字数の指定
- 改ページ区切り位置の指定
- テキスト複数行型項目の出力
- 数値型項目の出力
- 選択肢型(複数選択)項目の出力
- 年齢型項目の出力
- データの所有者氏名を出力する方法
- 空欄行の表示制御
- xsl:for-each要素でループ処理をする
注意事項
本頁では過去事例を元に、スマート帳票のテンプレートファイルの記述例をご紹介します。
但し、記述内容の正確性、正当性を保証するものではございません。
また、XSL-FO文書に関するお問合せはサポート対象外となりますので、予めご了承ください。
タグの省略記述
XML・XSL文書は、基本的には開始タグ、内容、終了タグの形式で構成されます。
基本形式:<要素名(開始タグ)>内容</要素名(終了タグ)>
但し、要素の内容がない場合は以下の様な省略形式で記述することも可能です。
省略形式:<要素名/>
文字の装飾
文字サイズの変更、文字色の指定、下線を付けるなど、XSLファイルに記述することで文字の装飾を行うことができます。
以下は文字装飾の一部の事例です。
■フォントを指定する
font-family="font名称"で指定します。
ページ内容のフォントを統一して指定したい場合、ページ内容を定義するfo:page-sequenceで指定します。
<fo:page-sequence font-family="IPA Gothic"> ・・・ページ内容・・・ </fo:page-sequence> |
以下は、特定のブロックコンテナ内のみ指定する場合のXSLファイル記述例です。
<fo:block-container> <fo:block font-family="IPA Gothic">出力内容</fo:block> </fo:block-container> |
■文字色を指定する
color="カラーコード"で指定します。
カラーコードには、16進数のカラーコードの値を記述します。
以下は、文字色を黒に指定する場合のXSLファイル記述例です。
<fo:block-container> <fo:block color="#000000">出力内容</fo:block> </fo:block-container> |
尚、閲覧者が利用しているOSやブラウザによって色の見え方が異なる場合がありますので、WEBセーフカラーをご利用頂くことをお勧めします。
■背景色を指定する
background-color="カラーコード"で指定します。
以下は、背景色を赤に指定する場合のXSLファイル記述例です。
<fo:block-container> <fo:block background-color="#FF0000">出力内容</fo:block> </fo:block-container> |
■文字に下線を付ける
text-decoration="underline"で指定します。
以下は、特定の文字に下線を付ける場合のXSLファイル記述例です。
<fo:block> <fo:inline text-decoration="underline">出力内容</fo:inline> </fo:block> |
出力文字数の指定
スマート帳票のレイアウトを維持するために、特定の項目には出力文字数の制限をかけたい場合があります。
substring関数を利用すると、文字列の中の指定開始位置から数えて指定した文字数分だけを出力することができます。
以下は、レジュメの「職務経歴」というテキスト複数行型項目の内容を、最初の文字から100文字まで出力する場合のXSLファイル記述例です。
<fo:block> <xsl:value-of select="substring(Resume.P_CarrierSummary,0,101)"/> </fo:block> |
改ページ区切り位置の指定
例えば、求人票が「おすすめポイント」「求人案件の詳細」「求人企業情報」といったカテゴリごとに分かれて表組みされているような場合、表の途中で次のページに飛んでしまうと見にくく見栄えも良くありません。
左:表の途中で改ページされてしまった場合 右:表と表の間で改ページされた場合
表の途中で改ページされずに、1つの表が必ず1ページ内に表示される様に設定する場合、keep-together属性を指定します。
keep-together属性で、段落や図形、表などのまとまったブロックを1ページ内に表示することで、改ページの区切り位置を調整することができます。
以下は、1つの表を1ページ内に表示されるように指定する場合のXSLファイル記述例です。
<fo:table table-layout="fixed" keep-together.within-page="always"> <fo:table-column column-number="1" column-width="40mm"/> <fo:table-column column-number="2" column-width="100mm"/> <fo:table-body> <fo:table-row> <fo:table-cell><fo:block>項目</fo:block></fo:table-cell> <fo:table-cell><fo:block>内容</fo:block></fo:table-cell> ・・・表の内容を記述・・・ </fo:table-row> </fo:table-body> </fo:table> |
テキスト複数行型項目の出力
テキスト複数行型項目に入力されている文章の改行を保持したままスマート帳票に出力したい場合には、XSLファイルでの指定が必要です。
指定していない場合、文章が改行されずに出力されます。
改行を反映させたい場合、linefeed-treatment="preserve"を指定します。
以下は、PORTERSのJOB階層の「事業内容・会社の特長」というテキスト複数行型項目を出力する場合のXSLファイル記述例です。
<fo:block linefeed-treatment="preserve"> <xsl:value-of select="Job.P_IndustrySummary"/> </fo:block> |
数値型項目の出力
何も指定せずにPORTERSに登録されている数値そのままを出力した場合、桁区切りなど何もないシンプルな数値を出力します。
見やすくしたい場合は、出力する桁数、小数点の位置、桁区切りの表示などをformat-numberで指定することが可能です。
以下は、JOBの「年収下限」項目を、3桁区切りのカンマを入れて出力する場合のXSLファイル記述例です。
<xsl:value-of select="format-number(Job.P_MinSalary,'#,###')"/> |
選択肢型(複数選択)項目の出力
複数選択が可能なチェックボックスや、サーチボックス(複数選択)形式の選択肢型項目の場合で、区切り文字を入れたり、任意の並び順を指定したい場合にはXSLファイルで指定します。
※PORTERS業務画面上の並び順を自動反映させることはできません。
■区切り文字を付加する(並び順は順不同)
xsl:for-each で繰り返し処理を行い、xsl:if を利用して1つ目の選択肢はそのまま出力、2つ目以降の選択肢の頭に「、」を付加して出力することができます。
以下は、レジュメの「希望職種」というチェックボックス形式の項目を出力する場合のXSLファイル記述例です。
<xsl:for-each select="Resume.P_ExpectJobCategory/*"> <xsl:if test="position()=1"> <xsl:value-of select="."/> </xsl:if> <xsl:if test="position()!=1"> 、<xsl:value-of select="."/> </xsl:if> </xsl:for-each> |
■任意の並び順で出力する
繰り返し処理を行うのではなく、xsl:if を利用して個々の選択肢の表示非表示を制御し、順番に記述することにより、任意の並び順で選択肢を出力することができます。
以下は、JOBの「勤務地」というチェックボックス形式の項目を出力する場合のXSLファイル記述例です。
尚、区切り文字の代わりに、1つ1つの文字列の後にスペースが出力されるように、「北海道」などの文字列の後ろに全角スペースを記述しています。
<fo:block> <xsl:if test="Job.P_Area/Option.P_Hokkaido != ' ' ">北海道 </xsl:if> <xsl:if test="Job.P_Area/Option.P_Aomori != ' ' ">青森 </xsl:if> ・・・必要な行数だけ記述・・・ <xsl:if test="Job.P_Area/Option.P_Okinawa != ' ' ">沖縄 </xsl:if> <xsl:if test="Job.P_Area/Option.P_Foreign != ' ' ">海外</xsl:if> </fo:block> |
年齢型項目の出力
PORTERSの年齢型項目は、生年月日をデータとして登録し、PORTERS画面表示時に年齢を自動計算表示していますが、年齢情報はデータとしては登録されていません。
そのため、スマート帳票出力時に年齢も出力させたい場合は、生年月日情報をもとに計算して出力する必要があります。
以下は、現在日時から生年月日を引いて年齢を出力する場合のXSLファイル記述例です。
尚、現在日時を用いて計算するためには、XMLファイルに現在日時を示す<CurrentDateTime>を定義しておく必要があります。
<xsl:value-of select="floor(( concat( substring(/Resume/System/CurrentDateTime,1,4), substring(/Resume/System/CurrentDateTime,6,2), substring(/Resume/System/CurrentDateTime,9,2) ) - concat( substring(Resume.P_DateOfBirth,1,4), substring(Resume.P_DateOfBirth,6,2), substring(Resume.P_DateOfBirth,9,2) ) ) div 10000)" /> |
※見やすくするために改行を用いて記載しています。
データの所有者氏名を出力する方法
【xml】
<Job.P_Owner> <User> <User.P_Name/> </User> </Job.P_Owner> |
【xsl】
<xsl:value-of select="Job.P_Owner/User/User.P_Name"/>
|
空欄行の表示制御
帳票を出力する際に、帳票出力対象の項目にデータが入力されておらず、出力した結果、空欄行が発生してしまうことがあります。
xsl:ifを利用し、データがある場合のみ帳票に出力し、データがない場合には出力しないといった制御が可能です。
以下は、JOBの「勤務地」と「勤務地(詳細)」を出力する際に、「勤務地(詳細)」についてはデータがある場合にのみ出力し、空欄の場合には該当行全体を出力しないよう設定したXSLファイル記述例です。
<fo:table table-layout="fixed" keep-together.within-page="always"> <fo:table-column column-number="1" column-width="40mm"/> <fo:table-column column-number="2" column-width="100mm"/> <fo:table-body> <fo:table-row> <fo:table-cell><fo:block>勤務地</fo:block></fo:table-cell> <fo:table-cell><fo:block><xsl:value-of select="Job.P_Area"/></fo:block></fo:table-cell> </fo:table-row> <xsl:if test='Job.P_AreaSummary != "" '> <fo:table-row> <fo:table-cell><fo:block>勤務地詳細</fo:block></fo:table-cell> <fo:table-cell><fo:block><xsl:value-of select="Job.P_AreaSummary"/></fo:block></fo:table-cell> </fo:table-row> </xsl:if> </fo:table-body> </fo:table> |
xsl:for-each要素でループ処理をする
帳票を一括出力する際に、同じ項目の繰り返しの処理を指定する xsl:for-each要素を入れていないと、「java.lang.NullPointerException」というエラーが出てしまいます。
帳票一括出力の予定がなくとも、予め入れておくことをお薦め致します。
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="Job"> <fo:root> <!-- ページレイアウト定義 --> <fo:layout-master-set> <!--次の行でページの余白、用紙の大きさを変更できます--> <fo:simple-page-master master-name="Newjob" page-height="297mm" page-width="210mm" margin-right="20mm" margin-left="20mm" margin-bottom="20mm" margin-top="20mm"> <fo:region-body margin="0mm" /> <fo:region-before extent="0mm" /> <fo:region-after extent="0mm" /> <fo:region-start extent="0mm" /> <fo:region-end extent="0mm" /> </fo:simple-page-master> </fo:layout-master-set> <!-- ページ内容 --> <xsl:for-each select="Item"> <fo:page-sequence font-family="IPA Gothic" master-reference="Newjob"> |