cbz汇编_CBZ和DjVu:PDF的开源替代品

cbz汇编

最近,我发现我的曾曾祖父在20世纪之交写了两本书:一本是关于航行的,另一本是关于他担任纽约市消防队长的职业的 。 这些书吸引了一些听众,但由于它们是我家族历史的一部分,因此我想保留每本书的数字副本。 但是,我想知道哪种便携式文档格式最适合这种工作?

我很早就决定不要使用PDF。 该格式虽然适用于印前检查,但似乎注定是不间断的功能膨胀,并且会产生难以内省和编辑的文档。 我想要一种具有类似功能的更智能格式。 我想到了两个:漫画档案和DjVu。

漫画档案

顾名思义,漫画档案是一种最常用于漫画的简单格式。 您可以在Comic Book Plus和Digital Comic Museum等网站上看到漫画档案的示例。

漫画档案库的最大功能也是它的最弱之处:它是如此简单,几乎是一种约定,而不是一种格式。 实际上,漫画档案只是扩展名为.cbz,.cbt,.cb7或.cbr的ZIP,TAR,7Z或RAR档案。 它没有用于存储元数据的标准。

但是,它们很容易创建。

创建漫画档案

  1. 创建一个包含图像文件的目录,然后重命名图像,使它们具有固有顺序:
     $ n=0 && for i in *.png ; do mv $i `printf %04d $n`.png ; ((n+=1)); done 
    
  1. 使用您喜欢的存档工具存档文件。 以我的经验,最好地支持CBZ。
     $ zip comicbook.zip -r *.png 
    
  1. 最后,使用适当的扩展名重命名该文件。
     $ 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坐标的最小和最大位置( xminyminxmaxymax )。 每一行都是以像素为单位的矩形,可以在页面的左下角的原点。

您可以将嵌入的文本元素定义为单词,线条和超链接,并且可以映射形状不只是矩形的复杂区域。 您还可以嵌入特殊定义的元数据,例如BibTex键(以小写形式表示(年份,书名,编辑,作者等),以及DocInfo键(从PDF规范中借用,始终以大写字母开头) ,作者,主题,创建者,生产者,CreationDate,ModDate等)。

自动创建DjVu

能够手工制作非常详细的DjVu文档是很不错的选择,但是如果您将DjVu用作日常格式,则会注意到您的应用程序缺少一些在普遍存在的PDF中可用的便利。 例如,很少有(如果有的话)应用程序提供与PDF一样方便的“ 打印到DjVu”或“ 导出到DjVu”选项。

但是,您仍然可以通过利用PDF作为中间格式来使用DjVu。

不幸的是,简单,自动DjVu转换所需的库是根据CPL许可的,该要求具有工具链中的GPL代码无法满足的要求。 因此,它不能作为已编译的库分发,但是您可以自由地自己编译它。

由于DjVuLibre团队提供了出色的构建脚本,因此该过程相对简单。

  1. 首先,使用软件开发工具准备系统。 在Fedora上,快速简便的方法是与DNF组:
     $ sudo dnf group install @c-development  
    在Ubuntu上:
     $ sudo apt-get install build-essential 
    
  1. 接下来,从Sourceforge下载GSDjVu源代码 。 确保下载GSDjVu ,而不是DjVuLibre (换句话说,不要单击文件列表顶部的绿色大按钮,而应单击最新文件)。
  1. 取消存档刚刚下载的文件,然后将目录更改为该文件:
    
         
         
           
           
           
           
    $ cd ~/Downloads
    $ tar xvf gsdjvu-X.YY.tar.gz
    $ cd gsdjvu-X.YY
  1. 创建一个名为BUILD的目录。 必须将其命名为BUILD ,以消除您的创造力:
    
         
         
           
           
           
           
    $ mkdir BUILD
    $ cd BUILD
  1. 下载构建GSDjVu应用程序所需的其他源程序包。 具体来说,您必须下载Ghostscript的源代码(几乎可以肯定已经安装了该源代码,但是需要使用它来进行构建)。 此外,您的系统必须具有jpeglibpngopenjpegzlib的源包。 如果您认为您的系统已经具有这些项目的源包,则可以运行构建脚本;否则,请执行以下操作: 如果找不到源,则脚本将失败,并让您在重试之前纠正错误。
  1. 运行下载中包含的交互式build-gsdjvu构建脚本。 该脚本将解压缩源文件,使用gdevdjvu驱动程序修补Ghostscript,编译Ghostscript并从构建结果中删除不必要的文件。
  1. 您可以在路径中的任何位置安装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汇编

你可能感兴趣的:(python,linux,java,大数据,编程语言)