我尝试了几种在线和离线工具,但在转换过程中目录(TOC)信息未能保留。
我想转换一本 5000 页的芬兰语词典,该词典为 djvu 格式,且有大约 5000 个按层次结构组织的 TOC 条目,以便快速查找单词。
您知道如何在 DJVU 到 PDF 转换过程中保留 TOC 信息吗?
答案1
更新: 用户3124688已在脚本中编写了此过程dpsprep。
我不知道有什么工具可以帮你完成转换。你当然应该能够做到,但可能需要一点工作。我将概述基本过程。你需要开源命令行实用程序pdftk
和djvused
(DjVuLibre 的一部分)。这些可从您的软件包管理器(GNU/Linux)或其网站(Windows、OS X)获取。
步骤 1:转换文件文本
首先,使用任何工具将 DJVU 文件转换为 PDF(不带书签)。
假设文件名为
filename.djvu
和filename.pdf
。步骤 2:提取 DJVU 大纲
接下来,将 DJVU 轮廓数据输出到文件,如下所示:
djvused "filename.djvu" -e 'print-outline' > bmarks.out
这是一个以序列化树格式列出 DJVU 文档书签的文件。实际上,它只是一个性取向,并且可以轻松解析。格式如下:
file ::= (bookmarks <bookmark>*) bookmark ::= (name page <bookmark>*) name ::= "<character>*" page ::= "#<digit>+"
例如:
(bookmarks ("bmark1" "#1") ("bmark2" "#5" ("bmark2subbmark1" "#6") ("bmark2subbmark2" "#7")) ("bmark3" "#9" ...))
步骤 3:将 DJVU 大纲转换为 PDF 元数据格式
现在,我们需要将这些书签转换为 PDF 元数据所需的格式。此文件的格式为:
file ::= <entry>* entry ::= BookmarkBegin BookmarkTitle: <title> BookmarkLevel: <number> BookmarkPageNumber: <number> title ::= <character>*
因此我们的例子将变成:
BookmarkBegin BookmarkTitle: bmark1 BookmarkLevel: 1 BookmarkPageNumber: 1 BookmarkBegin BookmarkTitle: bmark2 BookmarkLevel: 1 BookmarkPageNumber: 5 BookmarkBegin BookmarkTitle: bmark2subbmark1 BookmarkLevel: 2 BookmarkPageNumber: 6 BookmarkBegin BookmarkTitle: bmark2subbmark2 BookmarkLevel: 2 BookmarkPageNumber: 7 BookmarkBegin BookmarkTitle: bmark3 BookmarkLevel: 1 BookmarkPageNumber: 9
基本上,您只需要编写一个脚本来遍历 SEXPR 树,跟踪级别,并以正确的格式输出它所遇到的每个条目的名称、页码和级别。
步骤 4:提取 PDF 元数据并拼接转换后的书签
获得转换后的列表后,从转换后的 PDF 文件中输出 PDF 元数据:
pdftk "filename.pdf" dump_data > pdfmetadata.out
现在,打开该文件并找到以以下内容开头的行:
NumberOfPages:
将转换后的书签插入此行之后。将新文件另存为
pdfmetadata.in
步骤 5:创建带书签的 PDF
现在我们可以创建一个包含以下元数据的新 PDF 文件:
pdftk "filename.pdf" update_info "pdfmetadata.in" output out.pdf
该文件
out.pdf
应为你的 PDF 的副本,其中包含从 DJVU 文件导入的书签。
答案2
根据用户 @pyrocrasty 在上面给出的非常清晰的概述(谢谢!),我实现了一个 DJVU 到 PDF 转换器,它保留了 OCR 文本和书签结构。您可以在这里找到它:
https://github.com/kcroker/dpsprep
对 OCR 数据的感谢请转至 Ubuntu 论坛上的 @zetah!
答案3
可以使用迪威玩具免费软件应用程序,位于“转为 PDF”选项卡上。但它不会转换链接。