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

У меня был пойти на это, и это то, что я закончил с:

Стратегии заключалась в том, чтобы создать новую таблицу для каждой строки, и указать фиксированную ширину для столбцов, так что вертикальные разделители выстраиваться. После рисования таблицы (строки) я проверяю свое условное выражение, и если это правда, я перемещаю курсор вверх по половине высоты ячейки, рисую свою линию, а затем перемещаю ее обратно туда, где она была.

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 Вы могли бы просто написать свою таблицу и не забудьте использовать фиксированные * высоты * ячейки и просто переместите курсор в нужную позицию и зациклируйте данные во второй раз с помощью each_with_index и используйте индекс для рассчитать, как далеко перемещать курсор, но я не хотел делать слишком много предположений о том, что сработает для вас. – Unixmonkey

+0

Большое спасибо мне много @Unixmonkey – Kashiftufail