Class: VivlioStarter::Pdf::JpegToPdf::PdfBuilder
- Inherits:
-
Object
- Object
- VivlioStarter::Pdf::JpegToPdf::PdfBuilder
- Defined in:
- lib/vivlio_starter/cli/pdf/jpeg_to_pdf.rb
Overview
JPEG 群から最小構成の PDF 1 ファイルを生成する内部ビルダー。
PDF はオブジェクト(画像・コンテンツ・ページ・カタログ)の集合と、 各オブジェクトのバイトオフセットを記録した xref テーブルで構成される。 画像は JPEG のまま /DCTDecode ストリームに包むため再エンコードが発生せず、 画質劣化なし・高速に変換できる。
Instance Method Summary collapse
-
#initialize(image_paths) ⇒ PdfBuilder
constructor
A new instance of PdfBuilder.
-
#write(output_pdf) ⇒ Object
ページ木 → カタログの順にオブジェクトを組み立て、PDF を書き出す.
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 |