Class: VivlioStarter::CLI::Build::PrintPdfBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/vivlio_starter/cli/build/print_pdf_builder.rb

Overview

================================================================

Build::PrintPdfBuilder — 入稿用(print_pdf)PDF 生成

output.targets に print_pdf が含まれる場合の一連の生成フローを担う。

生成経路は 2 つある:

【導出フロー(既定)】「pdf +トンボ= print_pdf」 閲覧用の中間 PDF(_titlepage_legalpage.pdf / _sections.pdf / _colophon.pdf・ dedup 済み)を結合し、qpdf でページジオメトリを塗り足し+トンボ代付きへ拡張して、 トンボ・ノンブルを重畳し、最後に仕上がり線(TrimBox/BleedBox)を確定する。 入稿用本文が閲覧用と同一レンダリング由来になるため、 ページずれ・内容差・入稿用レンダの flaky が構造的に消え、 本文の再レンダリング 3 回分(実測 172 秒)が丸ごと不要になる。

【従来フロー(フォールバック)】 output.print_pdf.full_bleed: true(本文にフチなし=塗り足しまで届く要素がある本) では閲覧用 PDF から塗り足しを復元できないため、--crop-marks --bleed 付きで 個別にレンダリングする。導出が不能な PDF(回転ページ等)を検出した場合の 自動退避先でもある。

いずれの経路でも、結合後は 隠しノンブル → アウトライン → リネーム と進む。

ビルド対象の Entry 配列に依存するため、ビルドごとにインスタンス化する。

Constant Summary collapse

CROP_MARK_OFFSET_MM =

vivliostyle --crop-marks が確保するトンボ代(塗り足しの外側・mm)

CoverCommands::CROP_MARK_OFFSET_MM

Instance Method Summary collapse

Constructor Details

#initialize(entries, derive: !Common.print_pdf_full_bleed?)) ⇒ PrintPdfBuilder

Returns a new instance of PrintPdfBuilder.

Parameters:

  • entries (Array<TokenResolver::Entry>)

    ビルド対象の Entry 配列

  • derive (Boolean) (defaults to: !Common.print_pdf_full_bleed?))

    閲覧用 PDF から導出するか。既定は book.yml の output.print_pdf.full_bleed の否定(フチなし要素がなければ導出できる)



44
45
46
47
# File 'lib/vivlio_starter/cli/build/print_pdf_builder.rb', line 44

def initialize(entries, derive: !Common.print_pdf_full_bleed?)
  @entries = Array(entries)
  @derive = derive
end

Instance Method Details

#build!Object

入稿用 PDF 生成のメインフロー。



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/vivlio_starter/cli/build/print_pdf_builder.rb', line 50

def build!
  Common.log_action('[print pdf] 入稿用 PDF を生成します…')

  # カバー画像(本文と別ファイルで入稿)は共通前段の `prepare cover assets` が
  # 作り済み。閲覧用 PDF の結合と同じ資産を読むため、生成はそちらに一本化した
  #(build-target-parallelization-spec.md §3.2)。

  # --- Phase: 本文の用意(導出 or 個別レンダリング) ---
  derived = build_by_derivation!
  build_by_rendering! unless derived

  # --- Phase: 仕上げ ---
  stamp_nombre!
  # 導出フローの仕上がり線(TrimBox/BleedBox)はノンブル重畳の後に確定する。
  # 先に書くと qpdf --overlay がトンボ・ノンブルを TrimBox に合わせて
  # 縮小配置してしまうため(仕様 §3.8)、overlay 完了後まで遅延させる。
  finalize_print_boxes! if derived
  add_outline!
  rename!
end