zoukankan      html  css  js  c++  java
  • 在线浏览文档的方案

    百度了一下,java 方面 在线浏览文档基本都是OpenOffice+SWFTool+Flexpaper的居多。

    我这两天项目用上。没多考虑就直接拿来用了。不想一堆的问题。。。

    首先jodconverter 2.2.1 不支持2007 office 文档的转换。需要FQ去下载谷歌的3.0-Beta-4版本 :(

    其次,转换表格不理想。Excel,和带表格的word文档,就别指望能有高颜值的pdf文档输出。

    最后,速度慢啊,先要转pdf,pdf又要转swf。 真个烦。

    最悲剧的是,officeManager 进程启动OpenOffice不稳定,如果按照网上的写法,先start,再close,就很耗时间,也让JVM不停的创建内存,释放内存。

    如果只开一次,不关闭,那么程序崩溃或者tomcat 更新war包重启,就会导致一直连接不上。主要原因就是没有关闭OpenOffice的进程.

    最最悲剧的是,pdf2swf 必须通过Runtime.getRuntime() 调用。这里埋下了很大的隐患。如果这个进程不结束,就会内存泄露,或者阻塞当前进程。其他请求将不能处理。

    问题归问题,但是这个功能还是要实现的。后面直接把PDF2swf 去掉。直接用pdf.js 呈现pdf 文件。 目前来看。不需要转swf 了,但是OpenOffice的问题还是有。

    于是自己动手写了一个杀死OpenOffice的方法。

    private static void killOpenOfficeProcess() {
            Runtime rt = Runtime.getRuntime();
            String command = "taskkill /F /IM soffice.bin";
            try {
                rt.exec(command);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    这个方法每次这样调用

    private static boolean startService() {
            // String path = System.getProperty("java.library.path");
            try {
                if (officeManager == null) {
                    DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
                    configuration.setOfficeHome(OPEN_OFFICE_HOME);// 设置安装目录
                    configuration.setPortNumbers(OPEN_OFFICE_PORT); // 设置端口
                    configuration.setTaskExecutionTimeout(1000 * 60 * 5L);
                    configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);
    
                    officeManager = configuration.buildOfficeManager();
                }
                killOpenOfficeProcess();
                officeManager.start(); // 启动服务
                startFlag = true;
                return true;
            } catch (Exception ce) {
                System.out.println(ce);
                return false;
            }
        }

    对了,调试过程中发现一个奇葩的事情,officeManager.start()的时候,居然会调用sigar-amd64-winnt.dll。 如果这个文件不在java.library.path里,就会报错。

    pdf.js还是挺不错的。

  • 相关阅读:
    UVA 12338
    最短路问题
    菜鸟调错(十)——启动Tomcat报错“Unsupported major.minor version xxx ”
    Servlet总结(一)
    <html>
    Android Developer:Allocation Tracker演示
    H2数据库集群
    安卓通过广播自己主动回填短信验证码
    江湖问题研究-- intent传递有没有限制大小,是多少?
    spring 配置文件被加载两次
  • 原文地址:https://www.cnblogs.com/liguoyi/p/6129578.html
Copyright © 2011-2022 走看看