cbz汇编
最近,我发现我的曾曾祖父在20世纪之交写了两本书:一本是关于航行的,另一本是关于他担任纽约市消防队长的职业的 。 这些书吸引了一些听众,但由于它们是我家族历史的一部分,因此我想保留每本书的数字副本。 但是,我想知道哪种便携式文档格式最适合这种工作?
我很早就决定不要使用PDF。 该格式虽然适用于印前检查,但似乎注定是不间断的功能膨胀,并且会产生难以内省和编辑的文档。 我想要一种具有类似功能的更智能格式。 我想到了两个:漫画档案和DjVu。
漫画档案
顾名思义,漫画档案是一种最常用于漫画的简单格式。 您可以在Comic Book Plus和Digital Comic Museum等网站上看到漫画档案的示例。
漫画档案库的最大功能也是它的最弱之处:它是如此简单,几乎是一种约定,而不是一种格式。 实际上,漫画档案只是扩展名为.cbz,.cbt,.cb7或.cbr的ZIP,TAR,7Z或RAR档案。 它没有用于存储元数据的标准。
但是,它们很容易创建。
创建漫画档案
- 创建一个包含图像文件的目录,然后重命名图像,使它们具有固有顺序:
$ n=0 && for i in *.png ; do mv $i `printf %04d $n`.png ; ((n+=1)); done
- 使用您喜欢的存档工具存档文件。 以我的经验,最好地支持CBZ。
$ zip comicbook.zip -r *.png
- 最后,使用适当的扩展名重命名该文件。
$ mv comicbook.zip comicbook.cbz
生成的文件应在大多数设备上打开。 在Linux上, Evince和Okular都可以打开CBZ文件。 在Android上, Document Viewer和Bubble可以打开它们。
解压缩漫画档案
从漫画档案中恢复数据也很容易:只需取消存档CBZ文件。
由于您喜欢的存档工具可能无法将.cbz扩展名识别为有效的存档,因此最好将其重命名为其本机扩展名:
$ mv comicbook.cbz comicbook.zip
$ unzip comicbook.zip
DjVu
DjVu (发音为“déjàvu”)是AT&T于20年前开发的一种更高级的格式。 这是一种具有高级压缩技术的数字文档格式,可以在您可能没有意识到的更多应用程序中查看,包括Evince , Okular ,在线DjVu.js , DjVu.js Firefox 浏览器扩展, GNU Emacs ,Android上的Document Viewer以及开源,Sourceforge上的跨平台DjView查看器。
您可以在djvu.org上阅读有关DjVu的更多信息并找到示例.djvu文件。
DjVu具有几个吸引人的功能,包括图像压缩,轮廓(书签)结构以及对嵌入式文本的支持。 使用免费和开源工具很容易进行内部检查和编辑。
安装DjVu
开源工具链是DjVuLibre ,您可以在发行版的软件存储库中找到它。 例如,在Fedora上:
$ sudo dnf install djvulibre
创建一个DjVu文件
.djvu是已被编码为DjVu文件的图像。 .djvu可以包含一个或多个图像(存储为“页面”)。
要手动生成DjVu,可以使用以下两种编码器之一: c44用于高质量图像, cjb2用于简单双色调图像。 每个编码器接受不同的图像格式:c44可以处理.pnm或.jpeg文件,而cjb2可以处理.pbm或.tiff图像。
如果需要预处理图像,可以在终端中使用Image Magick进行处理 ,使用-density选项定义所需的分辨率:
$ convert -density 200 foo.png foo.pnm
然后,您可以将其转换为DjVu:
$ c44 -dpi 200 foo.pnm foo.djvu
如果图像很简单,例如白页上的黑色文本,则可以尝试使用较简单的编码器进行转换。 如有必要,请先使用Image Magick将其转换为兼容的中间格式:
$ convert -density 200 foo.png foo.pbm
然后将其转换为DjVu:
$ cjb2 -dpi 200 foo.pbm foo.djvu
您现在有了一个简单的单页.djvu文档。
创建多页DjVu文件
尽管单页DjVu很有用,但鉴于DjVu有时具有出色的压缩效果,它最常用作多页格式。
假设您有许多.djvu文件的目录,则可以使用djvm命令将它们捆绑在一起:
$ djvm -c pg_1.djvu two.djvu 003.djvu mybook.djvu
与CBZ存档不同,捆绑映像的名称对其DjVu文档中的顺序没有影响,而是保留了您在命令中提供的顺序。 如果您有先见之明以自然的排序顺序(001.djvu,002.djvu,003.djvu,004.djvu等)命名,则可以使用通配符:
$ djvm -c *.djvu mybook.djvu
处理DjVu文档
使用djvm编辑DjVu文档很容易。 例如,您可以将页面插入到现有的DjVu文档中:
$ djvm -i mybook.djvu newpage.djvu 2
在此示例中,页面为newpage。 djvu成为文件mybook .djvu中的新页面2。
您也可以删除页面。 例如,要从mybook.djvu删除第4页:
$ djvm -d mybook.djvu 4
设定轮廓
您可以将元数据添加到DjVu文件中,例如大纲(通常称为“书签”)。 若要手动执行此操作,请创建带有文档轮廓的纯文本文件。 DjVu大纲以类似Lisp的结构表示,带有开头的书签元素,后跟书签名称和页码:
(bookmarks
("Front cover" "#1")
("Chapter 1" "#3")
("Chapter 2" "#18")
("Chapter 3" "#26")
)
括号定义轮廓中的级别。 大纲当前只有顶级书签,但是任何部分都可以通过延迟其右括号来包含子部分。 例如,为第1章添加一个小节:
(bookmarks
("Front cover" "#1")
("Chapter 1" "#3"
("Section 1" "#6"))
("Chapter 2" "#18")
("Chapter 3" "#26")
)
大纲完成后,保存文件,并使用djvused命令将其应用于DjVu文件:
$ djvused -e 'set-outline outline.txt' -s mybook.djvu
打开DjVu文件以查看轮廓。

