2010-10-17 13 views
5

Je crée un petit script avec ruby ​​qui produit un fichier PDF d'une semaine, utilisant Prawn comme une bibliothèque PDF et j'ai du mal à styliser la table. Je voudrais définir une largeur statique pour toutes les colonnes de la table afin que les largeurs ne dépendent pas du contenu des cellules. J'ai lu la documentation (beaucoup de place pour l'amélioration ici) du site du projet Prawn et googlé pendant quelques heures, mais je suis perdu sur la façon de définir la largeur des colonnes ou des cellules dans une table, ou comment pour styliser les colonnes/cellules de quelque manière que ce soit. Je reçois un fichier PDF qui a une disposition de grille, mais les cellules varient beaucoup en taille, ce qui ne semble pas si joli.Réglage des largeurs de cellules/colonnes sur une table de crevettes

Cela ne fonctionne pas:

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 

est ici la version actuelle de ma méthode pour générer des PDF, mais il ne styliser pas les cellules soit:

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

Si vous n'êtes pas satisfait de la documentation de Prawn, contribuez. – Tass

Répondre

11

que je fais quelque chose comme ça :

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

Plus d'informations here.

0

Pour définir une largeur statique pour toutes les colonnes que je fais quelque chose comme ceci:

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

Dans ce cas, je voulais mettre la table pour correspondre à la pleine page et avec les cellules avec la même largeur.