校对双层PDF中的隐藏文本

作者:马健
邮箱:stronghorse_mj@hotmail.com
发布:2012.06.11

目录
一、背景
二、能够校对的PDF需要满足的条件
三、校对工具的选择
四、校对过程
五、延伸讨论

 

事先声明:本文所谈校对方法仅适用于DjVuToy、FreePic2Pdf、Pdg2Pic所生成的双层PDF,对其他软件生成的双层PDF无效,不喜勿进。

一、背景

随着在DjVuToy、FreePic2Pdf、Pdg2Pic中均支持双层PDF,一个 必然要问的问题是:如何对双层PDF进行校对?原因无他,双层PDF都是基于OCR技术的,而OCR百分百无错是不可能的,至少目前是完全没有可能的。

目前双层PDF的校对方法大体上有两种:

1、基于XML的校对

这种方法的核心思想是:把双层PDF中的隐藏文本导出,然后对文本进行校对,再导入回去。由于隐藏文本除了文本字符串外,还有显示位置、显示比例等信息,因此只用纯文本文件难以表述, 而XML文件表达得更全面一些,故多用XML。

这种方法其实在DjVuToy中也被我用来校对双层DjVu,所以对其弊端早有体会:编辑文本固然容易,但想更改文字位置、字体大小却很困难。但要想保持隐藏文本与底图的一致性,在编辑文字后对文字显示位置或显示比例进行更改也是必不可少的。

DjVu格式由于其天然缺陷(详见我写的《DjVu、PDF中的隐藏文本》),再加上工具缺乏,采用导出、导入的方法那是迫不得已,PDF如果还来这一套, 未免太不与时俱进,恐怕会被行家所笑话。

2、基于PDF编辑工具的校对

与孤寒的DjVu相比,由于PDF文件的广泛流传、深入人心,各种PDF工具如今是层出不穷,其中自然有一些能够直接对PDF中的文字进行编辑的工具。双层PDF中的文本由于是隐藏文本,因此通常不能直接用这些工具进行编辑,需要先把隐藏文本显示出来后才能编辑,编辑完成再隐藏回去。

与基于XML的校对方法相比,用PDF编辑工具直接校对双层PDF的文本,不仅编辑过程比较直观,而且调整文字显示位置、显示比例也比较容易,鼠标拖一下即可。因此在DjVuToy、FreePic2Pdf、Pdg2Pic中均针对这种校对方法提供辅助工具,辅助完成校对过程中所需的“显示隐藏文本”、“隐藏校对过的文本”等功能,本文下面也仅针对这种方法进行阐述。

二、能够校对的PDF需要满足的条件

前面一再强调“仅针对DjVuToy、FreePic2Pdf、Pdg2Pic所生成的双层PDF”,原因在于不是什么样的双层PDF都可以用PDF编辑工具进行校对的——在我看来,以下几个关键技术点决定了校对的难易程度:

1、采用内嵌字体还是外挂字体?

PDF中的文字允许使用内嵌字体,也允许使用外挂字体,相对来说采用外挂字体的更易于校对:内嵌字体为减小文件长度,通常只嵌入所需用到的文字的字形,用不到的就不嵌入了。在这种情况下如果想增加一个原来没有的字可就麻烦了。而外挂字体则不受此限制,只要外部字体文件中有字形的文字,都可以加入进来。

当然外挂字体的平台兼容性比外挂字体略差:找不到字体的时候自然就不能显示。不过这个问题的影响和解决方法在我看来不是啥大问题,在简体中文环境下更没有问题。

所以一项技术的选择有时候没有对错之分,只有侧重点的不同:Acrobat侧重于“平台兼容性”,所以选择了内嵌字体;我的三个软件考虑“校对”、“文件长度”、“实现难易程度”等,就选择了外挂字体。

2、“字压图”还是“图压字”?

对于双层PDF来说,隐藏文字在顶层,扫描图像在底层的是“字压图”,否则就是“图压字”。在实际中两种路线都有人采用:Acrobat生成双层PDF采用的是字压图,deent75采用的是图压字。在我看来,采用字压图路线的双层PDF更便于校对:如果采用字压图,图像显示出来后还能看到上层的文字,反之文字就会被图像盖住。

deent75采用图压字可能也有它自己的考虑,但真实原因它不说就谁也不知道,总之我那三个软件在别的地方都在全力模仿deent75,唯独在这个地方坚定不移地跟Acrobat走——字压图。

三、校对工具的选择

同样的原因,这世上也不是什么编辑软件都适合做双层PDF校对的,在我看来至少需满足如下条件才行:

1、支持外挂字体。即采用外挂字体的PDF,在编辑完成后还是外挂字体。这条虽然简单,但直接就把Acrobat排除了:采用外挂字体的PDF,在用Acrobat编辑存盘后,新加入的字就全变成内嵌的了。

2、支持亚洲语言,尤其是简体中文。这一条基本上就把大多数国外的编辑软件给排除了。

