dav*_*idb 12 ruby-on-rails prawn
我正在使用prawn创建包含表格格式和一些列表的大量数据的pdf.列表的问题是我只是使用文本作为列表,因为没有语义等同于ul> li列表,就像我在webfrointend中使用它们一样.因此列表不合理.使用多行的列表点看起来很狡猾,因为我不适合列表图标.如何在虾中实现看起来不像垃圾的列表?
小智 25
Prawn是一个很好的PDF库,但问题是它自己的视图系统.有Prawn格式但不再维护.
我建议使用WickedPDF,它允许您在PDF中包含简单的ERB代码.
使用Prawn:另一个肮脏和丑陋的解决方案是没有边框的两列表,第一列包含list-bullet,第二列文本:
table([ ["•", "First Element"],
["•", "Second Element"],
["•", "Third Element"] ])
Run Code Online (Sandbox Code Playgroud)
小智 9
我刚刚遇到了类似的问题并在Prawn中解决了与使用表格略有不同的方法:
["Item 1","Item 2","Item 3"].each() do |list-item|
#create a bounding box for the list-item label
#float it so that the cursor doesn't move down
float do
bounding_box [15,cursor], :width => 10 do
text "•"
end
end
#create a bounding box for the list-item content
bounding_box [25,cursor], :width => 600 do
text list-item
end
#provide a space between list-items
move_down(5)
end
Run Code Online (Sandbox Code Playgroud)
这显然可以扩展(例如,您可以使用each_with_index()而不是每个()来编号.它还允许边界框中的任意内容(表中不允许).
一个很好的解决方案,既尊重光标位置,又像一个真正的列表一样用少量代码行呈现:
items = ["first","second","third"]
def bullet_list(items)
start_new_page if cursor < 50
items.each do |item|
text_box "•", at: [13, cursor]
indent(30) do
text item
end
end
end
Run Code Online (Sandbox Code Playgroud)
start_new_page 子句涵盖项目符号行项目可能需要进入下一页的情况。这将保持项目符号与项目符号内容保持一致。
示例 PDF 渲染屏幕截图:
归档时间: |
|
查看次数: |
4990 次 |
最近记录: |