打印

分享最近一个JAVA项目:文档转换部分(调用jodconvert)

[复制链接]
2022|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2015-11-5 16:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//package com.codyy.java.trans.openoffice;

import java.io.File;
import java.io.FileNotFoundException;

import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeException;
import org.artofsolving.jodconverter.office.OfficeManager;

/**
* 转换文档为pdf
*
* 使用前需要在本机安装好openoffice或libreoffice
*/
public class OpenOfficePdfConvert {

        /**
         * @param args
         */
        private static OfficeManager officeManager;
//        private static String OFFICE_HOME = "/opt/openoffice4";//"/opt/libreoffice5.0";
//        private static int port[] = { 8100 };

        public static int convert2pdf(String inputFile, String outputFile) throws FileNotFoundException{
                System.out.println("进行文档转换转换:" + inputFile + " --> " + outputFile);

                OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);
                try{
                        converter.convert(new File(inputFile), new File(outputFile));
                } catch (OfficeException e){
                        return -1;
                } catch (IllegalStateException ie){
                        return -2;
                }
               
                return 0;
        }

        // 打开服务器
        public static void startService(int port,String OFFICE_HOME) {
                DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();
                try {
                        System.out.println("准备启动服务....");
                        configuration.setOfficeHome(OFFICE_HOME);// 设置OpenOffice.org安装目录
                        configuration.setPortNumbers(port);
                        configuration.setTaskExecutionTimeout(1000 * 60 * 5L);// 设置任务执行超时为5分钟
                        configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);// 设置任务队列超时为24小时

                        officeManager = configuration.buildOfficeManager();
                        officeManager.start(); // 启动服务
                        System.out.println("office转换服务启动成功!");
                } catch (Exception ce) {
                        System.out.println("office转换服务启动失败!详细信息:" + ce);
                        System.exit(0);
                }
        }

        // 关闭服务器
        public static void stopService() {
                System.out.println("关闭office转换服务....");
                if (officeManager != null) {
                        officeManager.stop();
                }
                System.out.println("关闭office转换成功!");
        }

}

相关帖子

沙发
keer_zu|  楼主 | 2015-11-5 16:47 | 只看该作者
以下代码是几个需要的线程:

使用特权

评论回复
板凳
keer_zu|  楼主 | 2015-11-5 16:47 | 只看该作者
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;
import java.util.HashMap;
import java.util.Map;

import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;

import net.sf.json.JSONException;
import net.sf.json.JSONObject;

enum ConverterState{idle,busy,complete}
enum FileTransResult{success,server_busy,no_input_file,submit_already,converting,no_task}




class ConvertThread implements Runnable{

        private PipedInputStream inputPipe;
       
        ConvertThread(PipedInputStream pin){
                this.inputPipe = pin;
               
        }
        Thread thrd;
        public void set_thrd(Thread t){
                thrd = t;
        }
        public void run()
        {
                int i = 0;
                       
            while(true){
                        int len = 0;
                        System.out.println("thread 1");
                       
                        try{
                                System.out.println("Recv a task ....");

                                byte[] buf = new byte[1024];
                                len = inputPipe.read(buf);  //

                                String request_msg= new String(buf,0,len);
                             
                                System.out.println(request_msg);
                             
                                JSONObject obj = null;
                                try{
                                        obj = JSONObject.fromObject(request_msg);
                                }catch(JSONException e){
                                        System.out.println("wrong msg!");
                                        // TODO:
                                       
                                }
                                ConvertRequest rmsg = new ConvertRequest();
                                
                                rmsg = (ConvertRequest)JSONObject.toBean(obj, ConvertRequest.class);
                                System.out.println("+++ rmsg:" + rmsg);
                                
                                int ret = OpenOfficePdfConvert.convert2pdf(rmsg.getInputfile(), rmsg.getTargerfile());  
                               
                               
                                Map<String, String> map = new HashMap<String, String>();
                                if(ret == 0){
                                        map.put("type","TransOk");
                                        //map.put("Detail","AAAAAAAAA");
                                } else {
                                        map.put("type","TransError");
                                        map.put("detail","AAAAAAAAA");
                                        map.put("errorCode", "");
                                }

                            JSONObject jsonObject = JSONObject.fromObject( map );
                            String sendmsg = jsonObject.toString() + "\0";
                            ByteBuffer outBuffer = ByteBuffer.wrap(sendmsg.getBytes());
                            try{
                                    //System.out.println("---------- write sinkChannel");
                                    NIOClient.sinkChannel.write(outBuffer);
                            } catch (IOException e){
                                    System.out.println("---------- write sinkChannel err");
                                    if (NIOClient.sinkChannel.isOpen()) {
                                            NIOClient.sinkChannel.close();
                                            OpenOfficePdfConvert.stopService();
                                        }
                                    e.printStackTrace();
                            }

                        } catch (Exception e){
                                //throw new RuntimeException("");
                                e.printStackTrace();
                        }

                        if(len > 0){
                                System.out.println("++ recv msg:");
                               
                                ConverterManager.CONVERTER_STATE = ConverterState.complete;
                                ConverterManager.CONVERTER_COMPLETE = true;
                        }
                }
        }
}


public class ConverterManager {

    static ConverterState CONVERTER_STATE = ConverterState.idle;
        public static boolean CONVERTER_COMPLETE = false;

        private static ConvertThread cthread;// = new ConvertThread;
        private static Thread thread;// = new Thread;
       

        private static PipedInputStream pin_s;

        private static PipedOutputStream pout;


       
       
        public ConverterManager(){ConverterManager.CONVERTER_COMPLETE = false;CONVERTER_STATE = ConverterState.idle;}
       
        //static public FileConverter converter = new FileConverter();
       
        public static  void StartConverter() throws IOException{

                pin_s = new PipedInputStream();
                pout = new PipedOutputStream();
               
                try {
                        pin_s.connect(pout);
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                        
                cthread = new ConvertThread(pin_s);
                thread = new Thread(cthread,"abc");
                cthread.set_thrd(thread);
                thread.start();
               
               
                ConfigEnv cfg = ConfigEnv.getInstance();
            int port = cfg.GetConvertImpPort();
            String office_home = cfg.GetOfficeHome();
            OpenOfficePdfConvert.startService(port,office_home);
           
        }
       
       
        public static  void StopConverter(){
                if(cthread.thrd.isAlive()){
                       
                }
               
                OpenOfficePdfConvert.stopService();
        }

       
        public static FileTransResult SubmitTransTask(String inputFile,String targetFile){
                Map<String, String> map = new HashMap<String, String>();
            map.put("inputfile", inputFile);
            map.put("targetfile", targetFile);
           
            JSONObject jsonObject = JSONObject.fromObject( map );
            String sendmsg = jsonObject.toString() + "\0";

            try {
                        pout.write(sendmsg.getBytes());
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
            ConverterManager.CONVERTER_STATE = ConverterState.busy;
           
                return FileTransResult.submit_already;
        }
       
/*       
        public static FileTransResult CheckTransResult(){
               
                if(CONVERTER_COMPLETE && (CONVERTER_STATE == ConverterState.complete)){
                        CONVERTER_COMPLETE = false;
                        CONVERTER_STATE = ConverterState.idle;
                        return FileTransResult.success;
                } else if(CONVERTER_STATE == ConverterState.busy) {
                        return FileTransResult.converting;
                } else {
                        return FileTransResult.no_task;
                }
               
        }
*/
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1351

主题

12431

帖子

53

粉丝