作者:马健
邮箱: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. Python List reverse()方法

    reverse() 函数用于反向列表中元素,参数 NA,该方法没有返回值,但是会对列表的元素进行反向排序,原来的列表被改变,生成新的列表. 例子:list1 = ['Google', 'Runoob' ...

  2. [转]HTMl中Meta标签详解以及meta property=og标签含义

    meta是用来在HTML文档中模拟HTTP协议的响应头报文.META标签是HTML语言HEAD区的一个辅助性标签,它位于HTML文档头部的<HEAD>标记和<TITLE>标记之 ...

  3. SqlServer 用户和权限操作

    use [master] GO --创建用户,Test,密码Test CREATE LOGIN [TestUser] WITH PASSWORD=N'Test', DEFAULT_DATABASE=[ ...

  4. Js基础之函数

    定义函数:我们使用function标签来定义函数 使用函数:JavaScript函数定义完毕是不能自动执行的,需要我们调用或者事件触发,比如点击事件,鼠标事件,键盘事件等. 下面我们以点击事件为例,调 ...

  5. POJ3258(最大化最小值)

    River Hopscotch Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11155   Accepted: 4785 ...

  6. [转载]centos下yum安装samba及配置

    centos下yum安装samba及配置 在我们使用 Windows 作为客户机的时候,通常有文件.打印共享的需求.作为Windows 网络功能之一,通常可以在 Windows 客户机之间通过Wind ...

  7. java继承如何理解呢??

    总结:我把他弄的无语了.他是诺基亚公司的软件开发师,大学毕业就可以进那么好的公司.实力 package com.bc; //普通类 class yt { public void price() { S ...

  8. java中Swing编程再度练习篇

    总结: 注意理解frame的层级关系 package com.da; //添加背景图片 //我只实现了插入图片.但并没有实现是背景图片 import javax.swing.JFrame; impor ...

  9. Eclipse中的普通Java项目如何部署到Tomcat中

    我现在的做法: 1.在Eclipse中配置Tomcat时,选择创建Context文件,而不是server.xml,好处是文件可以随便命名,与虚拟目录一致(即xml中的属性path).Tomcat加载项 ...

  10. phonegap中使用自带浏览器打开链接

    <center><a id="ssl2" href="#" onclick="window.open('http://127.0.0 ...