作者:马健
邮箱: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的用户举一反三。

校对双层PDF中的隐藏文本的更多相关文章

  1. DjVu、PDF中的隐藏文本

    作者:马健邮箱:stronghorse_mj@hotmail.com发布:2012.06.11 目录一.背景二.DjVu中的隐藏文本三.PDF中的隐藏文本 一.背景 目前对于扫描电子文档,网上比较流行 ...

  2. Js控制显示、隐藏文本框中的密码

    Js控制显示.隐藏文本框中的密码,也可称为是一款小型的JavaScript星号密码破解器,点击会显示出密码类型的文本框中的真实信息,再次点击则还原,程序 主要是获取HTML元素对象,然后强制更改元素属 ...

  3. .net环境下从PDF文档中抽取Text文本的一些方法汇总

    1.PDFBox的IKVM版本:据我所知,目前只有PDFBox的IKVM版本能比较好地从PDF中提取文本,PDFBOX更多信息请访问http://www.pdbox.org,关于其应用实例,可以参考C ...

  4. C#在PDF中如何以不同颜色高亮文本

    高亮的文本有助于阅读者快速有效地获取文章关键信息.在PDF文件中,对文章的不同文本,关键词.句等进行不同颜色的文本高亮操作,可以使阅读者在阅读过程中有效地区分不同高亮颜色文本的意义.在下面的示例中,我 ...

  5. java itext替换PDF中的文本

    itext没有提供直接替换PDF文本的接口,我们可以通过在原有的文本区域覆盖一个遮挡层,再在上面加上文本来实现. 所需jar包: 1.先在PDF需要替换的位置覆盖一个白色遮挡层(颜色可根据PDF文字背 ...

  6. 使用itext直接替换PDF中的文本

    直接说问题,itext没有直接提供替换PDF中文本的接口(查看资料得到的结论是PDF不支持这种操作),不过存在解决思路:在需要替换的文本上覆盖新的文本.按照这个思路我们需要解决以下几个问题: itex ...

  7. C# 设置或验证 PDF中的文本域格式

    概述 PDF中的文本域可以通过设置不同格式,用于显示数字.货币.日期.时间.邮政编码.电话号码和社保号等等.Adobe Acrobat提供了许多固定的JavaScripts用来设置和验证文本域的格式, ...

  8. 用python解析pdf中的文本与表格【pdfplumber的安装与使用】

    我们接触到的很多文档资料都是以pdf格式存在的,比如:论文,技术文档,标准文件,书籍等.pdf格式使得用机器从中提取信息格外困难. 为了解决这个问题,我找到了几种解决方案,最后选择了python上的p ...

  9. (转)原始图像数据和PDF中的图像数据

    比较原始图像数据和PDF中的图像数据,结果见表1.1.表1.1中各种“解码器”的解释见本文后续的“PDF支持的图像格式”部分,“PDF中的图像数据”各栏中的数据来自开源的PdfView.如果您有兴趣查 ...

随机推荐

  1. Linux动态gif图的录制

    Linux动态gif图的录制 Linux动态gif图的录制 byzanz的安装与使用 recordmydesktop再convert成gif 参考资料 前几天写了两篇博客vim的配置和Vim的自动代码 ...

  2. HTML(超文本标记语言)

    学习地址:https://developer.mozilla.org/zh-CN/docs/Web/Html

  3. mysql的备份恢复等操作

    备份数据库 shell> mysqldump -h host -u root -p dbname >dbname_backup.sql 恢复数据库 shell> mysqladmin ...

  4. 检测一个DLL文件是x64还是x86

    对于一个DLL,我们如何判定其是32位的还是64位的,或者是any cpu的platform? Visual Studio提供了一个很好的工具:corflags,这个是内嵌到Developer Com ...

  5. Azure上采用Powershell从已有的VHD创建VM

    刚刚的一篇Blog采用Json Template的方式从已有的VHD创建了一台新的VM.由于Json Template封装的比较好,可以改的内容不多. 下面将介绍通过用Powershell来从已有的V ...

  6. AngularJS:实例

    ylbtech-AngularJS:实例 1.返回顶部 1. AngularJS 实例 实例 您可以在线编辑实例,然后点击按钮查看结果. AngularJS 实例 <div ng-app=&qu ...

  7. Cassandra 学习三 安装

    1: 下载Cassandra 2  解压 3   设置环境变量  4 修改cassandra里的conf目录下配置文件            配置文件地址是   D:\cassandra\apache ...

  8. 四 Mixer

    Mixer在应用程序和基础架构后端之间提供通过中介层.它的设计将策略决策移出应用层,用运维人员能够控制的配置取而代之. Mixer的设计目的是改变层次之间的边界,以此降低总体复杂性.从服务代码中剔除策 ...

  9. DAY11-MYSQL补充之SQL逻辑查询语句执行顺序

    一 SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_table> <join_type> JOI ...

  10. css水平居中(一)

    第一种方法:使用text-align属性. 看到一篇博客,也不知道是不是我理解的问题,博客上说text-align可以是内联元素水平居中,我感觉这样的说法是不是有些不准确. text-align属性规 ...