我有一个包含动态文本的 formatted_text_box。在没有给出特定尺寸的情况下,盒子似乎可以很好地扩展。
问题是它似乎没有将光标移动到框的底部,因此我的文本与 formatted_text_box 中的文本重叠。
如果我可以确定文本框的高度,我可以相应地使用 move_down。
有没有办法确定页面上 text_box 的高度?
我有一个包含动态文本的 formatted_text_box。在没有给出特定尺寸的情况下,盒子似乎可以很好地扩展。
问题是它似乎没有将光标移动到框的底部,因此我的文本与 formatted_text_box 中的文本重叠。
如果我可以确定文本框的高度,我可以相应地使用 move_down。
有没有办法确定页面上 text_box 的高度?
扩展亚伯拉罕的回答:
创建格式化文本框,确保传入通常传递给辅助方法的选项pdf.formatted_text_box
features_box = ::Prawn::Text::Formatted::Box.new(feature_text.flatten, {
at: [@pdf.bounds.left + 3.in, @pdf.bounds.top - 0.7.in],
inline_format: true,
document: @pdf
}
)
dry_run 盒子features_box.render(dry_run: true)
抓取盒子高度@height = features_box.height
features_box.render
您是否尝试过使用 :dry_run=> true 选项?
http://prawn.majesticseaacreature.com/docs/0.11.1/Prawn/Text/Box.html
这里有一个类似的案例:https ://groups.google.com/d/msg/prawn-ruby/fjPBlaqtQ3A/iGKNThxbq0oJ
这是我的解决方案,它呈现一个编号列表。每行由一个数字、文本数组组成,例如 ["1.", "list item 1", "2.", "list item 2"]
h = data.collect{|d| pdf.height_of(d[0])}.max
data.each do |row|
pdf.formatted_text(format_line(row[0]))
pdf.formatted_text_box(format_line(row[1]), :at=>[w, pdf.cursor+h])
pdf.move_down pdf.height_of_formatted(format_line(row[1]))-h
end
pdf.move_down pdf.height_of_formatted(format_line(data.last[1]))
向下移动格式化文本的高度以呈现下一行。