asciidoctor-fopubで生成するPDFのヘッダとフッタをカスタマイズする
はじめに
asciidoctor-fopubで生成されるPDFの"Table of Contents"などを日本語化する - Qiitaをさらに発展させて、各ページのヘッダとフッタをカスタマイズしてみました。
ここでは例としてヘッダに会社のロゴ画像、フッタにコピーライト表示を追加します。
サンプルPDFとスクリーンショット
サンプルPDF: http://1pac.github.io/asciidoctor_template/embed_image_sample.pdf
サンプルレポジトリ: https://github.com/1pac/asciidoctor_template
変更内容の説明
asciidoctor/asciidoctor-fopubに含まれいているsrc/dist/docbook-xsl/フォルダをコピーして修正していきます。
asciidoctor-fopubで生成されるPDFの"Table of Contents"などを日本語化する - Qiitaに書いた修正は適用済みとして、その続きを説明します。
fo/docbook.xslをローカルにインストールして差し替え
src/dist/dookbook-xsl/fo-pdf.xslを見ると、以下のように外部のXSLTスタイルシートをインポートしています。
<xsl:import href="http://docbook.sourceforge.net/release/xsl/current/fo/docbook.xsl"/>
このファイルを見るとさらにそこから多数のxslファイルをインポートしています。
探してみると、DocBook - Browse /docbook-xsl at SourceForge.netからダウンロードできるようです。最新版の docbook-xsl-1.78.1.tar.bz2 をダウンロードして展開します。
その後、ローカルのdocbook.xslを使用するように切り替えます。
pagesetup.xslでヘッダにロゴ、フッタにコピーライト表示を追加
変更内容はヘッダにロゴ、フッタにコピーライトを追加 · ec5c74a · 1pac/asciidoctor_templateでご覧になれます。
フッタにコピーライト追加
XSLTスタイルシートのファイルを見ていくと、標準でページ下部の中央にページ番号を出力しているのは以下の箇所らしいということがわかりました (<fo:page-number/>
の後にテキストを追加してPDFを生成してみてテキストが追加されることで確認しました)。
<xsl:when test="$double.sided = 0 and $position='center'">
<fo:page-number/>
</xsl:when>
そこで、以下のように <fo:block>
を追加してみるとフッタの左側にテキストが追加されました。
<fo:block>
<xsl:choose>
<xsl:when test="$double.sided = 0 and $position='left'">
Copyright 2014 1PAC. INC. All Right Reserved.
</xsl:when>
</xsl:choose>
</fo:block>
ただ、フォントが大きすぎるし、行が折り返してしまっていました。
ググってみるとLong title in header overflows to body · Issue #26 · asciidoctor/asciidoctor-fopubという情報を見つけました。ヘッダの場合は header.column.widths
というパラメータがあって、左、中央、右のカラム幅の割合を調整できるとのことです。
ということで、フッター用に footer.column.widths
のパラメータを指定しました。
また、XSLTスタイルシートを見ていると footer.content.properties
というプロパティを参照している箇所がありました。値の指定方法をどこで見つけたかは失念してしまったのですが、以下のように指定すればフォントファミリーとフォントサイズを変更できました。
<xsl:param name="footer.column.widths">5 1 5</xsl:param>
<xsl:attribute-set name="footer.content.properties">
<xsl:attribute name="font-family">Helvetica</xsl:attribute>
<xsl:attribute name="font-size">8pt</xsl:attribute>
</xsl:attribute-set>
ヘッダに会社ロゴ画像追加
ググってみると、XSLTスタイルシートで画像を追加するのは
XQuery/XSL-FO Images - Wikibooks, open books for an open worldで出来るそうです。
ということで、以下のように追加してみると、ヘッダの右のほうにロゴが表示されました。
<fo:block>
<xsl:choose>
<xsl:when test="$double.sided = 0 and $position='right'">
<fo:external-graphic src="docbook-xsl-1pac/1pac-logo.png"/>
</xsl:when>
</xsl:choose>
</fo:block>
まとめ
asciidoctor-fopubにバンドルされているXSLTスタイルシートをコピーして編集することで、ヘッダやフッタをカスタマイズすることが出来ました。XSLT素人の私でもググって情報を見つけて試行錯誤すればやりたいことは出来たので、お手軽にカスタマイズできると言えるかと思います。
Author And Source
この問題について(asciidoctor-fopubで生成するPDFのヘッダとフッタをカスタマイズする), 我々は、より多くの情報をここで見つけました https://qiita.com/hnakamur/items/1de598b0778c27635c6b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .