我目前有以下代码尝试在每个页面的开头放置特定的文本。具体的文字是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标题中显示文档的静态字符串。
答案 0 :(得分:1)
编辑:
所以,按照我的看法,有两种可能性。
请勿使用wicked_pdf提供的标题,并使用正文内容对其进行模拟。您将必须为每页提供自己的标题重复逻辑,此外,还需要手动计算何时分页。在以下情况下会发生分页符:
a)player.position_group
更改或...
b)假定每个播放器记录评估内容具有固定的长度(所有记录占用相同的空间),则播放器记录的数量超过一定数量。如果玩家记录评估的长度是可变的,那么您将需要对其进行预先计算并进行累加,以便在超过某个阈值时输出分页符,并将累加器重置为0。
话虽如此,我会用#group_by
按position_group对球员记录进行分组,然后如果提前知道每页可容纳多少球员记录,则在适合的球员数量上使用each_slice
,依此类推each_slice
方法的每次迭代,都输出一个分页符并呈现一个标题。如果您事先不知道每页可容纳多少播放器记录,则可以使用其他策略,并在超过阈值时中断页面+标头。
最后,在#group_by
方法的每次迭代中,您还将输出分页符+标头。
我只是使用了此方法,因为我还需要在同一pdf文档中使用不同的页脚或页眉,因此我知道它可以工作。按position_group对集合进行分组,并为每个组...使用标准的页眉和页脚模板,使用wicked_pdf gem WickedPdf.new.pdf_from_string
的高级方法创建一个temp pdf文件。生成所有临时pdf文件后,将它们与gem结合在一个pdf文件中:combine_pdf