Class: VivlioStarter::Pdf::JpegToPdf::PdfBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/vivlio_starter/cli/pdf/jpeg_to_pdf.rb

Overview

JPEG 群から最小構成の PDF 1 ファイルを生成する内部ビルダー。

PDF はオブジェクト(画像・コンテンツ・ページ・カタログ)の集合と、 各オブジェクトのバイトオフセットを記録した xref テーブルで構成される。 画像は JPEG のまま /DCTDecode ストリームに包むため再エンコードが発生せず、 画質劣化なし・高速に変換できる。

Instance Method Summary collapse

Constructor Details

#initialize(image_paths) ⇒ PdfBuilder

Returns a new instance of PdfBuilder.



31
32
33
34
35
# File 'lib/vivlio_starter/cli/pdf/jpeg_to_pdf.rb', line 31

def initialize(image_paths)
  @image_paths = image_paths
  @objects = {}
  @next_id = 0
end

Instance Method Details

#write(output_pdf) ⇒ Object

ページ木 → カタログの順にオブジェクトを組み立て、PDF を書き出す



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/vivlio_starter/cli/pdf/jpeg_to_pdf.rb', line 38

def write(output_pdf)
  catalog_id = next_id
  pages_id = next_id
  page_ids = build_page_objects(pages_id)

  add_object(pages_id, "<< /Type /Pages /Kids [#{page_ids.map { "#{it} 0 R" }.join(' ')}] /Count #{page_ids.size} >>\n")
  add_object(catalog_id, "<< /Type /Catalog /Pages #{pages_id} 0 R >>\n")

  dir = File.dirname(output_pdf)
  FileUtils.mkdir_p(dir) unless dir == '.'
  File.binwrite(output_pdf, build_pdf(catalog_id))
end