将 djvu 转换为 pdf 并保留目录,如何实现?

将 djvu 转换为 pdf 并保留目录,如何实现?

我尝试了几种在线和离线工具,但在转换过程中目录(TOC)信息未能保留。

我想转换一本 5000 页的芬兰语词典,该词典为 djvu 格式,且有大约 5000 个按层次结构组织的 TOC 条目,以便快速查找单词。

您知道如何在 DJVU 到 PDF 转换过程中保留 TOC 信息吗?

答案1

更新: 用户3124688已在脚本中编写了此过程dpsprep


我不知道有什么工具可以帮你完成转换。你当然应该能够做到,但可能需要一点工作。我将概述基本过程。你需要开源命令行实用程序pdftkdjvused(DjVuLibre 的一部分)。这些可从您的软件包管理器(GNU/Linux)或其网站(Windows、OS X)获取。

  • 步骤 1:转换文件文本

    首先,使用任何工具将 DJVU 文件转换为 PDF(不带书签)。

    假设文件名为filename.djvufilename.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”选项卡上。但它不会转换链接。

相关内容