Prawn:包含页码的内容表

Dir*_*ohm 7 ruby pdf-generation ruby-on-rails prawn

我需要用Prawn创建一个目录.add_dest我的代码中有函数调用,内容表中有正确的链接:

add_dest('Komplett', dest_fit(page_count - 1))
Run Code Online (Sandbox Code Playgroud)

text "* <link anchor='Komplett'> Vollstaendiges Mitgliederverzeichnis </link>", :inline_format = true
Run Code Online (Sandbox Code Playgroud)

这是有效的,我得到可点击的链接,将我转发到正确的页面.但是,我需要在内容表中包含页码.如何打印出来?

小智 5

我建议一个更简单的解决方案。

  1. 用于pdf.page_number在填充页面时将所有部分的页码存储在哈希中

  2. 在代码中,填充其余页面后输出目录。通过在 PDF 中导航,将目录插入到文档的正确位置pdf.go_to_page(page_num)

例如:

render "pdf/frontpage", p: p
toc.merge!(p.page_number => "Section_Title")

p.start_new_page
toc.merge!(p.page_number => "Section_Title")
render "pdf/calendar"

p.start_new_page
toc.merge!(p.page_number => "Section_Title")
render "pdf/another_section"

p.go_to_page(1)
p.start_new_page
toc.merge!(p.page_number => "Table of Contents")
render "pdf/table_of_contents", table_of_contents: toc
Run Code Online (Sandbox Code Playgroud)


sai*_*ala 3

您应该阅读本文档中关于大纲的章节http://prawn.majesticeacreature.com/manual.pdf,第 96 页。它通过示例解释了如何创建目录。

更新

destinations, page_references = {}, {}

page_count.downto(1).each {|num| page_references[num] = state.store.object_id_for_page(num)}

dests.data.to_hash.each_value do |values|
    values.each do |value|
        value_array             = value.to_s.split(":")
        dest_name               = value_array[0]
        dest_id                 = value_array[1].split[0]
        destinations[dest_name] = Integer(dest_id)
    end 
end 

state.store.each do |reference| 
    if !(dest_name = destinations.key(reference.identifier)).nil?
        puts "Destination - #{dest_name} is on Page #{page_references.key(Integer(reference.data[0].to_s.split[0]))}"
    end 
end   
Run Code Online (Sandbox Code Playgroud)

  • 我真的不明白这段代码 - “state”和“dests”在哪里定义?如何追溯性地将这些数据插入到内容页面(可能位于文档的开头)? (3认同)
  • 也许我错了或者我看不懂 - 但这描述了如何创建大纲,它是(简单描述的)PDF阅读器中各部分或页面的链接列表。我已经看过这个了。我需要的是动态发现文档本身目录中的页码,其中内容会不时发生变化(整个文档消失,条目离开)我正在寻找类似于文档创建后枚举页面的功能。要动态发现页码,请将其分配给一个变量,并在创建文档后将其插入到目录中文档的开头 (2认同)