Class: ClockworkComicPDF::PDFMaker

Inherits:
Object
  • Object
show all
Includes:
MeasurementParser, PDFSectionMaker, PDFTocMaker
Defined in:
lib/clockwork_comic_pdf/pdf_maker.rb

Overview

this parses the sections of a book into a pdf file

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from MeasurementParser

#convert_complex_position, #convert_position, #convert_simple_position, #convert_size, #convert_val, #get_h_center, #get_v_center, #parse_options

Methods included from PDFSectionMaker

#make_name, #make_text_box, #print_comic_image, #print_comic_pages, #print_formatted_text_box, #print_section, #print_section_break, #print_sections, #print_text_box

Methods included from PDFTocMaker

#make_toc_item, #print_toc

Constructor Details

#initialize(book) ⇒ PDFMaker

Returns a new instance of PDFMaker.



20
21
22
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 20

def initialize(book)
  self.book = book
end

Instance Attribute Details

#bookObject

Returns the value of attribute book.



12
13
14
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 12

def book
  @book
end

#content_startObject

Returns the value of attribute content_start.



12
13
14
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 12

def content_start
  @content_start
end

#current_pageObject

Returns the value of attribute current_page.



12
13
14
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 12

def current_page
  @current_page
end

#debugObject

Returns the value of attribute debug.



12
13
14
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 12

def debug
  @debug
end

#page_indexObject



16
17
18
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 16

def page_index
  @page_index ||= []
end

#printing_bodyObject

Returns the value of attribute printing_body.



12
13
14
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 12

def printing_body
  @printing_body
end

#trim_offsetObject

Returns the value of attribute trim_offset.



12
13
14
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 12

def trim_offset
  @trim_offset
end

Instance Method Details

#debug_stroke(pdf) ⇒ Object



106
107
108
109
110
111
112
113
114
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 106

def debug_stroke(pdf)
  pdf.stroke_bounds
  pdf.stroke do
    pdf.line [0, 0], [pdf.bounds.width, pdf.bounds.height]
    pdf.line [pdf.bounds.width, 0], [0, pdf.bounds.height]
    pdf.line  [pdf.bounds.width / 2,
               pdf.bounds.height], [pdf.bounds.width / 2, 0]
  end
end

#make_offset_page(pdf) ⇒ Object



63
64
65
66
67
68
69
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 63

def make_offset_page(pdf)
  margin = Array.new(book.margin)
  if pdf.page_number.odd? then margin[1] += book.offset_from_spine
  else margin[3] += book.offset_from_spine
  end
  pdf.start_new_page(size: book.page_size, margin: margin)
end

#make_trim_page(pdf) ⇒ Object



71
72
73
74
75
76
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 71

def make_trim_page(pdf)
  margin = Array.new(book.margin)
  pdf.start_new_page(size: [book.page_size[0] - book.offset_from_spine,
                            book.page_size[1]],
                     margin: margin)
end

#new_page(pdf) ⇒ Object



54
55
56
57
58
59
60
61
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 54

def new_page(pdf)
  if trim_offset then make_trim_page(pdf)
  else make_offset_page(pdf)
  end
  pdf.font(book.font)
  print_body_page(pdf) if printing_body
  debug_stroke(pdf) if debug
end


24
25
26
27
28
29
30
31
32
33
34
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 24

def print
  book.validate
  book.versions.each do |version|
    self.content_start = nil
    self.printing_body = false
    self.current_page = nil
    self.page_index = nil
    self.debug = false
    print_version(version)
  end
end


78
79
80
81
82
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 78

def print_body_page(pdf)
  self.current_page += 1
  print_header(pdf) unless book.page_header.nil?
  print_page_num(pdf) if book.print_pagenum
end


45
46
47
48
49
50
51
52
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 45

def print_cover(pdf, version)
  pdf.go_to_page 0
  return if book.cover.nil?
  cover = book.cover
  pdf.start_new_page(size: cover.size, margin: 0)
  pdf.image("#{cover.path}/#{version.name}/#{cover.file}",
            at: pdf.bounds.top_left, scale: 72.0 / version.dpi.to_f)
end


84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 84

def print_header(pdf)
  head = book.page_header
  options = { size: head.size, align: head.align, width: pdf.bounds.width }
  text = pdf.page_number.even? ? head.left_text : head.right_text
  options[:at] = [pdf.bounds.left, pdf.bounds.top + 0.25.in]
  options[:valign] = :center
  options[:height] = 0.25.in
  if options[:align] == :alternating
    options[:align] = even_page ? :left : :right
  end
  pdf.text_box(text, options)
end


97
98
99
100
101
102
103
104
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 97

def print_page_num(pdf)
  options = { at: pdf.bounds.bottom_left,
              width: pdf.bounds.width,
              align: :center,
              size: 8 }
  options[:height] = 0.25.in
  pdf.text_box("#{self.current_page}", options)
end


36
37
38
39
40
41
42
43
# File 'lib/clockwork_comic_pdf/pdf_maker.rb', line 36

def print_version(version)
  self.trim_offset = version.trim_offset
  pdf = Prawn::Document.new(info: book.info, font_size: book.font_size,
                            skip_page_creation: true)
  print_sections(pdf, version)
  print_cover(pdf, version) if version.print_cover
  pdf.render_file "#{book.base_file_name} - #{version.name}.pdf"
end