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
我建议一个更简单的解决方案。
用于pdf.page_number在填充页面时将所有部分的页码存储在哈希中
在代码中,填充其余页面后输出目录。通过在 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)
您应该阅读本文档中关于大纲的章节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)