use*_*559 9 pdf djvu conversion
我尝试了几种在线和离线工具,但在转换过程中没有保留目录 (TOC) 信息。
我想转换一个 5000 页的芬兰语词典,该词典采用 djvu 格式,大约有 5000 个 TOC 条目分层结构以快速查找单词。
知道如何在 DJVU 到 PDF 转换期间保留 TOC 信息吗?
更新:user3124688已在脚本dpsprep 中编写了此过程。
我不知道有什么工具可以为您进行转换。你当然应该能够做到这一点,但它可能需要一些工作。我将概述基本过程。您将需要开源命令行实用程序pdftk和djvused(DjVuLibre 的一部分)。这些可从您的包管理器 (GNU/Linux) 或其网站(Windows、OS X)获得。
首先,使用任何工具将 DJVU 文件转换为 PDF(不带书签)。
假设文件被称为filename.djvu和filename.pdf。
接下来,将 DJVU 轮廓数据输出到文件中,如下所示:
djvused "filename.djvu" -e 'print-outline' > bmarks.out
Run Code Online (Sandbox Code Playgroud)
这是一个以序列化树格式列出 DJVU 文档书签的文件。事实上,它只是一个SEXPR,很容易解析。格式如下:
file ::= (bookmarks
<bookmark>*)
bookmark ::= (name
page
<bookmark>*)
name ::= "<character>*"
page ::= "#<digit>+"
Run Code Online (Sandbox Code Playgroud)
例如:
(bookmarks
("bmark1"
"#1")
("bmark2"
"#5"
("bmark2subbmark1"
"#6")
("bmark2subbmark2"
"#7"))
("bmark3"
"#9"
...))
Run Code Online (Sandbox Code Playgroud)现在,我们需要将这些书签转换为 PDF 元数据所需的格式。该文件的格式为:
file ::= <entry>*
entry ::= BookmarkBegin
BookmarkTitle: <title>
BookmarkLevel: <number>
BookmarkPageNumber: <number>
title ::= <character>*
Run Code Online (Sandbox Code Playgroud)
所以我们的例子会变成:
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
Run Code Online (Sandbox Code Playgroud)
基本上,您只需要编写一个脚本来遍历 SEXPR 树,跟踪级别,并以正确的格式输出每个条目的名称、页码和级别。
获得转换后的列表后,从转换后的 PDF 文件中输出 PDF 元数据:
pdftk "filename.pdf" dump_data > pdfmetadata.out
Run Code Online (Sandbox Code Playgroud)
现在,打开文件并找到开始的行:
NumberOfPages:
在此行之后插入转换后的书签。将新文件另存为pdfmetadata.in
现在我们可以创建一个包含此元数据的新 PDF 文件:
pdftk "filename.pdf" update_info "pdfmetadata.in" output out.pdf
Run Code Online (Sandbox Code Playgroud)
该文件out.pdf应该是带有从 DJVU 文件导入的书签的 PDF 副本。
| 归档时间: |
|
| 查看次数: |
5779 次 |
| 最近记录: |