GitHub ActionsでRe:VIEWの印刷用モノクロPDFと電子版カラーPDFを1原稿からビルドしてみた

GitHub ActionsでRe:VIEWの印刷用モノクロPDFと電子版カラーPDFを1原稿からビルドしてみた

2026.09.25

Re:VIEWで書いた1つの原稿から、印刷用のモノクロPDFと電子版のカラーPDFをビルドする仕組みを作りました。

Re:VIEW自体にはPDF全体をモノクロ化する機能がありません。そこでビルド後にGhostscriptでグレースケール変換する構成にしています。GitHub Actions上でビルドを完了させたので、その内容をまとめます。

config.ymlだけでモノクロにできるか調べた

最初に、Re:VIEWの設定ファイルだけで印刷用PDFをモノクロにできないか調べました。

Re:VIEWの公式ガイド「LaTeX と review-pdfmaker について」を確認しましたが、カラーやモノクロに関するオプションはありませんでした。

そのため、ビルド後のPDFをGhostscriptでグレースケール変換する方式にしました。

ワークフロー全体

GitHub Actionsのワークフローは次の構成です。

.github/workflows/on_push.yml
name: Build print and ebook PDFs
on: [push, pull_request, workflow_dispatch]
permissions:
  contents: read
jobs:
  build:
    runs-on: ubuntu-latest
    container: vvakame/review:5.9
    steps:
      - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
      - name: Build print and ebook PDFs
        run: sh scripts/build.sh
      - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
        with:
          name: pdfs
          path: dist/
          if-no-files-found: error

アクションはpinactでコミットSHAに固定しています。

スクリプトで紙版と電子版のPDFを生成しています。

生成したPDFはGitHub Actionsのアーティファクトからダウンロードできます。

Pin_GitHub_Actions_to_commit_…_test-review-template_d042b4e.png

それぞれ出力されるPDFは以下です。

ReVIEW-Template-ebook_pdf.png

ReVIEW-Template-print-gray_pdf.png

ビルドスクリプトと設定ファイルの継承

メインのビルドスクリプトはscripts/build.shです。

scripts/build.sh
#!/bin/sh
set -eu
cd "$(dirname "$0")/.."
mkdir -p dist
review-pdfmaker --version
gs --version
(
  cd articles
  review-pdfmaker config-print.yml
  review-pdfmaker config-ebook.yml
)
cp articles/ReVIEW-Template-ebook.pdf dist/ReVIEW-Template-ebook.pdf
sh scripts/grayscale-pdf.sh articles/ReVIEW-Template-print.pdf dist/ReVIEW-Template-print-gray.pdf

config-print.ymlとconfig-ebook.ymlは共通のconfig.ymlを継承しています。差分だけを上書きするファイルです。

articles/config-print.yml
# 紙版本文。既存テンプレートのB5紙面を継承する。
inherit: ["config.yml"]
bookname: ReVIEW-Template-print
texdocumentclass: ["review-jsbook", "media=print,paper=b5,serial_pagination=true,openany,fontsize=10pt,baselineskip=15.4pt,line_length=40zw,number_of_lines=35,head_space=30mm,headsep=10mm,headheight=5mm,footskip=10mm"]

両方ともbooknameを上書きしています。生成されるPDFのファイル名は、それぞれReVIEW-Template-print.pdf、ReVIEW-Template-ebook.pdfです。電子版はそのままdist/にコピーし、紙版だけ後続のグレースケール変換を通します。

Ghostscriptでグレースケール変換する

メインの変換スクリプトはscripts/grayscale-pdf.shです。

scripts/grayscale-pdf.sh
#!/bin/sh
set -eu
if [ "$#" -ne 2 ] || [ "$1" = "$2" ]; then
  echo "Usage: sh scripts/grayscale-pdf.sh INPUT.pdf OUTPUT.pdf (different paths)" >&2
  exit 2
fi
test -f "$1"
gs -dBATCH -dNOPAUSE -dSAFER -sDEVICE=pdfwrite \
  -sColorConversionStrategy=Gray -sOutputFile="$2" "$1"

-sColorConversionStrategy=Grayで色空間をグレーに変換します。

引数が2個でない場合と、入出力が同じパスの場合はエラーで止まるようにしています。

おわりに

Ghostscriptを挟むことで、紙版(モノクロ)と電子版を1つの原稿から出し分けられるようになりました。グレースケール変換スクリプトは、他のテンプレートでもそのまま流用できそうです。

この記事をシェアする

関連記事