嵌入文字
如果要存储要创建的文档的文本,可以将文本元素( djvused术语中的“隐藏文本”)嵌入DjVu文件中,以便Okular或DjView之类的应用程序可以选择文本并将其复制到用户剪贴板中。
这是一个复杂的操作,因为要嵌入文本,必须首先拥有文本。 如果您可以访问良好的OCR应用程序(或转录打印页面的时间和精力),则可能会有该数据,但是必须将文本映射到位图图像。
一旦有了每行(或者,如果愿意,每个单词)的文本和坐标,就可以为每个页面编写一个带有块的djvused脚本:
select; remove-ant; remove-txt
# -------------------------
select "p0004.djvu" # page 4
set-txt
(page 0 0 2550 3300
(line 1661 2337 2235 2369 "Fires and Fire-fighters")
(line 1761 2337 2235 2369 "by John Kenlon"))
.
# -------------------------
select "p0005.djvu" # page 5
set-txt
(page 0 0 2550 3300
(line 294 2602 1206 2642 "Some more text here, blah blah blah."))
每条线的整数代表每条线的X和Y坐标的最小和最大位置( xmin , ymin , xmax , ymax )。 每一行都是以像素为单位的矩形,可以在页面的左下角的原点。
您可以将嵌入的文本元素定义为单词,线条和超链接,并且可以映射形状不只是矩形的复杂区域。 您还可以嵌入特殊定义的元数据,例如BibTex键(以小写形式表示(年份,书名,编辑,作者等),以及DocInfo键(从PDF规范中借用,始终以大写字母开头) ,作者,主题,创建者,生产者,CreationDate,ModDate等)。
自动创建DjVu
能够手工制作非常详细的DjVu文档是很不错的选择,但是如果您将DjVu用作日常格式,则会注意到您的应用程序缺少一些在普遍存在的PDF中可用的便利。 例如,很少有(如果有的话)应用程序提供与PDF一样方便的“ 打印到DjVu”或“ 导出到DjVu”选项。
但是,您仍然可以通过利用PDF作为中间格式来使用DjVu。
不幸的是,简单,自动DjVu转换所需的库是根据CPL许可的,该要求具有工具链中的GPL代码无法满足的要求。 因此,它不能作为已编译的库分发,但是您可以自由地自己编译它。
由于DjVuLibre团队提供了出色的构建脚本,因此该过程相对简单。
- 首先,使用软件开发工具准备系统。 在Fedora上,快速简便的方法是与DNF组:
在Ubuntu上:$ sudo dnf group install @c-development
$ sudo apt-get install build-essential
- 接下来,从Sourceforge下载GSDjVu源代码 。 确保下载GSDjVu ,而不是DjVuLibre (换句话说,不要单击文件列表顶部的绿色大按钮,而应单击最新文件)。
- 取消存档刚刚下载的文件,然后将目录更改为该文件: $ cd ~/Downloads
$ tar xvf gsdjvu-X.YY.tar.gz
$ cd gsdjvu-X.YY
- 创建一个名为BUILD的目录。 必须将其命名为BUILD ,以消除您的创造力: $ mkdir BUILD
$ cd BUILD
- 下载构建GSDjVu应用程序所需的其他源程序包。 具体来说,您必须下载Ghostscript的源代码(几乎可以肯定已经安装了该源代码,但是需要使用它来进行构建)。 此外,您的系统必须具有jpeg , libpng , openjpeg和zlib的源包。 如果您认为您的系统已经具有这些项目的源包,则可以运行构建脚本;否则,请执行以下操作: 如果找不到源,则脚本将失败,并让您在重试之前纠正错误。
- 运行下载中包含的交互式build-gsdjvu构建脚本。 该脚本将解压缩源文件,使用gdevdjvu驱动程序修补Ghostscript,编译Ghostscript并从构建结果中删除不必要的文件。
- 您可以在路径中的任何位置安装GSDjVu 。 如果您不知道PATH变量是什么,则可以通过echo $ PATH看到它。 例如,将其安装到/ usr / local前缀: $ sudo cp -r BUILD/INST/gsdjvu /usr/local/lib64
$ cd /usr/local/bin
$ sudo ln -s ../lib64/gsdjvu/gsdjvu gsdjvu
将PDF转换为DjVu
现在,您已经构建了Ghostscript驱动程序,将PDF转换为DjVu只需一个命令:
$ djvudigital --words mydocument.pdf mydocument.djvu
这会将PDF中的所有页面,书签和嵌入的文本转换为DjVu文件。 --words
选项将所有映射的嵌入式PDF文本映射到DjVu文件中的相应点。 如果没有嵌入的PDF,则不会保留任何嵌入的文本。 使用此工具,您可以在应用程序中使用便捷的PDF功能,并最终得到DjVu文件。
为什么选择DjVu和CBZ?
DjVu和漫画书存档是您的档案库的绝佳附加文档格式。 将一系列图像填充为PostScript格式(如PDF)或显然主要用于文本的格式(如EPUB)似乎很愚蠢,因此将CBZ和DjVu作为附加选项很好。 它们可能不适用于您的所有文档,但是最好对它们感到满意,以便在最有意义的时候使用它们。
翻译自: https://opensource.com/article/19/3/comic-book-archive-djvu
cbz汇编