Class: Mrmanga::PdfRenderer
- Inherits:
-
Object
- Object
- Mrmanga::PdfRenderer
- Defined in:
- lib/mrmanga/pdf_renderer.rb
Instance Method Summary collapse
-
#initialize(manga, volume, chapters, settings) ⇒ PdfRenderer
constructor
A new instance of PdfRenderer.
Constructor Details
#initialize(manga, volume, chapters, settings) ⇒ PdfRenderer
Returns a new instance of PdfRenderer.
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/mrmanga/pdf_renderer.rb', line 6 def initialize(manga, volume, chapters, settings) info = manga.info[:metadata].clone title = info[:Title] info[:Title] = "#{title} Vol.#{volume}" doc = Prawn::Document.new(skip_page_creation: true, info: info) outline_map = {} total_page_counter = 0 chapters.each do |ch, pages| puts "Chapter #{ch}" outline_map[ch] = [] pages.each do |page| doc.start_new_page(margin: 0, size: [page[:width], page[:height]], layout: :portrait) outline_map[ch].push(total_page_counter += 1) begin doc.image(page[:file]) rescue Prawn::Errors::UnsupportedImageType # Some pngs may fail, so we convert them to jpg puts "Error in image #{page[:file]}, force converting to jpg and writing jpg version" conv = MiniMagick::Image.open(page[:file]) conv.format 'jpg' conv.quality 100 begin doc.image(conv.path) rescue Prawn::Errors::UnsupportedImageType puts "And again, error in image #{conv.path}, skipping it" end end end end doc.outline.define do section info[:Title] outline_map.each do |chapter, pages| section manga.info[:original_chapters][volume][chapter], destination: pages.first do unless settings[:disable_outline_pages] pages.each do |page_number| page title: "Page #{page_number}", destination: page_number end end end end end # Normalize filename (may contain inappropriate chars) # Removing non-word chars title.gsub!(/[^[[[:word:]]| |.]+]/, '') # Stripping spaces, dots, underscores, dashes from start and end title.gsub!(/^[\.|_| |-]+/, '') title.gsub!(/[\.|_| |-]+$/, '') filename = "#{manga.info[:info][:name]}/#{title} Vol. #{volume}.pdf" doc.render_file filename puts "Rendered to #{filename}" end |