package cn.keking.service; import com.hotent.base.exception.BaseException; import org.artofsolving.jodconverter.OfficeDocumentConverter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.io.File; /** * @author yudian-it */ @Component public class OfficeToPdfService { private final static Logger logger = LoggerFactory.getLogger(OfficeToPdfService.class); private final OfficePluginManager officePluginManager; public OfficeToPdfService(OfficePluginManager officePluginManager) { this.officePluginManager = officePluginManager; } public void openOfficeToPDF(String inputFilePath, String outputFilePath) { office2pdf(inputFilePath, outputFilePath); } public static void converterFile(File inputFile, String outputFilePath_end, OfficeDocumentConverter converter) { File outputFile = new File(outputFilePath_end); // 假如目标路径不存在,则新建该路径 if (!outputFile.getParentFile().exists() && !outputFile.getParentFile().mkdirs()) { logger.error("创建目录【{}】失败,请检查目录权限!",outputFilePath_end); } try { converter.convert(inputFile, outputFile); }catch (NullPointerException e){ throw new BaseException("未安装预览插件,请联系管理员");//把响应信息提示到前端 } } public void office2pdf(String inputFilePath, String outputFilePath) { OfficeDocumentConverter converter = officePluginManager.getDocumentConverter(); // 已经存在 不重复转换 /*if(FileUtil.isExistFile(outputFilePath)) { return; }*/ if (null != inputFilePath) { File inputFile = new File(inputFilePath); // 判断目标文件路径是否为空 if (null == outputFilePath) { // 转换后的文件路径 String outputFilePath_end = getOutputFilePath(inputFilePath); if (inputFile.exists()) { // 找不到源文件, 则返回 converterFile(inputFile, outputFilePath_end,converter); } } else { if (inputFile.exists()) { // 找不到源文件, 则返回 converterFile(inputFile, outputFilePath, converter); } } } } public static String getOutputFilePath(String inputFilePath) { return inputFilePath.replaceAll("."+ getPostfix(inputFilePath), ".pdf"); } public static String getPostfix(String inputFilePath) { return inputFilePath.substring(inputFilePath.lastIndexOf(".") + 1); } }