一、PdgCntEditor是什么?
二、为什么要用PdgCntEditor?
三、怎么用PdgCntEditor?

一、PdgCntEditor是什么?

这是一个目录编辑器,可以创建、编辑PDF、DjVu、PDG的目录,其中PDG支持图像版PDG目录(bookcontents.dat)和文字版PDG目录(catalog.dat),并且对于zip、uvz文件可以不解压直接编辑、保存其中的PDG目录。

当然这里首先要明确一下“目录”指的是什么。在纸质书中这个概念本身应该没有什么歧义,指的是在书籍正文之前的索引,用树形结构列出书中的章节号及其所对应的页码 。这样一方面可以看出书中的大概内容(大纲),另一方面如果想直接翻到某章节则按照所对应的页码翻就行了。但在PDF、Djvu等电子文档中,对于同样的东西却有不同的名称和作用。

对于PDF,在《PDF Reference》中与“目录”同意的词是Outline(大纲),但在中文版Acrobat界面中用的词是“书签”(bookmark),即Acrobat左侧的导航窗口,点击可以跳到本文档中的指定位置,甚至是另外一个文档中的指定位置。至于所跳位置是精确到页码还是页面中章节号所在的位置,则取决于书签中的目标(Destination)是怎么定义的:如果是页码,则只能跳到章节所在页的开头;如果是命名书签或其他,则可跳到章节号所在位置,如下图所示。

对于DjVu,在《Lizardtech DjVu Reference V3》中用的词包括Outline(大纲)、Navigation(导航)和书签(bookmark),在WinDjView界面中则直接是“目录”(contents),如下图所示。但与PDF不同,DjVu只能跳到制定页码,不能跳到页面中的某个位置。另外理论上说DjVu中的目录是允许跳到另外一个文件的,但在PdgCntEditor中对此进行了限制,只能跳到本文档中的指定页码,不能跳到其他文件。

对于PDG,文件名中用的contents、catalog都是“目录”的意思,在官方版SSREADER界面中则称为“章节目录”,如下图所示。PDG目录只能跳到同一本书的指定页码,不能跳到另外一本书或页面中的某个位置。

而在支持PDF、Djvu、PDG等多格式的浏览器UnicornViewer(简称UV)中,统一把以上各种文件的书签、大纲等统称为“目录”,如下图所示。

总之,在PdgCntEditor和本系列教程中,“目录”这个词就是对PDF、DjVu、PDG等电子文档格式中的大纲、导航、书签、目录的统称,具体表现形式就是在浏览器左侧显示的树形章节列表,点击就可以跳到指定的章节。

二、为什么要用PdgCntEditor?

目前对于PDF、DjVu、PDG都有独立的目录编辑器,但同时支持这几种格式的目前似乎只有PdgCntEditor,以后也大概不会再有。所以使用PdgCntEditor的理由也就很充分了:

  1. 一个软件搞定多种格式,不论是存储还是学习成本都是最优的。
  2. 便于在不同的电子文档格式间转换目录。例如要把DjVu格式中的目录复制到PDF中,如果不用PdgCntEditor,就需要用到两个软件:先用DjVuToy导出DjVu目录,然后用FreePic2Pdf把目录挂到PDF中。而使用PdgCntEditor的操作就简单得多:
    1. 启动PdgCntEditor,把需要复制目录的DjVu文件拖拽进来打开。
    2. Ctrl+A全选,Ctrl+C复制到剪贴板。
    3. 把需要挂目录的PDF文件拖拽进来打开。
    4. Ctrl+V复制,Ctrl+S保存,搞定收工。

当然在此之前可能还需要问一个问题:为什么要创建或编辑目录?

先说为什么要编辑目录。我这个人有点强迫症,一本电子书到手如果没有目录就算了(后面会详细说),但如果有目录却把目录做得乱七八糟,例如没有层级关系、页码不准确等,那是一定要修正过来的。偏偏我见过的PDG目录,尤其是老一点的PDG书籍的目录,按照我的标准基本上就没有不需要重新编辑的。所以强悍的下载软件在大多数情况下都能帮我下载到目录文件,有时候 却成了一种烦恼。

再说为什么一定要有目录,即使没有现成的也要自己创建。这个主要是某些强迫症患者,如果看不到详细目录,不能通过目录跳来跳去,就会觉得浑身不舒服,就算为此付出一定代价也行。某些论坛上收费或免费(其实还是在赚论坛币)的目录制作代理就不说了,我甚至见过在网上把PdgCntEditor、UV打包出售,再收费开课讲怎么用这两个软件做目录的——还真有人为此付钱。所以我才决定免费发布这个系列教程,大家如果真有需要还是学会自力更生吧,没有必要花那冤枉钱。

至于我自己,因为我一直都用UV看PDG、DjVu等文档,所以如果没有现成的目录文件,我一般情况下也就不折腾了:UV本身是支持同一个文档在多个窗口中打开的,所以打开一本书后如果发现没有目录,就通过“窗口->新建窗口”打开一个新窗口,然后定位到目录页,看看想跳到哪个章节的页码,再切换到原先的浏览窗口,在右上角的浮动条中输入页码,一回车就跳过去了。

