如何在Rails的wicked_pdf中具有动态标头?

时间:2018-07-31 14:26:15

标签: ruby-on-rails wkhtmltopdf wicked-pdf

我目前有以下代码尝试在每个页面的开头放置特定的文本。具体的文字是title,该文字将传递给我正在显示的此部分。

documents / clubs / advances / player_evaluation_groups.html.erb

<h2><%= title %></h2>
<% players.each do player %>
  <% if player.position_group != current_position_group %>
    <div class="page-break"></div>
    <h2><%= title %></h2>
  <% end %>
  <%= render partial: "documents/clubs/advances/player_evaluation", locals: { player: player, game: advance.pro_game } %>
<% end %>

我希望title显示在每个页面上。当前,只要玩家评价停留在一页内,此代码就起作用。否则,每次新的player.position_group更改其值时,它们只会显示在页面顶部。如何检测wicked_pdf何时开始新页面,以便可以在每个新页面上打印它?

我打算通过为标头提供html来做到这一点,因为我已经有了它,但是我不确定如果这样做的话如何更新标题。目前,我只是在为文档提供的html标题中显示文档的静态字符串。

1 个答案:

答案 0 :(得分:1)

编辑:

所以,按照我的看法,有两种可能性。

方法#1

请勿使用wicked_pdf提供的标题,并使用正文内容对其进行模拟。您将必须为每页提供自己的标题重复逻辑,此外,还需要手动计算何时分页。在以下情况下会发生分页符:

a)player.position_group更改或...

b)假定每个播放器记录评估内容具有固定的长度(所有记录占用相同的空间),则播放器记录的数量超过一定数量。如果玩家记录评估的长度是可变的,那么您将需要对其进行预先计算并进行累加,以便在超过某个阈值时输出分页符,并将累加器重置为0。

话虽如此,我会用#group_by按position_group对球员记录进行分组,然后如果提前知道每页可容纳多少球员记录,则在适合的球员数量上使用each_slice,依此类推each_slice方法的每次迭代,都输出一个分页符并呈现一个标题。如果您事先不知道每页可容纳多少播放器记录,则可以使用其他策略,并在超过阈值时中断页面+标头。 最后,在#group_by方法的每次迭代中,您还将输出分页符+标头。

方法2

我只是使用了此方法,因为我还需要在同一pdf文档中使用不同的页脚或页眉,因此我知道它可以工作。按position_group对集合进行分组,并为每个组...使用标准的页眉和页脚模板,使用wicked_pdf gem WickedPdf.new.pdf_from_string的高级方法创建一个temp pdf文件。生成所有临时pdf文件后,将它们与gem结合在一个pdf文件中:combine_pdf