【发布时间】:2013-09-27 02:11:35
【问题描述】:
早期的Prawn gem 允许通过其 html 表示形式创建一个表(将一个 html 表字符串作为 input 参数,如<table class="abc"> .... </table>)。现在我在手册中没有找到这个设施。
那么现在有可能吗?如果没有,那还有其他选择吗?
【问题讨论】:
标签: ruby-on-rails ruby gem prawn
早期的Prawn gem 允许通过其 html 表示形式创建一个表(将一个 html 表字符串作为 input 参数,如<table class="abc"> .... </table>)。现在我在手册中没有找到这个设施。
那么现在有可能吗?如果没有,那还有其他选择吗?
【问题讨论】:
标签: ruby-on-rails ruby gem prawn
TL;DR:如果您的用例是 1)生成 HTML 和 PDF 数据(如在线发票等),以及 2)确保两者看起来相同,那么 Prawn 并不是最好的解决方案(这是虾自述文件中的相同建议)。
在您的情况下,您可以使用 Nokogiri 或 Upton 解析 HTML 并从 HTML 表中提取数据,然后使用它通过 Prawn 生成 PDF 表示。 HTML 样式可能不会直接转换为 Prawn 使用的样式,因此,即使有很多代码争论,您也可能无法实现样式的一致性——我假设,来自royalGhost 答案的 cmets,是你想要的结果。此外,如果您的 HTML 表格是嵌套的并且解析代码不满足该问题,那么简单的 Nokogiri 解析解决方案将无法工作。例如,考虑一下:
<table>
<tr>
<td>First Column, First Row</td>
<td>Second Column, First Row</td>
</tr>
<tr>
<table>
<tr>
<td>First Column, Second Row</td>
<td>Second Column, Second Row</td>
<td>Third Column, Second Row</td>
</tr>
</table>
</tr>
</table>
然后,在 Ruby 解析 sn-p 中,您应该确保将内部 <table>...</table> 解析为 Prawn::Table 对象,而不是一行 Prawn::Table::Cell 对象。
任何基于wkhtmltopdf 的选项(例如WickedPDF 或PDFKit)都提供了更简洁的方式来实现HTML 到PDF 的转换解决方案。
你有两个选择:
【讨论】:
您可以使用 prawnto gem 作为模板来使用 prawn 创建表。
例如,如果您定义以下模板,它将绘制具有 x、y 和 z 宽度的 3 列的表格。
data = [ ["Column 1", "Column 2", "Column 3"] ]
table(data, :column_widths => [x,y,z], :cell_style => { :inline_format => true })
【讨论】:
<table> ... </table>)?