如果用的是最新版UV,而且跳的次数也不是很频繁,则没有必要单独为目录页开一个新窗口:在正常的浏览窗口中先定位到目录页,看看需要跳到哪一页,然后点击左侧目录窗口中的页码跳转(高版本UV会自动按照页码生成目录,用页码做目录项名称),或者在右上角的浮动条中输入页码跳过去。如果跳完后想再跳回到目录页,点击工具条上的“后退”按钮即可。注意v0.41之前的UV版本在后退、前进按钮的实现逻辑上有点问题,所以这种方法只能用于最新版本的UV。

但对于扫描版电子书,则还有一个不得不创建目录的理由:文本搜索。PDF、DjVu格式的扫描版可以内含隐藏文字用于搜索,但扫描版PDG就没有这种好事,所以就只能通过搜索目录文字 、bookinfo.dat文件等来查找内容 ,这也是当年我在readfree大力鼓吹我们应该尽量丰富bookinfo.dat文件内容的原因:对于扫描版PDG,任何可用于搜索的文本都是弥足珍贵的。 在后面的教程中给出的所有PDG版例子中都含信息丰富的bookinfo.dat文件,有兴趣的可以和官方版SSREADER生成的对比一下,其实bookinfo.dat文件本身就是一个ini格式的文本文件,随便找一个文本编辑器都能打开。高版本UV可以对当前正在阅读的文件 的目录进行搜索,也可以对指定文件夹下的所有zip/uvz搜索目录、bookinfo.dat文件中的文字。 我写的免费的FindStr软件则只能对bookinfo.dat文件进行搜索。所以我一直很鄙视那些把bookinfo.dat文件中的信息全部搬到文件名中,搞得文件名超长的行为:亲,明明用很简单的文本搜索就能搞定的事情,何必非要把自己逼上绝路?

三、怎么用PdgCntEditor?

PdgCntEditor可以单独使用:

  1. 启动PdgCntEditor,把需要编辑或创建目录的文件拖过来打开。如果是PDG文件且还没有目录文件,可以从其他有目录文件的PDG书籍中复制一个bookcontents.dat文件,打开后删掉原有内容就好。
  2. 编辑完成后按Ctrl+S或工具条上的“保存”按钮即可。注意在保存前如果文件已经在Acrobat、WinDjView或其他浏览器中打开,则需要先关闭浏览器再保存,否则可能会因为文件被浏览器加锁而导致文件保存失败。

强烈建议PdgCntEditor与UV配合使用,即将PdgCntEditor与UV放在同一个文件夹下,用UV打开文件浏览,发现需要编辑或创建目录时点击UV工具条上的“编辑目录”按钮启动PdgCntEditor进行编辑。这样配合使用的好处是:

  1. 在UV中看书的的时候,如果发现没有目录,或目录中有问题,随时可以启动PdgCntEditor进行编辑,并且在UV中不需要关闭正在看的书籍。 如果PDG中没有目录,从UV启动PdgCntEditor时会自动创建空目录文件,不需要手工复制。
  2. PdgCntEditor保存以后,在UV中立刻自动刷新目录显示,因此可以及时看到目录编辑效果。

所以我见到的收费项目,就是把PdgCntEditor和D版UV打包一起卖的。

启动PdgCntEditor后缺省进入的是文字编辑界面,编辑窗口上面一排的页签都是给PDG目录用的,PDF、DjVu只在“正文页”里操作即可。通常PDG书签也没有必要在除了“正文页”之外的页签中输入内容,因为UV、Pdg2Pic都会自动补充这些项。如果非要输入,例如想把前言页中的几篇前言分开, 则需注意在各编辑窗口中页码都是从1开始的,即封面页的页码从1开始,前言页、目录页等的页码也都从1开始。

如果只是需要调整目录项的层级(缩进)关系,在树形界面中操作可能比文字界面中更直观一点,所以点击工具条上的“切换编辑模式”按钮即可从缺省的文字编辑界面切换到树形编辑界面,或切换回来。但树形编辑界面的 其他编辑功能比较弱,我自己都很少用,所以本教程就以文字编辑界面为主。

不论是什么界面,第一次使用PdgCntEditor都建议做以下事情:

  1. 点击工具条上的“字体”按钮,根据当前屏幕分辨率选择合适的字号。缺省的字号在高分辨率屏幕上可能太小。
  2. 点击工具条上的“使用说明”按钮,先把PdgCntEditor的使用说明看一遍再说。

======================================朴素的分割线===================================

由于空间有限,本系列教程的后续部分就不发到这里了,有需要的可以直接到我的网盘下载CHM格式的完整版本。后续的内容包括:

教程二:编辑已有目录
  一、基本编辑操作
  二、手工调整目录级数
  三、自动缩进
  四、利用正则表达式处理缩进
  五、加减页码
  六、一个综合性的练习例子

