require 'prawn' require 'prawn/measurement_extensions' class PDFForm def initialize(band) @band = band @document = Prawn::Document.new(:page_size => "A4") end def render(filename) heading next_line intro_text subheading("Generell info:") field("Band:", @band.name_and_city) field("Webside:", @band.website) field("Plateselskap:", @band.label) field("Kort bio:", @band.short_bio) field("Medlemmer:", @band.members.split("\n")) 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 next_line subheading("Låter:") @band.songs.each do |song| unless song.title.empty? 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 end next_line end_text @document.number_pages "Side ", :align => :center, :at => [0, 0] @document.render_file filename 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:

Norsk Urskog
v/Harald Eilertsen
Grettevegen 9
3622 Svene END end def end_text @document.span(@document.bounds.right) do next_line @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 end