Asciidoctor PDFの表紙をカスタマイズする

2018/12/08

Asciidoctor PDFの表紙をあれこれ弄ってみた記録です。

その1:標準レイアウト

まずは標準レイアウトで出力してみましょう。

= Asciidoctor PDFにおける表紙生成サンプル: 標準レイアウト
:author: 田中 太郎
:revdate: 2018/12/8
:revnumber: 1.0
:lang: ja
:doctype: book

こんな感じの表紙が生成されます。特に凝っていないドキュメントならこれで十分。

サンプル1 標準レイアウト

サンプル1 標準レイアウト (PDFを開く)

その2:表記のカスタマイズ

まずは簡単なところから。アトリビュートを変更することでいくつかの表記をカスタマイズできます。

= Asciidoctor PDFにおける表紙生成サンプル: 表記のカスタマイズ
:author: 田中 太郎
:revdate: 2018年12月8日
:revnumber: 1.0版
:lang: ja
:doctype: book
:version-label:

日付は :revdate: がそのまま反映されるので、任意の日付フォーマットに変えられます。

バージョン表記は :version-label: が反映されます。 :version-label: バージョン とすれば Version 1.0 ではなく バージョン 1.0 になります。:version-label: としてあげると何も表示されなくなります。

サンプル2 表記のカスタマイズ

サンプル2 表記のカスタマイズ (PDFを開く)

お仕事で使うことを考えると「Version1.0」と書くより「1.0版」としたほうがしっくりきますね。

その3:レイアウトのカスタマイズ

themeを設定すると表示位置などを柔軟に変更できます。設定できるパラメータは asciidoctor-pdf/theming-guide.adoc にまとめられています。

= Asciidoctor PDFにおける表紙生成サンプル: レイアウトのカスタマイズ
:author: 田中 太郎
:revdate: 2018年12月8日
:revnumber: 1.0版
:lang: ja
:doctype: book
:version-label:
:pdf-style: theme-page03.yml
:pdf-fontsdir: fonts

themeはこんな感じ。ここには書いていませんが、フォントも弄っています。

title_page:
    align: center
    title:
      top: 40%
      font_size: $heading_h1_font_size
      font_style: bold
    subtitle:
      font_size: $heading_h2_font_size
      margin_top: 16
    authors:
      font_size: $base_font_size * 1.8
      margin_top: 32
    revision:
      delimiter: "<br/>"
      font_size: $base_font_size * 1.5
      margin_top: 16

いろいろ試していて気付いたtipsをひとつ。title_page_authorsdelimiter<br/> を指定するとauthorとrevisionを別の行にできます。

サンプル3 レイアウトのカスタマイズ

サンプル3 レイアウトのカスタマイズ (PDFを開く)

これでだいぶSIの現場で見るドキュメントっぽくなったんじゃないでしょうか。

その4:背景のカスタマイズ

お仕事だと「所定の項目が表示できないとちょっと...」みたいなことがあるかもしれません。そういう時は:title-page-background-image:を使って背景をカスタマイズする手があります。

= Asciidoctor PDFにおける表紙生成サンプル: 背景のカスタマイズ
:author: 田中 太郎
:revdate: 2018年12月8日
:revnumber: 1.0版
:lang: ja
:doctype: book
:version-label:
:pdf-style: theme-page04.yml
:pdf-fontsdir: fonts
:imagesdir: images
:title-page-background-image: image:title_page04_background.svg[]

:title-page-background-image:でSVG画像を指定するところがポイント。SVGなら文字列を(画像ではなく)文字列として描画できるので、拡大縮小や印刷しても問題ないPDFが生成できます。

ちなみに今回のSVG画像はInkscapeを使って作りました。承認印欄を追加してあります。試しにPDFを拡大してみてください。「承認」の文字が綺麗に拡大されると思います。PNGやJPEGだとこうはいきません。

サンプル4 背景のカスタマイズ

サンプル4 背景のカスタマイズ (PDFを開く)

注意点が一つ。以下の記事にあるように、日本語を含むSVG画像はひと手間かけないとフォントが化けます。PDF生成で使われているprawnというライブラリに問題があるんですね。

具体的なやり方についてちょっと補足。theme側ではfontにfallbacks設定をしておきます。

font:
catalog:
  // フォント設定いろいろ
fallbacks:
  - Sans Serif

そしてパッチのほうでfallbacksに設定したフォントを指定してあげる、というやり方がよさそう。SVG側で指定した日本語フォントは無視されるはず。

Prawn::Svg::Font::GENERIC_CSS_FONT_MAPPING.merge!(
  'sans-serif' => 'Sans Serif'
)

prawnは開発は活発なもののリリース頻度が低いので、改善されるとしても時間がかかりそう。当面はこのやり方でしのぐしかなさそうです。

その5:独自の表紙

「SVG画像作るの面倒」とか「そもそも決まった表紙フォーマットがあって...」とかいう場合は、別途作った表紙を合成する方法があります。

= Asciidoctor PDFにおける表紙生成サンプル: 独自の表紙
:author: 田中 太郎
:revdate: 2018年12月8日
:revnumber: 1.0版
:lang: ja
:doctype: book
:version-label:
:pdf-style: theme-page05.yml
:pdf-fontsdir: fonts
:imagesdir: images
:notitle:
:front-cover-image: image:custom_title_page.pdf[]

:notitle: で標準の表紙を出力しないようにし、:front-cover-image:で別途作っておいたPDFを指定します。最近のWordやPowerPointはPDF出力があるので、それらを使うのが手軽だと思います。

サンプル5 独自の表紙

サンプル5 独自の表紙 (PDFを開く)

このやり方であれば、Asciidoctor PDFの仕様に縛られることなく、好きな表紙をつけることができます。

まとめ

あまり手間をかけたくない場合はアトリビュートやthemeを設定してそこそこの表紙を作ることができます。

逆に手間をかけてもいいから凝りたい場合は、背景を工夫するなり独自の表紙を合成するなりすれば望み通りの表紙にすることもできます。

用途に合わせてお好きなアプローチをどうぞ!




関連(するかもしれない)記事


おススメ