教程三:从头创建新目录
  一、手工录入创建目录
  二、通过搜索到的文本生成目录
  三、通过OCR生成目录(UV 0.42版之前)
  四、通过OCR生成目录(UV 0.42版之后)
  五、多栏目录OCR与OCR时的图像处理

PdgCntEditor系列教程一:基础知识的更多相关文章

  1. NGUI系列教程一

    NGUI是Unity的一个插件,使用它来制作你的游戏UI必定将事半功倍.为什么这么说呢?首先我们说说GUI与NGUI的区别,GUI是Unity自带的绘制界面工具,它的成像原理是基于表层的,所以执行效率 ...

  2. CRL快速开发框架系列教程一(Code First数据表不需再关心)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  3. Spring Ioc源码分析系列--Ioc的基础知识准备

    Spring Ioc源码分析系列--Ioc的基础知识准备 本系列文章代码基于Spring Framework 5.2.x Ioc的概念 在Spring里,Ioc的定义为The IoC Containe ...

  4. Laravel系列教程一:安装及环境配置

    免费视频教程地址https://laravist.com/series/laravel-5-basic 最近在SF上面看到越来越多的Laravel相关的问题,而作为一个Laravel的脑残粉,本来打算 ...

  5. 【Linux系列】Linux基础知识整理

    Linux操作系统在服务器领域广泛的使用到,作为一个后台开发工程师很有必要了解Linux相关的知识. 本篇日志是我学习Linux过程中的简单记录和总结.本着"理论够用,实践为主"的 ...

  6. cocos2d-x-lua基础系列教程一(hello lua)

    myscene.lua function ERROR_TRACBACK(msg) print (==========) print ("lua error is "..tostri ...

  7. .NET面试题系列[3] - C# 基础知识(1)

    1 类型基础 面试出现频率:基本上肯定出现 重要程度:10/10,身家性命般重要.通常这也是各种招聘工作的第一个要求,即“熟悉C#”的一部分.连这部分都不清楚的人,可以说根本不知道自己每天都在干什么. ...

  8. 前端系列之CSS基础知识概述

    1.什么是DIV (1).div就是html一个普通标签,进行区域划分.特性:独自占一行.独自不能实现复杂效果.必须结合css样式进行渲染. (2).div通常其是块级元素 (3).div是定义文档中 ...

  9. Objective-C系列总结之基础知识

    //第一个程序示例 #import <Foundation/Foundation.h> int main(int argc,const char * argv[]) { @autorele ...

随机推荐

  1. 【转】Linux下vim的基本操作

    原文链接 Linux vi/vim 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能 ...

  2. .net core 调用webservice同步方法

    更新VS2019 16.1版本 支持WebService同步调用 在连接服务中->选择客户端选项->Generate Synchronout Operations选择划勾   生成同步操作 ...

  3. XMPP即时通讯协议使用(一)——Openfire安装

    Openfire服务器安装 下载地址:https://www.igniterealtime.org/downloads/index.jsp,根据你的操作系统,选择对应的下载版本.本文选择的是openf ...

  4. 07.Linux-CentOS系统库文件libaudit.so.1丢失问题

    问题:缺少共享库文件sudo: error while loading shared libraries: libaudit.so.1: cannot open shared object file: ...

  5. 数据库_PXC群集与存储引擎

    1. PXC介绍与群集搭建; 2.数据存储引擎. 一, PXC介绍 1.介绍 PXC(Percona XtraDB Cluster)基于Galara的一台开源软件,应用于解决mysql的高可用集群问题 ...

  6. AbstractQueuedSynchronizer简单使用

    AQS是JUC中很多同步组件的构建基础,简单来讲,它内部实现主要是状态变量state和一个FIFO队列来完成,同步队列的头结点是当前获取到同步状态的结点,获取同步状态state失败的线程,会被构造成一 ...

  7. mongodb 自增序列实现

    MongoDB没有像SQL数据库外开箱即用自动递增功能.默认情况下,它采用了12字节的ObjectId为_id字段作为主键来唯一地标识文档.然而,可能存在的情况,我们可能希望_id字段有一些其它的自动 ...

  8. JSP项目中使用ueditor(百度编辑器)

    1. 从http://ueditor.baidu.com下载JSP版本的ueditor,注意GBK和UTF-8两种版本. 2. 在Web Project项目的WebRoot目录下新增thirdpart ...

  9. 第02章 IOC和bean的配置

    第02章 IOC容器和Bean的配置 1.IOC和DI ①IOC(Inversion of Control):反转控制. 在应用程序中的组件需要获取资源时,传统的方式是组件主动的从容器中获取所需要的资 ...

  10. HTTP协议-get请求与post请求的区别

    区别: 参数:get通过url进行传递:post放在request body中 长度:get请求在url的长度是有限制的:而post没有(其实这个限制是来自浏览器和web服务器对url的限制,并不是h ...