require 'rubygems' require 'prawn' require 'prawn/table' module CarlosGoce module Layout class Simple def create(file, data, year) tables = [] Prawn::Document.generate(file) do data[:months].each do |k, month| days = month[:formatted_days] cells = days.to_a.each_slice(7).to_a a = [] %w(L M X J V S D).each {|d| a << "#{d}" } # cells.unshift ['L', 'M', 'X', 'J', 'V', 'S', 'D'] cells.unshift a cells.unshift [{content: "#{month[:name].upcase}", colspan: 7, inline_format: true}] tables << make_table(cells, cell_style: {width: 15, height: 12, align: :center, size: 7, border_width: 0, padding: 0, valign: :center}) end table(tables.each_slice(3).to_a, cell_style: {align: :center, padding: [5, 5, 5, 5], border_width: 0, valign: :center, margin: [0, 0, 15, 0]}) end end end class Columns attr_reader :columns, :num_cols def initialize(cols) @columns = cols @num_cols = cols.length end def header [[""] + @columns] end def create(file, data, year) Prawn::Document.generate(file, :page_layout => :landscape, :page_size => "A4") do |pdf| data[:months].each do |k, month| pdf.font_size = 16 pdf.text "#{month[:name].capitalize} #{year}" rows = [] offset = 6 - month[:formatted_days].select { |d| d == "" }.length month[:days].each_index do |i| row = [] bg = (i - offset) % 7 == 0 ? "ffcccc" : "ffffff" row << pdf.make_cell(:content => "#{month[:days][i]} #{month[:days_names][i]}", :background_color => bg) @num_cols.times { row << pdf.make_cell(:content => "", :background_color => bg) } rows << row end pdf.font_size = 10 style = {align: :left, padding: 2, border_width: 1, valign: :center, margin: [0, 0, 15, 0]} t = pdf.make_table(header + rows, cell_style: style, :width => 760, :column_widths => { 0 => 100 }, :header => true) t.row(0).style(:background_color => "cccccc", :font_style => :bold) t.draw() pdf.start_new_page if k < 12 end end end end end end