【问题标题】:Prawn/PDF: Multiple formats/text on one line?大虾/PDF:一行中有多种格式/文本?
【发布时间】:2017-02-16 15:28:59
【问题描述】:

当我尝试以下代码时:

text "Hello "
text "World"

它们将 Hello 渲染在 World 之上,而不是在 Hello 之后立即渲染 World。我在一行上需要一些复杂的格式(突出显示、不同的字体大小等)。我知道:inline_formatting 选项存在,但使用该选项似乎太复杂了。

我有以下代码:

highlight_callback.rb:

class HighlightCallback
  def initialize(options)
    @color = options[:color]
    @document = options[:document]
  end

  def render_behind(fragment)
    original_color = @document.fill_color
    @document.fill_color = @color
    @document.fill_rectangle(fragment.top_left,
    fragment.width,
    fragment.height)

    @document.fill_color = original_color
  end
end

order.pdf.prawn:

highlight = HighlightCallback.new(:color => 'ffff00', :document => self)

#code....

text "Authorized Signature: "
formatted_text [{:text => "_" * 15, :callback => highlight }], :size => 20

正在生成附加图像。怎样才能得到与正文同层的签名行?

【问题讨论】:

  • 嗯,从来没有那样过。我想你必须自己移动指针。但是大虾可以轻松计算出你的文字宽度
  • 如何移动指针?我觉得我应该能够在第一个文本之后给它一组坐标来重置光标,然后在我的文本之后继续在同一个位置。
  • 您可能需要使用text_box:at 选项prawnpdf.org/docs/0.11.1/Prawn/Text.html#method-i-text
  • 谢谢。我会试试的。如果这似乎可行,我会告诉你的。为 ?我会投票并将其标记为正确。
  • 成功了!发布详细答案,我会将其标记为正确并点赞。

标签: ruby-on-rails pdf prawn prawnto


【解决方案1】:

Ruby 2.5.1

导轨 5.2.0

将方法text改为text_box即可,即:

bounding_box([0, cursor], width: 540, height: 40) do
  stroke_color 'FFFF00'
  stroke_bounds

  date = 'Date: '
  text_box date, style: :bold

  text_box DateTime.now.strftime('%Y/%m/%d'), at: [bounds.left + width_of(date), cursor]
  text_box "Signature ________________", align: :right
end

示例:

【讨论】:

    【解决方案2】:

    要将文本放置在准确的位置,您可以使用 text_box 和选项 :at

    您可以使用pdf.width_of(str) 获取文本的宽度(使用相同的样式选项:size 等。否则它将使用默认设置来计算)

    【讨论】:

      猜你喜欢
      • 2012-09-03
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多