zoukankan      html  css  js  c++  java
  • 知识管理系统Data Solution研发日记之十四 如何以编程方式处理PDF格式文档

    这个系列的文章主要讲解如何处理本机文档和互联网数据。今天要讨论的主题是,如何把PDF文档格式转化为可以编辑的RTF格式。PDF格式本身是只读的,需要Acrobat Professional这样的软件来编辑它的内容,或者在WORD中编辑好后,转化为PDF格式。我要达到的目标是这样的

    image

    指定的格式选择项如果PDF被勾选,则Path路径中所有的的PDF格式的文档会被处理,之后再导入文档数据库中。
    好了,为了达到这个目的,我尝试了以下几种方法

    1. Adobe Acrobat SDK  这是处理PDF文档的官方开发包,也应该是最权威的处理工具。好像授权费用不菲,而且也找不到免费的版本。
    2. PDF.NET 这个工具包相当不错,它包含了处理PDF格式的方方面面,而且提供托管代码的完整例子。试用版只能处理PDF文档的前几页,而且会加上试用的水印。
    3. Aspose PDF.NET , Aspone Recognition 这两个工具包也相当强大,好用。在转换PDF为DOC格式时,有些限制,毕竟不是专业的OCR工具包。当你的PDF格式中包含有中文时,它就无法处理了。官方的Known Limitations中有说明到,Predefined composite fonts encodings used for Chinese, Japanese and Korean languages are not implemented。亚洲语言文字,在安装操作系统时,这些语言包也是另外单独安装的。
    4. Solid Converter PDF 这个工具,在转换PDF到DOC格式方面,95%的内容都完整的保留和正确转换。可惜没有开发包,不能编程调用。
    5. 把PDF转化为TIFF,再运用OCR技术把TIFF格式转化为DOC格式。找到一些工具包,是OCX格式的控件,主要是不稳定,也没有提供纯.NET的包装。理论上.NET可以调用COM格式的组件包,实际上有些细节如何COM没有处理好,.NET调用也会有些问题。
    6. Solid PDF Tools 这个工具,也提供相当好的PDF格式转DOC格式工具。最重要的一点是,它可以接受命令行参数,这样可以被我的程序调用。

    经历了层层选择的痛苦,最后选中以命令行参数方式,调用第三方工具包。这样转换后的格式效果好,也就是选择第5项的工具,Solid PDF Tools。所以,为了让你的Data Loader中的Doc Scanner能正确工作以处理PDF格式文档,请先安装这个工具,Data Loader就是以它来转换PDF格式的文件的。

    image

    请看上图,这就是它的界面效果。这个软件小巧,但是编辑PDF格式起来,丝毫不逊色于Adobe Professional。最重要的我喜欢的一点是,它支持命令行调用,可以被.NET或是任何的编程语言调用。

    再来看一下,.NET的调用代码是如何写的,它的方法体如下

     public static string ConvertPdfToDoc(string pdf)
     {
           string outputFolder = Path.GetDirectoryName(pdf);
           string outputFile = Path.Combine(Path.GetDirectoryName(pdf), 
    Path.GetFileNameWithoutExtension(pdf) + ".doc"); string pathWithFile = pdf.Replace(@"\", @"\\"); outputFolder = outputFolder.Replace(@"\", @"\\"); String sampleScript = @"<</FileName (" + pathWithFile + @")>> FileOpen <</WordDocumentType/Doc /OutputFolder (" + outputFolder + @") /ReconstructionMode/Flowing /LaunchViewer false>> ConvertToWord Exit"; SolidScript solidScript = new SolidScript("Solid PDF Tools");
    // replace Solid PDF Tools with the product you're scripting solidScript.RunScript(sampleScript); return outputFile; }

    是的,这就是Data Loader内部处理PDF文档格式的全部细节,再调用SolidScript来生成进程调用,把参数传递到Solid PDF Tools的进程中。您如果不明白上面.NET代码的含义,你可以参考下面的流程。

    先打开记事本,输入如下的脚本代码,

    <</FileName (G:\\TDDOWNLOAD\\solidwatcher\\bin\\Debug\\File.pdf)>> FileOpen
                  <</WordDocumentType/Doc /OutputFolder (G:\\Eclipse\\doc)
                    /ReconstructionMode/Flowing
                    /LaunchViewer false>> ConvertToWord
                  Exit

    再启动运行,命令行cmd,输入如下命令

    image

    这样,你就可以到看Solid PDF Tools对传入参数的PDF格式的处理。把这个过程封装为.NET脚本代码,就是上面您看到的ConvertPdfToDoc方法。

    如果你不是为了能用代码方式转化PDF为DOC,你可以尝试以下几个工具,它们都是绿色的的小软件,帮忙你把PDF格式转化为DOC。

    1. 4Media PDF to Word Converter
    2. AnyBizSoftPDFConverterPortable
    3. Nitro PDF
    4. PDF To Word RTF Converter
    5. SimpoPDFConverterPortable

    这五个工具都非常不错。绿色,体积小。如果你需要command line调用,我推荐Solid PDF Tools。

    在转换PDF为DOC格式过程中,接触到OCR技术,光学识别技术。它把PDF转化为TIFF格式,再把TIFF格式转化为DOC格式。对于OCR技术,业界最出名的莫过于ABBYY的SDK,它是目前最优秀的OCR技术的组件包之一。

    来看一下,它的产品ABBYY FineReader 9,界面效果如下图

    image

    它可直接连接到硬件设备,把扫描到的内容转化为可以编辑的DOC格式。如果有精力也可以体验一下ABBYY 的SDK,提供C++和.NET平台,各种平台语言的开发包。写到这里,也开始喜欢上C++代码。在托管语言领域,有强大的Visual Studio,量身定制的C#语言和它的编译器,大量的第三方组件厂商。然而在非托管代码领域,百花齐放。没有微软的垄断性主导地位,各个软件公司才有它们的专长,籍以此生存的技术资源。所以如果你感觉你的开发工具不好用,你购买的SDK还不够友好,我觉得这就是你的机会,你以此改善和切入的机会。

    请到epn.codeplex.com中下载最新版本的Data Loader程序和相关的开发文档。

  • 相关阅读:
    VC 常见问题百问
    python windows 环境变量
    Check server headers and verify HTTP Status Codes
    Where are the AES 256bit cipher suites? Please someone help
    outlook 如何预订会议和会议室
    安装Axis2的eclipse插件后,未出现界面
    windows 环境变量
    python 时间日期处理汇集
    openldap学习笔记(使用openldap2.3.32)
    set p4 environment in windows
  • 原文地址:https://www.cnblogs.com/JamesLi2015/p/2256726.html
Copyright © 2011-2022 走看看