require 'prawn' require 'prawn/measurement_extensions' class PDFForm def initialize(band) @band = band @document = Prawn::Document.new(:page_size => "A4") end def render heading 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 @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 end end