许鹏程
2023-07-28 cb0fa7a50d7d4c17b086c29789ab9fad67190684
套红
已修改2个文件
83 ■■■■■ 文件已修改
pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/product/file/util/FileUtil.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml
@@ -29,6 +29,11 @@
            <groupId>com.lx</groupId>
            <artifactId>product-server-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
        </dependency>
        <!--使用open office-->
        <dependency>
            <groupId>com.artofsolving</groupId>
src/main/java/com/product/file/util/FileUtil.java
@@ -1,11 +1,22 @@
package com.product.file.util;
import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.IdUtil;
import cn.hutool.poi.word.WordUtil;
import com.aspose.words.Document;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.xwpf.NiceXWPFDocument;
import com.google.common.collect.Maps;
import com.product.common.lang.StringUtils;
import com.product.core.config.Global;
import com.product.core.exception.BaseException;
import com.product.file.config.CmnConst;
import com.product.file.config.FileCode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.text.WordUtils;
import org.apache.log4j.Logger;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import java.io.*;
import java.util.List;
@@ -21,15 +32,70 @@
 * @Author: 6c
 * @Description:
 */
@Slf4j
public class FileUtil {
    private static Logger logger = Logger.getLogger(FileUtil.class);
    private static Properties properties;
    private FileUtil() {
    }
    /**
     * 合并word文档
     *
     * @param source 源文件
     * @param target 目标文件
     * @return
     */
    public static File mergeFile(File source, File target) throws Exception {
        //判断文件是否为 docx或doc格式
        if (!source.getName().endsWith(".docx") && !source.getName().endsWith(".doc")) {
            throw new BaseException(FileCode.ADD_FILE_NOT_ALLOWED);
        }
        //如果是doc格式则转换为docx格式
        if (source.getName().endsWith(".doc")) {
            source = toDocx(source);
        }
        if (target.getName().endsWith(".doc")) {
            target = toDocx(target);
        }
        XWPFTemplate template = XWPFTemplate.compile(source);
        NiceXWPFDocument xwpfDocument = template.getXWPFDocument();
        try {
            NiceXWPFDocument sub = new NiceXWPFDocument(new FileInputStream((target)));
            NiceXWPFDocument newDoc = xwpfDocument.merge(sub);
            String tempFile = Global.getSystemConfig("temp.dir", "./attachment/temp") + File.separator + UUID.randomUUID() + ".docx";
            try (FileOutputStream out = new FileOutputStream(tempFile)) {
                newDoc.write(out);
                newDoc.close();
                return new File(tempFile);
            } catch (IOException e) {
                throw e;
            } finally {
                newDoc.close();
                sub.close();
            }
        } catch (IOException e) {
            throw e;
        } catch (Exception e) {
            throw e;
        }
    }
    public static File toDocx(File file) {
        String docxName = UUID.randomUUID().toString() + ".docx";
        File docxFile = new File(file.getParent() + File.separator + docxName);
        String tempDir = Global.getSystemConfig("temp.dir", "./attachment/temp");
        File tempFile = new File(tempDir + File.separator + docxName);
        try {
            Document document = new Document(new FileInputStream(file));
            document.save(tempFile.getAbsolutePath(), com.aspose.words.SaveFormat.DOCX);
            return tempFile;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return docxFile;
    }
    /**
     * 批量打包
@@ -39,7 +105,7 @@
     * @return zip文件保存绝对路径
     */
    public static long createZip(List<Map<String, String>> pathList, OutputStream os) {
        logger.info("正在打包文件...");
        log.info("正在打包文件...");
        try {
            long size = 0;
            ZipOutputStream out = new ZipOutputStream(os);
@@ -64,7 +130,7 @@
                    fileName = head + "(" + showCount + ")." + tail;
                }
                fileNameCountMap.put(fileName, ++showCount);
                logger.info(String.format("正在打包文件 %s", fileName));
                log.info(String.format("正在打包文件 %s", fileName));
                //以论文标题为每个文件命名
                FileInputStream fis = new FileInputStream(downloadPath);
@@ -76,11 +142,11 @@
                while ((len = fis.read(buffer)) > 0) {
                    if (symbol == 1) {
                        // 加密
                        logger.info("正在加密...");
                        log.info("正在加密...");
                        out.write(encryption(buffer), 0, len);
                    } else if (symbol == -1) {
                        // 解密
                        logger.info("正在解密...");
                        log.info("正在解密...");
                        out.write(decryption(buffer), 0, len);
                    } else {
                        // 单纯的复制