最终选来选去,发现还是Foxit PDF Editor和Foxit Phantom满足要求。具体我测试了Foxit PDF Editor v1.2、v1.5、v2.2,及Foxit Phantom v2.0、v2.2.4、v5.0.4,感觉各有不同:

Foxit PDF Editor v1.2:对Adobe标准中文字体支持不佳,半角文字显示宽度超宽。
Foxit PDF Editor v1.5:修正了半角问题,但编辑界面与v1.2相同,操作繁琐。
Foxit PDF Editor v2.2:编辑界面较v1.5简化,在宽屏下使用方便,普屏下足够让你咬牙切齿。
Foxit Phantom v2.0、v2.2.4:编辑界面非常简洁,符合一般文字处理习惯。
Foxit Phantom v5.0.4:版本大跃进,功能大倒退。Foxit Phantom在v2.2.4后,一跳就跳到了v5.0,没有中间的3、4版本,但5.x版本放弃了原先的文本编辑模式,改为采用将Foxit PDF Editor换了个名字集成进来的方式,所以文字编辑功能在方便性上相当于Foxit PDF Editor v2.x,比Foxit Phantom v2.x大有不如。

最终,我选择Foxit Phantom v2.2.4作为双层PDF编辑器,并写在那三个软件的界面提示中。

如果只想用文字编辑功能,不需要其他闲杂功能,Foxit Phantom v2.2.4很容易实现绿化:安装完成后,直接将安装文件夹中的全部内容复制出来,就是绿色版了。如果再删除用不到的文件,整个运行所需的文件约17.1 MB,包括简体中文界面所需文件。

四、校对过程

在解决了文件问题和工具问题后,下面就该具体说一下校对过程了。校对过程其实也很简单,大体上分为三步:

1、显示出双层PDF中的隐藏文字

在DjVuToy、FreePic2Pdf、Pdg2Pic中,均有“校对”按钮,点击后进入“PDF校对工具”界面,第一个页签就是“显示文字”——Foxit Phantom只能编辑可见文字,隐藏文字是不能编辑的,所以要先显示出来才能走到以后的步骤。

在操作的时候,可以选择是只显示文字,还是图像、文字一起显示。这个需要根据自己的习惯进行选择:如果只显示文字而隐藏图像,则校对的时候看起来更简单一些,不容易眼花,但是在调整文字显示位置、显示比例的时候,会没有参照物。文字、图像同时显示(图像可以选择透明度)看起来会累一点,但如果有什么字拿不准,鼠标把文字拖走即可看到底图,看完了按Ctrl+Z就可以让文字回到原位,用鼠标拖拽调整文字显示位置、显示比例时也有参照物。

2、用Foxit Phantom v2.2.4校对PDF

用Foxit Phantom v2.2.4打开PDF文件后,鼠标左键点击其工具条上的“双击文本对象或右键点击对象对其修改”按钮,以后再用鼠标左键双击需要编辑的文字即可对其进行修改,单击则可通过拖拽改变文字的显示位置、显示比例。总之感觉和用PowerPoint改PPT差不多,所以我说它方便。

3、校对完成后,把文字再隐藏起来

毕竟文字隐藏起来后,才是普通意义上的“双层PDF”。DjVuToy、FreePic2Pdf、Pdg2Pic的“PDF校对工具”界面中的第二更页签,就是用来干这个的。不论第1步中采用了什么样的显示方式,经此一步后都回到隐藏文字、显示图像的双层PDF,只不过文字是经过校对的。

如果对校对结果很有自信,对文件大小又比较在意,还可以再走一步:把双层PDF中的扫描图像全部删掉,只留下文字层。这样搞出来的文字版PDF不仅文件长度比较小,而且文字版式与原文相同,至少作为参考文献引用的时候,页码、行数是不会错的。

以前看Ken777制作“精确版面还原PDF”的时候,羡慕了很久,后来Acrobat中提供的ClearScan也很令我心动,这次总算有机会照猫画虎了。

五、延伸讨论

用过PdfToy的人可能会觉得DjVuToy、FreePic2Pdf、Pdg2Pic中“PDF校对工具”的界面看起来有点眼熟,其实这个工具从界面到代码都COPY自PdfToy的“流过滤”功能,只不过把表达式写死了,所以只能支持特定情况的PDF,对其他PDF无能为力。

对于不是用DjVuToy、FreePic2Pdf、Pdg2Pic生成的双层PDF,其实只要满足前述的采用外挂字体、字压图的情况,理论上说都可以用PdfToy的“流过滤”功能实现与“PDF校对工具”相同的功能,只不过所用的表达式可能要根据具体情况做一点修改。在《PdfToy应用案例( 八)》(案例十三)中,我将详细说明“PDF校对工具”所用到的表达式及其原理,便于PdfToy的用户举一反三。

posted @ 2015-10-27 10:22  strnghrs  阅读(7067)  评论(0编辑  收藏  举报