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还是挺不错的。

  • 相关阅读:
    JSON——JavaScript 对象表示法(JavaScript Object Notation)。
    jquery—— jQuery 是目前最流行的 JS 框架
    Bootstrap的css
    markdown编辑器与富文本编辑器优缺点比较--转载好文
    MATLAB绘图设置--中坐标显示间隔以及范围设置
    MATLAB绘图中参数导数的标注方法
    MATLAB 读取和写出Excel文件的方法-单个以及自动循环读写多个情况
    matlab 求和
    MATLAB画图中设置Marker过于密集怎么办-解决方法
    MPC特点原理以及各项参数的选择--引用别人的博客网址
  • 原文地址:https://www.cnblogs.com/liguoyi/p/6129578.html
Copyright © 2011-2022 走看看