我正在制作一个带有ruby的小脚本,它会生成一个星期计划PDF文件,使用Prawn作为PDF库,我正在努力设置表格。我想为表中的所有列设置静态宽度,以便宽度不依赖于单元格的内容。
我已经从Prawn项目网站上阅读了文档(那里有很多改进的空间)并用Google搜索了几个小时,但我迷失了如何为表格中的列或单元格设置宽度,或者如何以任何方式设置列/单元格的样式。我确实得到了一个有网格布局的PDF文件,细胞大小不一,看起来不那么整洁。
这不起作用:
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
以下是我生成PDF的方法的当前版本,但它没有对单元格进行样式化:
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
答案 0 :(得分:12)
我这样做:
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()
更多信息here。
答案 1 :(得分:0)
要为所有列设置静态宽度,我会执行以下操作:
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))
在这种情况下,我想将表格设置为适合整页和宽度相同的单元格。