2010-10-17 14 views
5

Robię mały skrypt z rubinem, który tworzy tygodniowy harmonogram pliku PDF, używając Prawna jako biblioteki PDF i walczę o stylizację stołu. Chciałbym ustawić stałą szerokość dla wszystkich kolumn w tabeli, aby szerokości nie były zależne od zawartości komórek.Ustawianie szerokości komórek/kolumn na stole w Krewetce

Przeczytałem dokumentację (dużo miejsca na poprawki) ze strony projektu Prawn i przez kilka godzin googlowałem, ale nie mam pojęcia, jak ustawić szerokość kolumn lub komórek w tabeli, ani jak styl kolumn/komórek w jakikolwiek sposób. Dostaję plik PDF, który ma układ siatki, ale komórki różnią się rozmiarem, co nie wygląda tak zgrabnie.

To nie działa:

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 

Oto aktualna wersja mojego sposobu generowania plików PDF, ale nie stylizować komórki albo:

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

Jeśli nie jesteś zadowolony z dokumentacji Prawn, udostępnij. – Tass

Odpowiedz

11

zrobić coś takiego :

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() 

Więcej informacji here.

0

Aby ustawić statyczny szerokość wszystkich kolumn zrobić coś takiego:

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)) 

W tym przypadku chciałem nakryć do stołu, aby pasował do pełnej strony i z komórek o tej samej szerokości.

Powiązane problemy