【问题标题】:Create a table in Prawn by its html representation通过其 html 表示在 Prawn 中创建一个表
【发布时间】:2013-09-27 02:11:35
【问题描述】:

早期的Prawn gem 允许通过其 html 表示形式创建一个表(将一个 html 表字符串作为 input 参数,如<table class="abc"> .... </table>)。现在我在手册中没有找到这个设施。

那么现在有可能吗?如果没有,那还有其他选择吗?

【问题讨论】:

    标签: ruby-on-rails ruby gem prawn


    【解决方案1】:

    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 中,您应该确保将内部 &lt;table&gt;...&lt;/table&gt; 解析为 Prawn::Table 对象,而不是一行 Prawn::Table::Cell 对象。

    任何基于wkhtmltopdf 的选项(例如WickedPDFPDFKit)都提供了更简洁的方式来实现HTML 到PDF 的转换解决方案。

    你有两个选择:

    1. 完全抛弃 Prawn,更喜欢上面的解决方案。
    2. 使用 Prawn,通过 Nokogiri/Upton 从 HTML 中提取数据并生成 PDF,无需担心样式与 HTML 表示中的样式相同。

    【讨论】:

      【解决方案2】:

      您可以使用 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 })
      

      【讨论】:

      • html表格在哪里(比如&lt;table&gt; ... &lt;/table&gt;)?
      • 我认为不再支持 ...
        标记。这是实现相同结果的另一种方式(您也要求。)
      • 但是我将它作为输入字符串,我需要将该表插入到 pdf 文档中,我该如何处理?
      • 一旦定义了列,就可以使用与上面相同的标签来绘制表格:data = [ ["Column 1 data for row 1", "Column 2 data for row 1", "Column第 1 行的 3 个数据"] ] table(data, :column_widths => [x,y,z], :cell_style => { :inline_format => true })
      • 我有一些css样式附在那个表上,用你的方法画出来并不容易。
      猜你喜欢
      • 2021-01-01
      • 1970-01-01
      • 2011-05-01
      • 2016-10-11
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 2016-07-22
      相关资源
      最近更新 更多