EPUBからのPDF生成用としてVivliostyle CLIを導入した
2023/12/13EPUB制作時の校正用PDF生成目的でVivliostyle Viewerをローカルマシン内にサーバ起動する形で使ってきたのですが(参考)、先日ブラウザからのPDF出力で白紙ページが大量に入ってしまうChromeのバグを踏んでしまい、いい機会だったのでVivliostyle開発者の村上(@MurakamiShinyu)さんに助言をいただいて、上記参考先のコードを書いたときにはまだ無かったローカル環境向けのVivliostyle CLIに切り替えましたのでメモを残しておきます。環境はmacOS13.6です。
Vivliostyle CLIの環境構築
まず、node.jsを入れます(参考)。homebrewは入っていることが前提です。ターミナルで
1 |
brew install node |
これだけ。
1 |
node --version |
でnodeのバージョンが表示されればOKです。
次にVivliostyle CLIを入れます。同じくターミナルで
1 |
npm install -g @vivliostyle/cli |
これだけです。
Perl経由で自動化
これを従来同様にPerlで実行できるようにしたのが以下のコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
######追加CSSファイルのパス、表示するepubファイルの順でパスを指定するとepubファイルをVivliostyle CLIで開いてChromiumで表示する。Mac専用。###### use utf8; #Encodeモジュールをインポート use Encode qw/encode decode/; ############################################# #追加CSSファイルのパスを取得 my $addCssPath = $ARGV[0]; $addCssPath = decode('UTF-8', $addCssPath); #表示するepubファイルのパスを取得 my $epubFilePath = $ARGV[1]; $epubFilePath = decode('UTF-8', $epubFilePath); #Vivliostyle CLIで処理してChromiumで表示 my $openVivliostyleCliCmd = "osascript -e " . "'" . "tell application \"Terminal\" to do script " . "\"" . "vivliostyle preview " . $epubFilePath . " --style " . $addCssPath . "\"" . "'"; system $openVivliostyleCliCmd; |
ノンブル表示、見開き指定などのための追加CSSは –style オプションを使って外部ファイルを読み込む形としました。その方が修正もしやすいし(追加CSSの参考例はVivliostyle CLIのオンラインマニュアル内にある)。「vivliostyle preview」を指定しているので、Chromiumブラウザが起動してページが表示されます。あとはこれまで通り印刷ウィンドウでPDFを保存を選択して出力するだけです。だいぶ簡単になりましたね。
なお、その後Chrome側でバグが修正されたとのことなので今は古い方のスクリプトでも問題なくPDF生成はできるようです。
(2023.12.14)