Prawn - 在text_box展开后向下移动光标

cdo*_*uck 2 ruby pdf ruby-on-rails prawn ruby-on-rails-5

我正在使用 Prawn Gem 生成 PDF,但我无法找到一种方法在从溢出文本扩展cursor后向下移动text_box,类似于常规text调用的方式。

文本框示例

pad(5) {
  text_box payable, :at => [bounds.left, cursor], :width => 540, :height => 15, :overflow => :expand, inline_format: true
}

move_down(15)

pad(5) {
  text_box address, :at => [bounds.left, cursor], :width => 250, :height => 15, :overflow => :expand, inline_format: true
  text_box city, :at => [250, cursor], :width => 100, :height => 15, :overflow => :expand, inline_format: true
  text_box state, :at => [350, cursor], :width => 75, :height => 15, :overflow => :expand, inline_format: true
  text_box zip, :at => [425, cursor], :width => 110, :height => 15, :overflow => :expand, inline_format: true
}
Run Code Online (Sandbox Code Playgroud)

因此,上面,我必须pad往返move_downtext_box payable以便下一组文本框的格式正确且不重叠。如果我对字符串使用直接text调用payable,则在渲染所有文本后,光标将按预期向下移动。

text_box我使用常规的原因text是这样我可以将文本并排放置在同一行上。虽然这对于所有适合单行的字符串非常有效,但如果其中一个区域向下扩展,则效果似乎不佳,text_box因为光标只是从下一个文本行开始,而不是在扩展的文本框下方。

任何见解或建议将不胜感激,谢谢!

adg*_*adg 5

你现在可能已经明白了一些事情,但我也是 Prawn 的新手,也有同样的问题,所以希望这对其他人有帮助。此示例显示了文本框和格式化文本框。可能有更好的方法,但这对我有用。

  txt1 = "u" * 250
  txt2 = "v" * 600
  txt3 = "w" * 100
  txt4 = "x" * 500
  txt5 = "y" * 200
  txt6 = "z" * 400

  stroke_horizontal_rule

  options = {:document=>@pdf, :at=>[0,cursor]}
  text_box(txt1, options)
  measure = Prawn::Text::Box.new(txt1, options)
  measure.render(:dry_run => true)
  move_down(measure.height)

  options = {:document=>@pdf, :at=>[0,cursor]}
  text_box(txt2, options)
  measure = Prawn::Text::Box.new(txt2, options)
  measure.render(:dry_run => true)
  move_down(measure.height)

  options = {:document=>@pdf, :at=>[0,cursor]}
  text_box(txt3, options)
  measure = Prawn::Text::Box.new(txt3, options)
  measure.render(:dry_run => true)
  move_down(measure.height)

  array = [{:text=>txt4, :size=>12}]
  options = {:document=>@pdf, :at=>[0,cursor]}
  formatted_text_box(array, options)
  measure = Prawn::Text::Formatted::Box.new(array, options)
  measure.render(:dry_run => true)
  move_down(measure.height)

  array = [{:text=>txt5, :size=>16}]
  options = {:document=>@pdf, :at=>[0,cursor]}
  formatted_text_box(array, options)
  measure = Prawn::Text::Formatted::Box.new(array, options)
  measure.render(:dry_run => true)
  move_down(measure.height)

  array = [{:text=>txt6, :size=>12}]
  options = {:document=>@pdf, :at=>[0,cursor]}
  formatted_text_box(array, options)
  measure = Prawn::Text::Formatted::Box.new(array, options)
  measure.render(:dry_run => true)
  move_down(measure.height)

  stroke_horizontal_rule
Run Code Online (Sandbox Code Playgroud)