• 借助flexpaper实现word在线预览和打印


    为了实现word能够在web上尽量以原始的排版样式展现出来,选择基于activex控件的方式太过于依赖某种浏览器,并且存在可能需要花费金钱购买相应的控件产品;于是借助flexpaper这种flash展现方式就成为了首选的解决方案。该方案的实现过程主要是先将word文档转换成pdf文档,接着再通过SWFTOOLS工具将pdf文档转换成swf文件,然后flexpaper加载这些swf文件进行展示。

    访问flexpaper的官网地址:http://flexpaper.devaldi.com/download/  下载web版的flexpaper,同时把需要用到的3个软件也下载下来。我当前下载的最新版本是FlexPaper_2.3.6版。

    先安装好下载好的3个软件包:

    接着解压FlexPaper_2.3.6

    可以看到解压后的文件目录里提供了asp.net版本、java版本和php版本,在这里我选择部署的是java版本,打开java目录,可以看到一个war包,将其部署到tomcat里,然后启动tomcat访问所部署的flexpaper的根路径。初次访问会跳转到一个配置的页面,通过该页面进行设置管理员账号密码、配置上面所提到的3个软件的安装路径,然后还有配置需要转换的pdf所在的目录及转换后的swf文件存放的目录,这两个目录都需要事先创建好。还有另外一个重要的配置是swf的生成模式,flexpaper提供了单文件模式和多文件模式,如果选择单文件模式,那么一个pdf文档转换成swf时,就只生成一个swf文件;如果选择多文件模式,那么一个pdf文档里如果有好几页的内容,那么就会生成多个相对应的swf文件。

    之后只要根据你所配置的文件模式访问刚部署的flexpaper的对应url,并且在url上的doc参数里传递你所配置的pdf目录下的pdf文件名就可以直接在线预览到pdf文件了。

    单文件模式时访问的url:http://127.0.0.1:8080/FlexPaper/common/simple_document.jsp?doc=660521783206862.pdf

    多文件模式时访问的url:http://127.0.0.1:8080/FlexPaper/common/split_document.jsp?doc=660521783206862.pdf

    接下来就是需要在程序中把word文档转换成pdf文档,并将其保存到上面所提到的pdf目录下,以便实现word文档的在线浏览。

    在这里我使用的是java语言,使用了artofsolving的jodconverter包来进行doc到pdf的转换,转换需要借助OpenOffice,所以还需要下载安装OpenOffice。

    我当前下载安装的OpenOffice版本为4.1.2版。

    jodconverter用得多的主要有两个版本,一个是2.2.1版,另外一个是3.0-beta4版本。

    2.2.1版

    2.2.1不支持docx格式,并且需要事先通过命令行开启OpenOffice的服务,

    开启OpenOffice服务的命令行代码如下:

    cd d:Program Files (x86)OpenOffice 4program
    soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

    java关键代码:

    // connect to an OpenOffice.org instance running on port 8100  
                OpenOfficeConnection connection = new SocketOpenOfficeConnection(  
                        "127.0.0.1", 8100);  
                connection.connect();  
      
                // convert  
                DocumentConverter converter = new OpenOfficeDocumentConverter(  
                        connection);  
                converter.convert(inputFile, outputFile);  
      
                // close the connection  
                connection.disconnect();  

    如果使用maven来进行管理的,那么2.2.1版的依赖配置如下:

    <dependency>
        <groupId>com.artofsolving</groupId>
        <artifactId>jodconverter</artifactId>
        <version>2.2.1</version>
    </dependency>

    3.0-beta4版

     3.0-beta4支持docx版本,并且不需要事先通过命令行开启OpenOffice服务,而是可以通过java代码来进行开启和关闭。

    java关键代码:

    private  static OfficeManager officeManager;
    
    public static void convert(File originFile,File destFile){
             long startTime = System.currentTimeMillis();
             startService();        
             OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
             converter.convert(originFile,destFile);
             log.info("转换完成.耗时" +( (System.currentTimeMillis() - startTime) / 1000)+ "秒");
             stopService();
        }
    
        private static void startService(){
            DefaultOfficeManagerConfiguration configuration=new DefaultOfficeManagerConfiguration();
            log.info("准备启动office转换服务...");
            configuration.setOfficeHome("D:/Program Files (x86)/OpenOffice 4");
            configuration.setPortNumber(8100);
            configuration.setTaskExecutionTimeout(1000*60);//任务超时时间1分钟
            try {
                officeManager=configuration.buildOfficeManager();
                officeManager.start();//启动服务
                log.info("office转换服务启动成功!");
            } catch (OfficeException e) {
                log.error("office转换服务启动失败!");
            } catch (IllegalStateException e) {
                log.error("office转换服务启动失败!");
            }
        }
        
        private static void stopService(){
            if(officeManager!=null){
                officeManager.stop();
                log.info("office转换服务关闭成功!");
            }else{
                log.info("office转换服务未启动!");
            }
        }

    如果使用maven来进行管理的,3.0-beta4版通过maven中央库下载不到,需要自己通过artofsolving的网站把jar下载下来,然后注册到自己本地的maven仓库里。

    jodconverter-core-3.0-beta-4.bat:

    mvn install:install-file -DgroupId=com.artofsolving -DartifactId=jodconverter -Dversion=3.0-beta-4 -Dpackaging=jar -Dfile=%CD%jodconverter-core-3.0-beta-4.jar

    pom配置:

    <dependency>
                <groupId>com.artofsolving</groupId>
                <artifactId>jodconverter</artifactId>
                <version>3.0-beta-4</version>
            </dependency>
            <dependency>
                <groupId>org.openoffice</groupId>
                <artifactId>juh</artifactId>
                <version>3.2.1</version>
            </dependency>
            <dependency>
                <groupId>org.openoffice</groupId>
                <artifactId>unoil</artifactId>
                <version>3.2.1</version>
            </dependency>
            <dependency>
                <groupId>commons-cli</groupId>
                <artifactId>commons-cli</artifactId>
                <version>1.1</version>
            </dependency>
            <dependency>
                <groupId>org.json</groupId>
                <artifactId>json</artifactId>
                <version>20090211</version>
            </dependency>

    由于3.0-beta4的jar包是自己写命令行注册到本地maven库里的,所以没带有其依赖包的关系,因此需要手动将其所依赖的其他jar包给配置到pom文件里。

  • 相关阅读:
    uuid模块
    使用pip管理第三方包
    hashlib和hmac模块
    hashlib和hmac模块
    JAVA热部署,通过agent进行代码增量热替换!!!
    史上最全java pdf精品书籍整理
    JAVA RPC (十) nio服务端解析
    java代理,手把手交你写java代理
    JAVA RPC 生产级高可用RPC框架使用分享
    DB缓存一致性
  • 原文地址:https://www.cnblogs.com/liuxin-listenx/p/5642623.html
Copyright © 2020-2023  润新知