资讯专栏INFORMATION COLUMN

jodconvert的亚子

jayce / 1655人阅读

摘要:由于公司要求限制,该项目在下开发,非,因此需要传统方式引入相关依赖包。此外,的启动与结束需要自己控制。项目启动时调用结束时关闭转换服务启动成功找不到源文件则返回假如目标路径不存在则新建该路径转换服务完成。

简介

引入jodconverter相关jar,配合libreOffice、openOffice两款软件,只需进行简单编码可以实现各种文档转换。

应用

目前已在两个项目中应用:

F项目需要滚动播放视频、文档(Excel/Word...)功能,使用jodconverter将文档转成pdf,结合pdfjs实现。由于个人独立开发,只要结果,故选型自由。后端Spring boot,前端阿里飞冰。可以直接使用jodconverter的starter:



    org.jodconverter
    jodconverter-core
    4.2.0


    org.jodconverter
    jodconverter-local
    4.2.0


    org.jodconverter
    jodconverter-spring-boot-starter
    4.2.0

使用也非常方便,注入可用:

import java.io.File;
import javax.annotation.Resource;
import org.jodconverter.DocumentConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.foton.common.Constants;

@Component
public class DocumentConverterUtil {
    
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
//    @Value("${office.home}")
//    String officeHome;
    @Resource
    private DocumentConverter  documentConverter;
    
    public String convert(File in, File out) {
//        DocumentFormat pdf = documentConverter.getFormatRegistry().getFormatByExtension("pdf");

        try {
            String fileName=in.getName();
            String fileType=fileName.substring(fileName.lastIndexOf(".")+1,fileName.length()); 

            // Excel尺寸控制
            if(fileType.equals("xls"))
                ConverterUtil.setXlsFitToWidth(in);
            long startTime = System.currentTimeMillis();
            documentConverter.convert(in).to(out).execute();
            long conversionTime = System.currentTimeMillis() - startTime;
            logger.info(String.format("successful conversion: %s to %s in %dms",in.getName(), "pdf", conversionTime));

        } catch (Exception e) {
            e.printStackTrace();
            return Constants.FAIL;
        }

        return Constants.SUCCESS;
    }
}

H项目应审查要求,原本开发的导出Excel功能需调整为导出pdf,因此在原来基础功能上用jodconvert额外增加一次转换。由于公司要求限制,该项目在jdk1.7下开发,非maven,因此需要传统jar方式引入相关依赖jar包。值得注意的是,jodconvert在4.1.0不支持jdk7,而4.1.0版本仅会吃libreOffice 5(libreOffice升级到6后目录变更,作者在4.2.0版本中调整,但该版本不支持jdk7)。此外,convert的启动与结束需要自己控制。

import com.eos.runtime.core.IRuntimeListener;
import com.eos.runtime.core.RuntimeEvent;

public class JodConverterStartupListener implements IRuntimeListener {

    @Override
    public void start(RuntimeEvent arg0) {
        DocumentConverterUtil.start(); // 项目启动时调用
    }

    @Override
    public void stop(RuntimeEvent arg0) {
        DocumentConverterUtil.stop(); // 结束时关闭
    }

}
import java.io.File;

import org.jodconverter.DocumentConverter;
import org.jodconverter.LocalConverter;
import org.jodconverter.office.LocalOfficeManager;
import org.jodconverter.office.OfficeException;
import org.jodconverter.office.OfficeManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DocumentConverterUtil {
    private static final Logger logger = LoggerFactory.getLogger(DocumentConverterUtil.class);
    public static DocumentConverter  documentConverter;
    public static OfficeManager officeManager;
    
    public static void start() {
        officeManager = LocalOfficeManager.builder().build();
        documentConverter = LocalConverter.make(officeManager);

        try {
            officeManager.start();
            logger.info(">>> office转换服务启动成功!");
        } catch (OfficeException e) {
            e.printStackTrace();
        }
    }
    
    public static void converter(String inputFilePath, String outputFilePath) throws Exception {
        File inputFile = new File(inputFilePath);
        if (inputFile.exists()) {// 找不到源文件, 则返回  
            File outputFile = new File(outputFilePath);
            if (!outputFile.getParentFile().exists()) { // 假如目标路径不存在, 则新建该路径  
                outputFile.getParentFile().mkdirs();
            }
            
            String fileType = inputFilePath.substring(inputFilePath.lastIndexOf(".")+1,inputFilePath.length()); 

            if(fileType.equals("xls"))
                ConverterUtil.setXlsFitToWidth(inputFile);
            
            documentConverter.convert(inputFile)
                    .to(outputFile)
                    .execute();
        }
            
    }
    
    
    public static void stop() {
        if (officeManager.isRunning()) {
            try {
                officeManager.stop();
            } catch (OfficeException e) {
                e.printStackTrace();
            }
            logger.info(">>> office转换服务完成。");
        }
    }
}
关于我

rebey.cn

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77898.html

相关文章

  • SpringBoot使用LibreOffice转换PDF

    摘要:用将文档转换本例使用。在和环境下测试通过。转换命令源文件放在或者封装了一组转换命令,通过调用相关服务。安装检查已有字体库复制字体新建文件夹把系统的字体复制进去。 用LibreOffice将Office文档转换PDF 本例使用 LibreOffice-6.0.4、jodconverter-4.2.0、spring-boot-1.5.9.RELEASE。 在CentOS7 + ope...

    mcterry 评论0 收藏0
  • php中调用Java实现word文档的预览

    摘要:在下一切运行正常,但是到下文件的文件名和生成路径就会发生变化,这里的不会被当作路径分隔符了,而是当作文件名的一部分,其实修改起来也很简单创建另一个线程启动服务,老是会出现无法连接服务的异常。 php预览word文档的实现 以及实现过程中遇到的各种坑 在做软件工程的课程设计的时候,我们小组选择做一个资料分享网站,网站最重要的功能当然就是上传文件和下载文件。但是这中间就需要一个比较重要的过...

    HtmlCssJs 评论0 收藏0
  • php中调用Java实现word文档的预览

    摘要:在下一切运行正常,但是到下文件的文件名和生成路径就会发生变化,这里的不会被当作路径分隔符了,而是当作文件名的一部分,其实修改起来也很简单创建另一个线程启动服务,老是会出现无法连接服务的异常。 php预览word文档的实现 以及实现过程中遇到的各种坑 在做软件工程的课程设计的时候,我们小组选择做一个资料分享网站,网站最重要的功能当然就是上传文件和下载文件。但是这中间就需要一个比较重要的过...

    leejan97 评论0 收藏0

发表评论

0条评论

jayce

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<