したがって、このcolumn_box
メソッドは境界ボックスを作成します。文書化されたバウンディング ボックスの動作は、次のページに変更された場合、前のページと同じ位置から始まるというものです。したがって、あなたが見ている動作は基本的に正しいものであり、あなたが望むものでもありません。span
スパンにはこの動作がないため、グーグルで見つけた推奨される回避策は、代わりに a を使用することです。
問題は、スパンを使用してテキスト列を作成する方法です。スパンをネイティブにサポートしていないようです。スパンを持つ列を模倣する小さなスクリプトを作成しようとしました。列ごとに 1 つのスパンが作成され、それに応じて整列されます。text_box
次に、オプションを持つ でテキストを書き込みoverflow: :truncate
ます。これにより、メソッドはテキスト ボックスに収まらなかったテキストを返すようになり、このテキストを次の列に表示できるようになります。コードにはおそらく多少の調整が必要ですが、これを行う方法を示すには十分なはずです。
require 'prawn'
text_to_write = ((<<-END.gsub(/\s+/, ' ') + "\n\n") * 20)
All the States and Governments by which men are or ever have been ruled,
have been and are either Republics or Princedoms. Princedoms are either
hereditary, in which the bla bla bla bla .....
END
pdf = Prawn::Document.generate("test.pdf") do
text "The Prince", :align => :center, :size => 48
text "Niccolò Machiavelli", :align => :center, :size => 20
move_down 42
starting_y = cursor
starting_page = page_number
span(bounds.width / 3, position: :left) do
text_to_write = text_box text_to_write, at: [bounds.left, 0], overflow: :truncate
end
go_to_page(starting_page)
move_cursor_to(starting_y)
span(bounds.width / 3, position: :center) do
text_to_write = text_box text_to_write, at: [bounds.left, 0], overflow: :truncate
end
go_to_page(starting_page)
move_cursor_to(starting_y)
span(bounds.width / 3, position: :right) do
text_box text_to_write, at: [bounds.left, 0]
end
end
これが理想的な解決策ではないことはわかっています。しかし、これは私が思いつくことができる最高のものでした。