Prawn/PDF:一行中有多个 formats/text?
Prawn/PDF: Multiple formats/text on one line?
当我尝试以下代码时:
text "Hello "
text "World"
他们在 World 之上呈现 Hello,而不是在 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
。
你可以通过pdf.width_of(str)
获取文字的宽度(使用相同的样式选项:size
等,否则将使用默认设置计算)
Ruby 2.5.1
Rails 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
示例:
当我尝试以下代码时:
text "Hello "
text "World"
他们在 World 之上呈现 Hello,而不是在 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
。
你可以通过pdf.width_of(str)
获取文字的宽度(使用相同的样式选项:size
等,否则将使用默认设置计算)
Ruby 2.5.1
Rails 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