大虾:锚定文本中间到给定点
Prawn: anchor middle of the text to the given point
Prawn 有 height_of_formatted
方法来确定格式化文本的高度,因此当需要将它的中间垂直对齐到某个锚点时,可以计算它的左上角坐标。
但是没有width_of_formatted
方法。
我正在绘制图表,我需要文本(点标签)在某个点(点本身)上方居中。所以我知道文本中间有点的 x 坐标。
如何获取文本开头的 x 坐标(以便我可以将其提供给 draw_text
和其他渲染方法)?
如果您使用 bounding_box
而不是 draw_text
,您可以指定文本边框的宽度。然后,如果您将文本居中对齐,您应该能够指定中间的确切 x 坐标。 (它是盒子的 x 位置加上宽度的一半)
假设您在 x 坐标 72 处有一个点,并且您想要放置标签 "hello world!",这样单词的中心就是相同的 x 坐标。您不知道单词 "hello" 的宽度,但您确定它可以放入宽度为 500 的框内。
72 - (500/2) = -178
bounding_box([-178, 100], :width => 500) do
text "hello world!", align => :center
end
Prawn 有 height_of_formatted
方法来确定格式化文本的高度,因此当需要将它的中间垂直对齐到某个锚点时,可以计算它的左上角坐标。
但是没有width_of_formatted
方法。
我正在绘制图表,我需要文本(点标签)在某个点(点本身)上方居中。所以我知道文本中间有点的 x 坐标。
如何获取文本开头的 x 坐标(以便我可以将其提供给 draw_text
和其他渲染方法)?
如果您使用 bounding_box
而不是 draw_text
,您可以指定文本边框的宽度。然后,如果您将文本居中对齐,您应该能够指定中间的确切 x 坐标。 (它是盒子的 x 位置加上宽度的一半)
假设您在 x 坐标 72 处有一个点,并且您想要放置标签 "hello world!",这样单词的中心就是相同的 x 坐标。您不知道单词 "hello" 的宽度,但您确定它可以放入宽度为 500 的框内。
72 - (500/2) = -178
bounding_box([-178, 100], :width => 500) do
text "hello world!", align => :center
end