2012-05-03 52 views
1

我有一個大蝦PDF,打印關閉門票的列表中的表:如何在蝦PDF表格中打印整行?

Prawn::Document.generate("doorlist.pdf") do 
    table([["Ticket", "Name", "Product"]] + tickets.map do |ticket| 
    [ 
    make_cell(:content => ticket.number, :font => "Courier"), 
    make_cell(:content => ticket.holder.full_name), 
    make_cell(:content => ticket.product.name) 
    ] 
    end, :header => true) 
end 

而且我想通過行罷工哪裏ticket.has_been_used?是真的。我可以在Prawn文檔http://prawn.majesticseacreature.com/manual.pdf中看到,我可以使用inline_format選項將每個單元格的文本打包到Document.generate並將文本包裝在"<strikethrough>#{text}</strikethrough>"中,但是是否可以貫穿整行?

回答

2

我曾在此一展身手,而這也正是我結束了:

的戰略是創建一個新表的每一行,因此垂直分隔排隊指定列固定寬度。在繪製一個表格(行)之後,我檢查了我的條件句,如果爲true,我將光標上移一格的一半高度,畫出我的線條,然後將其移回到原來的位置。

require 'prawn' 
tickets = [ 
    {:number => '123', :name => 'John', :product => 'Foo', :used => true }, 
    {:number => '124', :name => 'Bill', :product => 'Bar', :used => false}, 
    {:number => '125', :name => 'John', :product => 'Baz', :used => true} 
] 

Prawn::Document.generate("doorlist.pdf") do 

    widths = [150,180,200] 
    cell_height = 20 

    table([["Ticket", "Name", "Product"]], :column_widths => widths) 

    tickets.each do |ticket| 

    table([[ 
     make_cell(:content => ticket[:number], :height => cell_height, :font => "Courier"), 
     make_cell(:content => ticket[:name], :height => cell_height, :font => "Courier"), 
     make_cell(:content => ticket[:product], :height => cell_height, :font => "Courier") 
    ]], :column_widths => widths) 

    if ticket[:used] 
     move_up (cell_height/2) 
     stroke_horizontal_rule 
     move_down (cell_height/2) 
    end 

    end 

end 
+0

嘿,那看起來不錯!一般來說不會有固定的列寬,但對於我所做的很好。 – synecdoche

+1

@synecdoche你可能只需寫出你的表格,並確保使用固定的* height *單元格,並且只需將光標移到正確的位置,然後用each_with_index第二次遍歷數據並使用索引計算向下移動光標的距離有多遠,但我不想對什麼會適合您的情況做出太多的假設。 – Unixmonkey

+0

非常感謝@Unixmonkey – Kashiftufail