我试图让Prawn文本像HTML中的绝对定位段一样,因为段落只会与它包含的文本一样宽。
最好看一个例子:
在HTML中,以下内容:
<p class="left-align">Here's some left-aligned text,<br/>bla bla bla</p>
<p class="center-align">Here's some center-aligned text,<br/>bla bla bla</p>
<p class="right-align">Here's some right-aligned text,<br/>bla bla bla</p>
<style>
p {
background:yellow;
border:solid 1px black;
position:absolute;
}
.left-align {
text-align:left;
left:20px; top:0;
}
.center-align {
text-align:center;
left:20px; top:50px;
}
.right-align {
text-align:right;
left:20px; top:100px;
}
</style>
会导致这个:
正如您所看到的,这些段落只会与其内容一样宽(有关完整示例,请参阅 fiddle )。
布局方面,这是我想在Prawn中实现的,但是当我尝试以下内容时:
pdf.text_box "Here's some left text,\nbla bla bla", :at => [20, page_height], :align => :left
pdf.text_box "Here's some center text,\nbla bla bla", :at => [20, page_height-50], :align => :center
pdf.text_box "Here's some right text,\nbla bla bla", :at => [20, page_height-100], :align => :right
我的结果是 this :
类似于向p元素添加width:100%
。
答案 0 :(得分:6)
您必须提供文本框的宽度,否则text_box
将使用页面宽度减去起始位置。
为了计算字符串宽度,您应该使用Prawn库提供的width_of
方法,但由于某种原因,Prawn无法识别\n
中的width_of
字符方法,然后你必须手动拆分并分别计算线宽,这不是那么困难:
def text_width(pdf, text)
# slip by new line char and find maximum text width
text.split("\n").map {|s| pdf.width_of(s)}.max
end
在代码中插入text_width
:
pdf.text_box s = "Here's some left text,\nbla bla bla",
:at => [20, page_height],
:align => :left,
:width => text_width(pdf, s)
pdf.text_box s = "Here's some center text,\nbla bla bla",
:at => [20, page_height-50],
:align => :center,
:width => text_width(pdf, s)
pdf.text_box s = "Here's some right text,\nbla bla bla",
:at => [20, page_height-100],
:align => :right,
:width => text_width(pdf, s)