我需要创建带有大量注释的大型 pdf 文档。 它将文本与上下文索引中的关键字结合起来:全文中的每个重要单词都链接到上下文索引中的相应单词,然后再返回。
在 32Gb 的 Linux 桌面上,使用 perl PDF::API2 我可以成功创建一个 1000 页的文档,每页有 750 个注释。 超过这个值会导致进程挂起,可能是在耗尽 RAM 后。
我尝试使用 GotoR 注释将文档分解为单独的 pdf 文件,但这显然仅适用于 Acrobat Reader,而且 Acrobat Reader 也存在安全风险。
还有其他 perl 或 python 库能够更好地处理这个问题吗?
我无法用 Perl 或 Python 给你答案,而且你也没有提供示例代码。然而,在 Ruby 中,可以使用 HexaPDF 和以下脚本来衡量执行时间和内存使用情况:
require 'hexapdf'
HexaPDF::Composer.create('stack.pdf', skip_page_creation: true) do |c|
c.page_style(:default, page_size: :A4) do |canvas, style|
style.frame = style.create_frame(canvas.context, 36)
end
link = {link: "https://example.com", fill_color: 'hp-blue', text: "Ex"}
1000.times do |i|
puts "Creating page #{i + 1}"
c.new_page
c.formatted_text(Array.new(750) { [' text ', link.dup] }.flatten)
end
puts "Writing PDF"
end
该脚本每页创建 750 个链接注释,总共 1000 个页面。
将 Ruby 3.3 与 YJIT 结合使用,需要不到 2 分钟的时间,并使用 1,838,884k 内存(通过
/usr/bin/time
测量)。生成的文件大小约为 24MB(对象流约为 18MB,即注释;内容流约为 5.5MB),包含 755,762 个 PDF 对象。