require 'prawn'
require 'prawn/measurement_extensions'
class PDFForm
def initialize(band)
@band = band
@document = Prawn::Document.new(:page_size => "A4")
end
def render
heading
next_line
intro_text
@document.stroke { @document.horizontal_rule }
field("Bandnavn:", @band.name)
field("Hjemsted:", @band.city)
field("Webside:", @band.website)
field("Plateselskap:", @band.label)
field("Kort bio:", @band.short_bio)
next_line
field("Kontaktperson:", @band.contact.name)
field("Postadresse:", @band.contact.addr.split("\n"))
field("Telefon:", @band.contact.phone)
field("Epost:", @band.contact.email)
next_line
field("Medlemmer:", @band.members)
next_line
subheading("Låter:")
@band.songs.each do |song|
field("Tittel", song.to_s)
field("ISRC-kode:", song.isrc)
field("Utøvere:", song.performers)
field("Komponister:", song.composers)
field("Merknad:", song.notes)
next_line
@document.stroke { @document.horizontal_rule }
end
next_line
end_text
@document.number_pages "Side <page>", :align => :center, :at => [0, 0]
@document.render_file "#{@band.name}.pdf"
end
private
def one_line
@one_line ||= @document.font_size.inspect.to_f * 1.4
end
def label_width
3.2.cm
end
def heading
@document.text "Påmelding til Norsk Urskog 2016", :size => 20
end
def subheading(text)
@document.text text, :size => 16, :style => :bold
@document.stroke { @document.horizontal_rule }
end
def next_line
@document.move_down one_line
end
def field(title, value)
next_line
@document.text_box title,
:at => [@document.bounds.left, @document.cursor],
:width => label_width,
:style => :bold
if value.class == String
@document.text_box value,
:at => [label_width, @document.cursor],
:width => @document.bounds.right - label_width,
:overflow => :expand
elsif value.class == Array
first = true
value.each do |v|
next_line unless first
@document.text_box v.to_s,
:at => [label_width, @document.cursor],
:width => @document.bounds.right - label_width,
:overflow => :expand
first = false
end
elsif value.class == Float
@document.stroke { @document.horizontal_line label_width, label_width + value, :at => @document.cursor - one_line}
end
end
def intro_text
@document.text((<<-END.gsub(/\s+/, ' ') + "\n\n"), :inline_format => true)
Takk for din påmelding til Norsk Urskog 2016! Nedenfor finner du de opplysningene vi har
registrert om din påmelding. Vennligst se over at alt er riktig, skriv så ut og send skjemaet
i underskrevet tilstand tilbake til:<br><br>
<b>Norsk Urskog</b><br>
v/Harald Eilertsen<br>
Grettevegen 9<br>
3622 Svene
END
end
def end_text
@document.text((<<-END.gsub(/\s+/, ' ') + "\n\n"), :inline_format => true)
Jeg bekrefter herved at informasjonen gitt ovenfor er riktig, og at jeg på vegne av
#{@band.name} har fullmakt til å melde ovennevnte låter på Norsk Urskog Metal Sampler 2016:
END
field("Sted:", 5.cm)
next_line
field("Dato:", 5.cm)
next_line
field("Sign:", 10.cm)
end
end