1

テーブル内のチケットのリストを出力する Prawn 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? の行を打ち消したいと思います。本当です。エビのドキュメントhttp://prawn.majesticseacreature.com/manual.pdfで、 Document.generate の :inline_format オプションを使用して各セルのテキストを打ち抜くことが"<strikethrough>#{text}</strikethrough>"でき、テキストをラップすることができますが、打ち抜くことは可能ですか?全線?

4

2 に答える 2

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
于 2012-05-07T21:39:06.923 に答える