2010-10-17 58 views
5

我正在制作一个带有红宝石的小脚本,它会生成一个星期的时间表PDF文件,使用Prawn作为PDF库,并且我正在为样式化表格挣扎。我想为表格中的所有列设置一个静态宽度,以便宽度不依赖于单元格的内容。设置对虾桌上的单元格/列的宽度

我已经阅读虾项目网站的文档(有很大的改进空间),并搜索了几个小时,但我迷失在如何设置表格中的列或单元格的宽度,或者如何以任何方式设置列/单元格的样式。我确实得到了一个有格子布局的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 
+2

如果您对Prawn的文档不满意,请做出贡献。 – Tass 2014-01-23 14:59:06

回答

11

我做这样的事情:

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

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

在这种情况下,我想设置为适合整页的表格,并用相同的宽度细胞。