6 Stimmen

Einstellung der Zellen-/Spaltenbreiten in einer Prawn-Tabelle

Ich mache ein kleines Skript mit Ruby, die eine Woche Zeitplan PDF-Datei erzeugt, mit Prawn als PDF-Bibliothek und ich bin mit Styling der Tabelle kämpfen. Ich möchte eine statische Breite für alle Spalten in der Tabelle festlegen, so dass die Breiten nicht auf den Inhalt der Zellen abhängen würde.

Ich habe die Dokumentation (viel Raum für Verbesserungen gibt) von der Prawn-Projekt-Website gelesen und gegoogelt für ein paar Stunden, aber ich bin verloren, wie man Breite für Spalten oder Zellen in einer Tabelle, oder wie man die Spalten/Zellen in irgendeiner Weise Stil. Ich erhalte eine PDF-Datei, die zwar ein Rasterlayout hat, aber die Zellen sind sehr unterschiedlich groß, was nicht sehr ordentlich aussieht.

Das hat nicht geklappt:

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 ist die aktuelle Version meiner Methode zur PDF-Generierung, aber auch hier werden die Zellen nicht stilisiert:

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

14voto

kfl62 Punkte 2304

Ich mache das in etwa so:

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

Mehr Infos aquí .

0voto

Sidney Punkte 1099

Um eine statische Breite für alle Spalten festzulegen, gehe ich folgendermaßen vor:

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 wollte ich die Tabelle so einstellen, dass sie auf die gesamte Seite passt und die Zellen die gleiche Breite haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X