PDF转WORD技术分析
pdf转word是一个非常普遍的需求,而你会发现好用、转换质量好的工具还真是不多,尤其百度搜索前面的推广结果,更是差到不行,免费版只能转一页,要想转更多,需要付费,而付过费后会发现转化效果非常差,找商家投诉,没有结果,便会像百度搜索结果第一条1900多条评价,全在骂的结果。
今天来分析一下为什么pdf转word那么难。
PDF格式特殊
PDF是adobe公司出品方便打印的文档,Portable Document Format的简称,意为“便携式文档格式”,是由Adobe Systems用于与应用程序、操作系统、硬件无关的方式进行文件交换所发展出的文件格式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。对于电脑上的文件来说,根本上都是以二进制的方式存储到存储设备上,因此我既然可以存为pdf文件,肯定需要知道其规范,这就是pdf文档的格式规范(可以去adobe官网搜),字体、图像等等都需要有描述,这样我才能显示。
因此理论上熟读pdf格式规范,就能正确的读取pdf文件。实际编码中还有一些别人写好的类库可以调用,因此读取pdf要简单一些。
2. 放到word不容易
再来说转成word这件事,这件事其实来说也是可以实现的,因为我知道pdf的格式,也知道word的格式,我读出了这里需要有文字、那里需要有图片,按照word的格式放进去就可以了。但是.但是.但是.实际做的时候有很多坑。
举几个例子,比如表格问题:
这是一份pdf里面的部分内容,通过程序可以读出来在(x,y)位置有“食物”两个字,在某位置有“合并后的单元格”7个字,其他位置的字和数字,pdf给出的信息是屏幕上的位置有什么字,比如(10,100)位置为食物,(200,10)位置水……为什么会是这样的信息,因此pdf是用来打印的,他会告诉打印机什么位置有什么内容,他只能这么给。而对于这些信息怎么往word里面放?你会说,我这是个表格,按表格放,问题是程序怎么知道,这就需要一些人工智能或者经验的算法,把这样的位置分析出来是表格。表格难度升级版,哪些是合并的单元格,就这个问题没有几家产品能判断出来是合并后的单元格。
背景图像问题:
这个文档其实蓝色矩形是背景,而小人是图片,可以区分开吗?用简单的pdf解析lib已经很有难度,(pdf解析lib后面再说),如果区分出来了,word里面背景图片怎么操作,表格的浮动怎么处理?头都大了。
因此要转好word是件很难处理的事。
3. 再说说pdf解析lib
pdf解析的lib,开源免费项目最经典的是PDFBox,Apache旗下,他可以做的事是:
提取文字,拆分合并,表单文字提取或者填充,验证,打印,存图片,创建pdf,签名。可以看到这个强大的库可以提取出文字和对应位置,然后你在写到word。表格怎么办?不好处理,需要自己根据字的位置、逻辑算。
专门处理表格的库:Tabula,收费版pdfTables,问题又来了,这些库只能处理其中表格,其他内容处理不好,tabula甚至需要先给出表格区域是什么,然后再提取内容。
总之一句话,提前内容简单,转到word格式难。
4. 最好的PDF转word是谁
做了许多的调研和验证,最好的转换工具是谁呢?
调研的时候发现百度文库是最牛B的,正确率100%,一丝不差,看源码发现他是显示到网页上,他的实现方法是把文字及位置提取出来,然后用css绝对定位到当前位置,背景、表格等都是一张图片直接铺在后面,这样就不需要知道谁是表格,谁是合并单元格了,完全按打印的方式来实现,不得不说这个方法非常聪明。百度技术确实牛,不过在这里转成word的话同样需要后续的研究。技术不能适用到转word项目中。
第二好的我想必定adobe自家产品acrobat了,可以读、写pdf的官方工具,下载免费试用版本,确实是效果非常非常好的,只在一些非常复杂的表格情况下有失真,达不到100%的还原效果,但是已经是最好的了。
百度搜索出来的好多pdf工具试用了一遍,尤其前面的推广结果,大多是用开源项目搞的产品,简单文字的可以,遇到表格,合并单元格,基本都处理不好了。
另一个比较好的是smallpdf,用的是国外Solid Documents提供的技术,文字、表格都不错,合并单元格就不行了,认不出来,或者对不齐。
Acrobat是最好用的转word工具,悲剧的是需要12.99刀一个月。还是有点小贵,如果偶尔转个word的话,12.99就更不划算了。
理想的方案呢??理想的方案呢??理想的方案呢??
刺猬PDF,官方网站http://www.ciweipdf.com,实现方案是这样的,用acrobat的技术做转化,因此效果是最好的,你可以理解为共享收费版acrobat。因此理想的pdf转word产品是免费的在线版本——刺猬PDF!(当然这是我做的一个小服务)欢迎大家使用,有问题留言。