代码之家  ›  专栏  ›  技术社区  ›  daveomcd

如何在Rails中使用wicked?pdf格式的动态头文件?

  •  0
  • daveomcd  · 技术社区  · 6 年前

    我目前有以下代码来尝试在每个页面的开头放置特定的文本。具体文本是 title 传递给我展示的这个部分。

    文档/俱乐部/预付款/玩家评估\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 %>
    

    我想要 标题 出现在每一页上。目前,只要玩家的评价保持在一个页面内,此代码就可以工作。否则,每次新的 player.position_group 改变它的价值。我如何检测wicked_pdf何时启动新页面,以便我可以为每个新页面打印它?

    我本来打算通过为一个头部提供HTML来实现这一点,因为我已经有了它,但是如果我这样做了,我不知道如何更新标题。目前,我只是在我为文档提供的HTML标题中显示文档的静态字符串。

    1 回复  |  直到 6 年前
        1
  •  1
  •   tommyalvarez    6 年前

    编辑:

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

    方法1

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

    a) player.position_group 变化或…

    b)由于每个玩家记录评价内容的长度固定(所有记录占用相同的空间),玩家记录的数量超过了一定数量。如果玩家的记录评估是可变长度的,那么你需要预先计算它,然后累积它,这样当超过某个阈值时,就会输出一个分页符,并且累加器会重置为0。

    我说过了,我会把玩家记录按位置分组 #group_by ,然后如果事先知道每页可容纳多少个玩家记录,请使用 each_slice 关于适合的玩家数量,例如 每片 方法,输出分页符并呈现页眉。如果你不知道每页有多少玩家记录,你可以使用其他策略,当超过阈值时,打破页面+标题。 最后,在每个迭代中 γ群 方法,还输出一个分页符+页眉。

    方法2

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