2010-10-17 13 views
5

Ich mache ein kleines Skript mit Ruby, das eine Wochenplan-PDF-Datei erstellt, die Prawn als PDF-Bibliothek verwendet und ich habe Schwierigkeiten, die Tabelle zu formatieren. Ich möchte eine statische Breite für alle Spalten in der Tabelle festlegen, damit die Breiten nicht vom Inhalt der Zellen abhängen.Setzen von Zellen-/Spaltenbreiten auf einer Prawn-Tabelle

Ich habe die Dokumentation (viel Raum für Verbesserungen dort) von der Prawn-Projekt-Website gelesen und für ein paar Stunden gegoogelt, aber ich bin verloren bei der Festlegung der Breite für Spalten oder Zellen in einer Tabelle oder wie um die Spalten/Zellen in irgendeiner Weise zu gestalten. Ich bekomme zwar eine PDF-Datei, die ein Raster-Layout hat, aber die Zellen variieren nur in der Größe, was nicht so gut aussieht.

Das hat nicht funktioniert:

Prawn::Document.generate(@filename, :page_size => 'A4', :page_layout => :landscape) do 
    table(course_matrix, :headers => HEADERS, :border_style => :grid, :row_colors => ['dddddd', 'eeeeee'], :column_widths => 50) 
end 

Hier wird die aktuelle Version meiner Methode ist PDF zu generieren, aber es stilisiert nicht die Zellen, die entweder:

def produce_pdf 
    course_matrix = DataParser.new.parse_for_pdf 

    Prawn::Document.generate(@filename, :page_size => 'A4', :page_layout => :landscape) do 
    table(course_matrix, :headers => HEADERS, :border_style => :grid, :row_colors => ['dddddd', 'eeeeee']) do |table| 
     table.cells.style { |cell| cell.width = 50 } 
    end 
    end 
end 
+2

Wenn Sie nicht mit der Dokumentation von Prawn zufrieden sind, tragen Sie dazu bei. – Tass

Antwort

11

ich etwas tun :

pdf = Prawn::Document.new(
    :page_size => 'A4', 
    :page_layout => :landscape, 
    :margin => [5.mm]) 
    .... 
    .... 
    pdf.table(tbl_data) do 
    row(0).style(:background_color => 'dddddd', :size => 9, :align => :center, :font_style => :bold) 
    column(0).style(:background_color => 'dddddd', :size => 9, :padding_top => 20.mm, :font_style => :bold) 
    row(1).column(1..7).style(:size => 8, :padding => 3) 
    cells[0,0].background_color = 'ffffff' 
    row(0).height = 8.mm 
    row(1..3).height = 45.mm 
    column(0).width = 28.mm 
    column(1..7).width = 35.mm 
    row(1..3).column(6..7).borders = [:left, :right] 
    row(3).column(6..7).borders = [:left, :right, :bottom] 
    .... 
pdf.render() 

Weitere Informationen here.

0

Um eine statische Breite für alle Spalten gesetzt ich so etwas tun:

REPORT_FIELDS = %w[DESCRIPTION PRICE DATE NOTE].freeze 
A4_SIZE = 200.freeze 

data = [] 
data << REPORT_FIELDS 
... things happen ... 
table(data, column_widths: (A4_SIZE/REPORT_FIELDS.size).mm)) 

In diesem Fall habe ich den Tisch zu decken wollte die ganze Seite und mit den Zellen mit der gleichen Breite passen.