问题描述
我在使用 prawn PDF 和 prawn/table 创建两列项目符号列表时遇到问题。我想知道是否有一种方法可以不太自定义/使用现有类来处理溢出到新页面等问题,这样我就不会错过任何事情或重新发明轮子。
我希望列表看起来像这样:
*姓名 1 * 姓名 3
*姓名 2 * 姓名 4
... ...
目前我拥有的是:
bullet_list = [
[ '*','Name 1' ],[ '*','Name 2' ],'Name 3' ],'Name 4' ]
]
pdf.table(bullet_list,{:cell_style => { :borders => [],:align => :justify,:padding => [0,10,0]}})
这显然使项目符号列表直接向下,但这似乎是一个不错的开始,但是我是否需要拆分列表,将列表与前半部分一起向下创建,将 PDF 返回一些量,向右移动,并重复这个过程?
我想到的另一件事是使用内联 HTML 样式,如下所示 https://prawnpdf.org/manual.pdf(第 53 页)但我认为它只接受非常基本的样式,例如粗体/斜体。
任何提示将不胜感激!
解决方法
好吧,所以我最终使用了 table 方法,我不确定为什么我之前没有想到这一点,但我们可以将名称列表分成两半并以这样的方式附加它们名称与名称的前半部分附加到同一行。这基本上是我所做的:
require 'active_support/core_ext/array/grouping'
require 'prawn'
require 'prawn/table'
names = ['John','Jim','Joe','James']
pdf = Prawn::Document.new
split_names = names.in_groups(2,false)
split_names.first.each do |name|
bullet_list << ["\u2022",name]
end
split_names.second.each_with_index do |name,index|
bullet_list[index].push("\u2022",name)
end
pdf.table(bullet_list,{ cell_style: { borders: [],align: :justify,padding: [0,10,0] } })
这是一个有效的解决方案,但如果您有任何建议或应该进行的更改,请告诉我。