Ruby on rails 如何在Rails中的pdf中具有动态标题?

Ruby on rails 如何在Rails中的pdf中具有动态标题?,ruby-on-rails,wkhtmltopdf,wicked-pdf,Ruby On Rails,Wkhtmltopdf,Wicked Pdf,我目前有以下代码尝试在我的每一页的开头放置特定的文本。具体的文本是标题,它被传递到我正在展示的这个部分 文档/clubs/advances/player\u evaluation\u groups.html.erb <h2><%= title %></h2> <% players.each do player %> <% if player.position_group != current_position_group %>

我目前有以下代码尝试在我的每一页的开头放置特定的文本。具体的文本是
标题
,它被传递到我正在展示的这个部分

文档/clubs/advances/player\u evaluation\u 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 %>

我希望
标题
显示在每一页上。目前,只要玩家的评估停留在一个页面内,该代码就可以工作。否则,它们只会在每次新的
玩家更改其值时显示在页面顶部。如何检测wicked_pdf何时启动新页面,以便为每个新页面打印

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

编辑:

所以,在我看来,有两种可能性

方法#1 不要使用wicked_pdf提供的标题,并用正文内容模拟它。您必须为每页提供自己的页眉重复逻辑,另外还需要手动计算何时分页符。在以下情况下将发生分页符:

a)
player.position\u group
更改或

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

话虽如此,我会用
#groupby
按position_group对玩家记录进行分组,然后如果事先知道每页适合多少玩家记录,就根据适合的玩家数量使用
每个片段
,因此在
每个片段
方法的每次迭代中,都会输出一个分页符并呈现一个标题。如果您事先不知道每页适合多少玩家记录,则使用其他策略,并在超过阈值时中断页面+页眉。 最后,在
#group_by
方法的每次迭代中,还输出一个分页符+页眉

方法#2
我只是使用了这个方法,因为我还需要在同一个pdf文档中有不同的页脚或页眉,所以我知道它是有效的。按位置分组集合,并针对每个组。。。使用标准页眉和页脚模板,使用wicked_pdf gem
WickedPdf.new.pdf_from_string
的高级方法创建临时pdf文件。生成所有临时pdf文件后,请将它们与gem合并为一个pdf文件:

感谢您花时间提供帮助。也许我遗漏了一些东西,但是如果我想让标题文本更改文档中的某一点——如果我在生成文件时预加载标题,我该怎么做?示例:如果我想在写入所有“A”记录后更改标题文本。“A”记录可以是0到300个记录之间的任意位置。怎么可能按照你提到的方式来做呢?谢谢again@daveomcd很难。我认为header不应该这样工作。它是一个静态的、始终存在的信息集,不会因身体内容而改变,或者至少它不是这样设想的。你最好不要包含一个标题,而是用主体部分“模拟”一个动态标题。这样,您就可以在生成过程中访问所有内容。尽管你必须自己重复逻辑。也许每一片都适用于这个系列,我想你是对的。我认为问题在于我不确定如何确定新页面何时启动。你如何看待每一个片段的作用?@daveomcd你可以通过一个html标签和一个css类来手动控制分页符:。我不知道每条记录的身体内容变化有多大,但也许你可以手动预先计算每页适合的记录数量,并在每个
片段的末尾手动分页符。如果每条记录的内容变化太大,您可以在迭代期间计算每条记录的内容大小,并在达到某个阈值时分页符。@daveomcd我刚刚写出了最终答案,并为您提供了另一种解决方案(方法2)。我刚刚在我的一个项目中尝试过,我认为它更简单。