fei
7 天以前 f2f1274c7b51671d6d3b0b503f229da4657484f2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/archive/archiveAllExportController.java
@@ -1,34 +1,26 @@
package com.ruoyi.web.controller.archive;
import com.aspose.cells.PdfCompliance;
import com.aspose.words.License;
import com.deepoove.poi.XWPFTemplate;
import com.itextpdf.text.*;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.common.utils.poi.ExcelExp;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.utils.poi.ExcelUtilManySheet;
import com.ruoyi.common.utils.poi.ExcelUtilManySheetSecond;
import com.ruoyi.common.utils.poi.*;
import com.ruoyi.domain.ArchiveRecords;
import com.ruoyi.domain.DocumentMaterials;
import com.ruoyi.domain.vo.ArchiveInfoVo;
import com.ruoyi.domain.vo.DocumentMaterialsVo;
import com.ruoyi.domain.vo.DocumentMaterialsVoSmall;
import com.ruoyi.framework.web.domain.server.Sys;
import com.ruoyi.domain.vo.*;
import com.ruoyi.service.IArchiveRecordsService;
import com.ruoyi.service.IDocumentMaterialsService;
import com.ruoyi.service.impl.BarcodeService;
import com.ruoyi.service.impl.pdfGenerateService;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellUtil;
import org.apache.poi.xssf.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -36,25 +28,24 @@
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.reflect.Field;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import static org.apache.poi.hssf.usermodel.HSSFCell.*;
// 导入ByteArrayOutputStream用于临时存储PDF数据
import java.io.ByteArrayOutputStream;
@RestController
@RequestMapping("/system/archiveAllExport")
public class archiveAllExportController {
    // 存储当天导出序号的Map,键为日期(yyyyMMdd),值为当前序号
    private static Map<String, Integer> dailySequenceMap = new ConcurrentHashMap<>();
    @Autowired
    private pdfGenerateService pdfGenerateService;
@@ -65,28 +56,290 @@
    @Autowired
    private IArchiveRecordsService iArchiveRecordsService;
    // 用于生成当天导出序号的方法
    private String generateDailySequence(String date) {
        // 使用synchronized确保线程安全
        synchronized (dailySequenceMap) {
            // 获取当前日期的序号,如果不存在则初始化为0
            int sequence = dailySequenceMap.getOrDefault(date, 0);
            // 序号递增
            sequence++;
            // 更新Map中的序号
            dailySequenceMap.put(date, sequence);
            // 格式化为三位字符串,不足三位补前导零
            return String.format("%03d", sequence);
        }
    }
    public  boolean getLicense() {
        boolean result = false;
        try {
            InputStream is = null;
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            org.springframework.core.io.Resource[] resources = resolver.getResources("classpath:words.xml");
            is = resources[0].getInputStream();
            // ��Ŀ��lincense.xml��·��
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    public  boolean getLicenseExcel() {
        boolean result = false;
        InputStream is = null;
        try {
            ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
            org.springframework.core.io.Resource[] resources = resolver.getResources("classpath:license.xml");
            is = resources[0].getInputStream();
            com.aspose.cells.License aposeLic = new com.aspose.cells.License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return result;
    }
    /**
     * 将Excel指定子sheet转换为PDF并下载
     * @param response 响应对象
     * @param excelPath Excel文件路径
     * @param sheetName 子sheet名称
     * @throws Exception 异常信息
     */
    @PostMapping("/exportSheetToPdf")
    public void exportSheetToPdf(HttpServletResponse response, String excelPath, String sheetName) throws Exception {
        // 设置响应头
        response.setContentType(MediaType.APPLICATION_PDF_VALUE);
        response.setHeader("Content-Disposition", "attachment; filename=sheet.pdf");
        try {
            // 使用Aspose.Cells读取Excel文件
            com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook(excelPath);
            // 获取指定名称的子sheet
            com.aspose.cells.Worksheet sheet = wb.getWorksheets().get(sheetName);
            // 如果需要获取索引方式的子sheet,可以使用以下代码
            // com.aspose.cells.Worksheet sheet = wb.getWorksheets().get(0); // 获取第一个sheet
            // 创建一个新的Workbook,只包含指定的sheet
            com.aspose.cells.Workbook newWorkbook = new com.aspose.cells.Workbook();
            newWorkbook.getWorksheets().clear();
            newWorkbook.getWorksheets().addCopy(sheet.getName());
            // 将Excel转换为PDF字节数组
            java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
            newWorkbook.save(baos, com.aspose.cells.SaveFormat.PDF);
            byte[] pdfBytes = baos.toByteArray();
            // 将PDF输出到响应流
            try (ServletOutputStream os = response.getOutputStream()) {
                os.write(pdfBytes);
                os.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
    /**
     * 将Excel所有子sheet转换为PDF并打包下载
     * @param response 响应对象
     * @param excelPath Excel文件路径
     * @throws Exception 异常信息
     */
    @PostMapping("/exportAllSheetsToPdf")
    public void exportAllSheetsToPdf(HttpServletResponse response, String excelPath) throws Exception {
        // 设置响应头
        response.setContentType("application/zip");
        response.setHeader("Content-Disposition", "attachment; filename=all_sheets.zip");
        try (ServletOutputStream os = response.getOutputStream();
             ZipOutputStream zos = new ZipOutputStream(os)) {
            // 使用Aspose.Cells读取Excel文件
            com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook(excelPath);
            // 获取所有sheet
            com.aspose.cells.WorksheetCollection sheets = wb.getWorksheets();
            // 遍历所有sheet
            for (int i = 0; i < sheets.getCount(); i++) {
                com.aspose.cells.Worksheet sheet = sheets.get(i);
                String sheetName = sheet.getName();
                // 创建一个新的Workbook,只包含当前sheet
                com.aspose.cells.Workbook newWorkbook = new com.aspose.cells.Workbook();
                newWorkbook.getWorksheets().clear();
                newWorkbook.getWorksheets().addCopy(sheet.getName());
                // 创建临时字节输出流
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                // 将新的Workbook保存为PDF到临时流
                newWorkbook.save(baos, com.aspose.cells.SaveFormat.PDF);
                byte[] pdfBytes = baos.toByteArray();
                // 获取PDF总页数
                // 将PDF添加到ZIP文件
                ZipEntry entry = new ZipEntry(sheetName + ".pdf");
                zos.putNextEntry(entry);
                zos.write(pdfBytes);
                zos.closeEntry();
                System.out.println("Excel子sheet \"" + sheetName + "\" 转换为PDF成功");
            }
            System.out.println("Excel所有子sheet转换为PDF并打包成功");
        } catch (Exception e) {
            e.printStackTrace();
            throw e;
        }
    }
    @PostMapping("/importTemplate")
    public void importTemplate(HttpServletResponse response) throws IOException
    {
        if (!getLicense()) {
            return;
        }
        try {
            // 获取 Word 模板所在路径
            String filepath = "09-备考表.docx";
            // 通过 XWPFTemplate 编译文件并渲染数据到模板中
            XWPFTemplate template = XWPFTemplate.compile(filepath).render(
                    new HashMap<String, Object>(){{
                        put("pages", 67);
                    }});
            String renderedDocPath = "rendered_output.docx";
            File renderedFile = new File(renderedDocPath);
            try {
                // 将完成数据渲染的文档写出
                template.writeAndClose(new FileOutputStream(renderedFile));
            } catch (IOException e) {
                e.printStackTrace();
            }
            File file = new File("test1.pdf");
            FileOutputStream os = new FileOutputStream(file);
            com.aspose.words.Document doc = new com.aspose.words.Document("rendered_output.docx");
            doc.save(os, com.aspose.words.SaveFormat.PDF);//ȫ��֧��DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF �໥ת��
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (!getLicenseExcel()) {
            System.out.println("授权失败");
            return ;
        }
        String inpath= "案卷封面.xls";
        long old = System.currentTimeMillis();
        // 设置响应头
        response.setContentType("application/pdf");
        response.setHeader("Content-Disposition", "attachment; filename=import_template.pdf");
        try {
            // 读取Excel文件
            com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook(inpath);
            // 获取需要导出的sheet(索引从0开始)
            int targetSheetIndex = 1;
            com.aspose.cells.Worksheet targetSheet = wb.getWorksheets().get(targetSheetIndex);
            targetSheet.autoFitRows(true);
            System.out.println("当前sheet名称:" + targetSheet.getName());
            System.out.println("当前sheet索引:" + targetSheet.getIndex());
            // 隐藏所有其他工作表
            for (int i = 0; i < wb.getWorksheets().getCount(); i++) {
                if (i != targetSheetIndex) {
                    wb.getWorksheets().get(i).setVisible(false);
                }
            }
            // 设置活动工作表为目标工作表
            wb.getWorksheets().setActiveSheetIndex(targetSheetIndex);
            // 创建PDF保存选项
            com.aspose.cells.PdfSaveOptions pdfSaveOptions = new com.aspose.cells.PdfSaveOptions();
            // 设置页面类型为A4
            // 确保所有列在一页上
            pdfSaveOptions.setAllColumnsInOnePagePerSheet(true);
            // 设置打印页面类型为默认
            pdfSaveOptions.setCompliance(PdfCompliance.PDF_A_1_B); // 设置 PDF 兼容性标准
            // 直接将原始工作簿保存为PDF(只包含可见的工作表)
            wb.save(response.getOutputStream(), pdfSaveOptions);
            long now = System.currentTimeMillis();
            System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒");
        } catch (Exception e) {
            e.printStackTrace();
            // 打印详细错误信息
            System.err.println("转换失败:" + e.getMessage());
            e.printStackTrace(System.err);
            // 返回错误信息
            response.reset();
            response.setContentType("text/plain;charset=utf-8");
            response.getWriter().write("导出失败:" + e.getMessage());
            response.getWriter().flush();
        }
        //导出卷面封面代码
        ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(55L);
        List<ArchiveInfoVo> arsi = new ArrayList<>();
        arsi.add(aIV);
        String recordId = aIV.getRecordId();
        byte[] imgr = barcodeService.generateBarcodeImage(recordId);
        byte[] sedcode = pdfGenerateService.createQrCodeN(recordId, 30, 30);
        ExcelExp e1 = new ExcelExp("案卷封面数据",arsi, ArchiveInfoVo.class);
        ExcelExp e2 = new ExcelExp("提取方法…",  arsi, ArchiveInfoVo.class);
        ExcelExp e2 = new ExcelExp("案卷封面",  arsi, recordId, imgr,sedcode, ArchiveInfoVo.class);
        List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
        mysheet.add(e1);
        mysheet.add(e2);
        ByteOutputStream bos1 = new ByteOutputStream();
        ExcelUtilManySheetSecond<List<ExcelExp>> util2 = new ExcelUtilManySheetSecond<List<ExcelExp>>(mysheet);
        util2.exportExcelManySheet(response, mysheet);
      //  util2.exportExcelManySheet(response, mysheet);
@@ -116,7 +369,330 @@
    @PostMapping("/exportChooseArchive/{ids}")
    public void exportChooseArchive(HttpServletResponse response,  @PathVariable Long[] ids)throws Exception
    {
        //计算文件的大小
        Double siz = 0.0;
        for(int i = 0; i < ids.length; i++) {
            // 获取文件的保存位置,读取数据库,
            DocumentMaterials documentMaterials = new DocumentMaterials();
            documentMaterials.setRecordId(ids[i]);
            List<DocumentMaterialsVoLarge> docs = documentMaterialsService.selectDocumentMaterialsAllByRecordId(ids[i]);
            System.out.println(docs.size()+"----009");
            for (DocumentMaterialsVoLarge dc : docs) {
                if(dc!=null)
                    siz += dc.getFileSize()!=null?dc.getFileSize():0;
            }
        }
        System.out.println(siz/1000);
        //判断是否大于4G,是的话,直接抛出异常
        long maxSize = 4L * 1024 * 1024 * 1024; // 4GB in bytes
        if (siz > maxSize) {
            throw new RuntimeException("文件总大小超过4GB,无法导出");
        }
        System.out.println("092939932");
        String zipFileName ="test" +".zip";
        //生成压缩包存储地址(最后会删掉)
        String fileZip = RuoYiConfig.getProfile() + "/download/" + zipFileName;
        OutputStream os=null;
        ZipOutputStream zos = null ;
        System.out.println("==============_______________");
        System.out.println(ids.length);
        File file = new File(fileZip);
        try {
            if (!file.getParentFile().exists()) {
                file.getParentFile().mkdirs();
            }
            os = new FileOutputStream(file);
            //压缩文件
            zos = new ZipOutputStream(os);
            //拿到当前的时间
            LocalDate date = LocalDate.now();
            System.out.println("当前日期: " + date);
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
            String formattedDate = date.format(formatter);
            System.out.println(formattedDate);
            // 生成当天导出序号
            String sequence = generateDailySequence(formattedDate);
            String fna = "GH" + formattedDate + sequence + "/";
            zos.putNextEntry(new ZipEntry(fna));
            //添加ids的全部数据到excel
            ArchiveRecords archiveRecords = new ArchiveRecords();
            archiveRecords.setIds(ids);
            List<ArchiveRecords> lis = iArchiveRecordsService.selectArchiveRecordsList(archiveRecords);
            //案卷目录导出
            ZipEntry entry = new ZipEntry(fna + "案卷目录" + ".xls");
            ExcelUtil<ArchiveRecords> util = new ExcelUtil<ArchiveRecords>(ArchiveRecords.class);
            zos.putNextEntry(entry);
            ByteOutputStream bos = new ByteOutputStream();
            util.byteOutputStreamExcel(bos, lis,"案卷目录", "");
            bos.writeTo(zos);
            //移交清单
            List<ArchiveRecordSmall> lrs = iArchiveRecordsService.findByIds(archiveRecords);
            System.out.println(lrs);
            System.out.println("99999999990000");
            ZipEntry entry1 = new ZipEntry(fna + "移交清单" + ".xls");
            ExcelUtil<ArchiveRecordSmall> util1 = new ExcelUtil<ArchiveRecordSmall>(ArchiveRecordSmall.class);
            ExcelExp e6 = new ExcelExp("移交清单",lrs, ArchiveRecordSmall.class);
          //  ExcelExp e4 = new ExcelExp("案卷封面",  arsi, recordId1, imgr1,sedcode, ArchiveInfoVo.class);
            List<ExcelExp> mysheet6 = new ArrayList<ExcelExp>();
            mysheet6.add(e6);
         //   mysheet1.add(e4);
            ByteOutputStream bos6 = new ByteOutputStream();
            ExcelUtilManySheetThird<List<ExcelExp>> util6 = new ExcelUtilManySheetThird<List<ExcelExp>>(mysheet6);
            util6.exportExcelManySheet(bos6, mysheet6);
            //  System.out.println(bos2);
            zos.putNextEntry(entry1);
          //  ByteOutputStream bos1 = new ByteOutputStream();
           // util6.byteOutputStreamExcel(bos1, lrs,"移交清单", "");
            bos6.writeTo(zos);
            for(int i = 0; i < ids.length; i++) {
                // 获取文件的保存位置,读取数据库,
                DocumentMaterials documentMaterials = new DocumentMaterials();
                documentMaterials.setRecordId(ids[i]);
                List<DocumentMaterialsVoLarge> docs = documentMaterialsService.selectDocumentMaterialsAllByRecordId(ids[i]);
                System.out.println(docs.size()+"----009");
                //.selectDocumentMaterialsList(documentMaterials);
                List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(ids[i].toString());
                ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(ids[i]);
                String adir = aIV.getInquiryNumber() + " " + aIV.getRecordId();
                System.out.println(fna+adir);
                zos.putNextEntry(new ZipEntry(fna + adir + "/"));
                //在里面添加文件
                boolean res = true;
                if(res) {
                    zos.putNextEntry(new ZipEntry(fna + adir + "/01-申请材料/"));
                    zos.putNextEntry(new ZipEntry(fna + adir + "/02-办案过程材料/"));
                    zos.putNextEntry(new ZipEntry(fna + adir + "/03-结论性文件/"));
                    zos.putNextEntry(new ZipEntry(fna + adir + "/04-其他材料/"));
                    zos.putNextEntry(new ZipEntry(fna + adir + "/05-档案变更材料/"));
                    zos.putNextEntry(new ZipEntry(fna + adir + "/06-业务数据/"));
                    res = false;
                }
                //添加07  的pdf
                //pdf目录封面
                String pdfPathF = "07-案卷封面.pdf";
                pdfGenerateService.generatePdf(pdfPathF, ids[i]);
                // 2. 压缩PDF到ZIP文件
                // 添加PDF文件到ZIP
                ZipEntry zipEntry2 = new ZipEntry(fna + adir +"/"+pdfPathF);
                zos.putNextEntry(zipEntry2);
                // 读取PDF文件内容并写入ZIP
                try (FileInputStream fis = new FileInputStream(pdfPathF)) {
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = fis.read(buffer)) > 0) {
                        zos.write(buffer, 0, len);
                    }
                }
                //08-卷内卷内目录的pdf
                String pdf08Path= "08-卷内目录.pdf";
                List<DocumentMaterialsVo> list3 = dsvs;
                if(list3.size()>0) {
                    pdfGenerateService.generateFileDirectoryPdf(pdf08Path, list3);
                    ZipEntry zipEntry3 = new ZipEntry(fna + adir +"/"+pdf08Path);
                    zos.putNextEntry(zipEntry3);
                    // 读取PDF文件内容并写入ZIP
                    try (FileInputStream fis = new FileInputStream(pdf08Path)) {
                        byte[] buffer = new byte[1024];
                        int len;
                        while ((len = fis.read(buffer)) > 0) {
                            zos.write(buffer, 0, len);
                        }
                    }
                }
                //09-备考表.pdf
                String pdf09Path = "09-备考表.pdf";
                pdfGenerateService.generateFileStyleInfo(pdf09Path, aIV.getRecordId(), ids[i]);
                // 2. 压缩PDF到ZIP文件
                // 添加PDF文件到ZIP
                ZipEntry zipEntry4 = new ZipEntry(fna + adir +"/"+pdf09Path);
                zos.putNextEntry(zipEntry4);
                // 读取PDF文件内容并写入ZIP
                try (FileInputStream fis = new FileInputStream(pdf09Path)) {
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = fis.read(buffer)) > 0) {
                        zos.write(buffer, 0, len);
                    }
                }
                //excel 卷内封面导出zip
                ZipEntry entryiv = new ZipEntry(fna + adir +"/"+"案卷封面" + ".xls");
                List<ArchiveInfoVo> arsi = new ArrayList<>();
                arsi.add(aIV);
                String recordId1 = aIV.getRecordId();
                byte[] imgr1 = barcodeService.generateBarcodeImage(recordId1);
                byte[] sedcode = pdfGenerateService.createQrCodeN(recordId1, 30, 30);
                ExcelExp e3 = new ExcelExp("案卷封面数据",arsi, ArchiveInfoVo.class);
                ExcelExp e4 = new ExcelExp("案卷封面",  arsi, recordId1, imgr1,sedcode, ArchiveInfoVo.class);
                List<ExcelExp> mysheet1 = new ArrayList<ExcelExp>();
                mysheet1.add(e3);
                mysheet1.add(e4);
                ByteOutputStream bos2 = new ByteOutputStream();
                ExcelUtilManySheetSecond<List<ExcelExp>> util3 = new ExcelUtilManySheetSecond<List<ExcelExp>>(mysheet1);
                util3.exportExcelManySheet(bos2, mysheet1);
                //  System.out.println(bos2);
                zos.putNextEntry(entryiv);
//            ExcelUtil<ArchiveInfoVo> utilsv = new ExcelUtil<ArchiveInfoVo>(ArchiveInfoVo.class);
//
//
//            ByteOutputStream boss = new ByteOutputStream();
//            List<ArchiveInfoVo> aivs = new ArrayList<>();
//            aivs.add(aIV);
//            utilsv.byteOutputStreamExcel(boss, aivs,"Date List", "");
                bos2.writeTo(zos);
                //写入电子目录  xsxl
                ZipEntry entry5 = new ZipEntry(fna + adir +"/"+"电子文件目录" + ".xls");
                ExcelUtil<DocumentMaterialsVoLarge> util5 = new ExcelUtil<DocumentMaterialsVoLarge>(DocumentMaterialsVoLarge.class);
                zos.putNextEntry(entry5);
                ByteOutputStream bos5 = new ByteOutputStream();
                util5.byteOutputStreamExcel(bos5, docs,"电子文件目录", "");
                bos5.writeTo(zos);
                //拿到卷内目录的excel
                List<DocumentMaterialsVoSmall> list2 = dsvs.stream().map(res1 -> new DocumentMaterialsVoSmall(res1.getNum(), res1.getDocumentNumber(),res1.getCreator(),
                        res1.getTitle(), res1.getDate(), res1.getPageNumber(), res1.getRemarks())).collect(Collectors.toList());
                if(!dsvs.isEmpty()) {
                    String recordId = dsvs.get(0).getRecordId();
                    byte[] imgr = barcodeService.generateBarcodeImage(recordId);
                    ExcelExp e1 = new ExcelExp("卷内目录数据", dsvs, DocumentMaterialsVo.class);
                    ExcelExp e2 = new ExcelExp("卷内数据", list2, recordId, imgr, DocumentMaterialsVoSmall.class);
                    List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
                    mysheet.add(e1);
                    mysheet.add(e2);
                    ExcelUtilManySheet<List<ExcelExp>> util2 = new ExcelUtilManySheet<List<ExcelExp>>(mysheet);
                    ZipEntry entr = new ZipEntry(fna + adir + "/" + "卷内目录" + ".xls");
                    // ExcelUtil<DocumentMaterialsVo> util1 = new ExcelUtil<DocumentMaterialsVo>(DocumentMaterialsVo.class);
                    System.out.println(dsvs);
                    zos.putNextEntry(entr);
                    ByteOutputStream bos8 = new ByteOutputStream();
                    util2.exportExcelManySheet(bos6, mysheet);
                    //   util1.byteOutputStreamExcel(bos1, dsvs,"Date List", "");
                    bos8.writeTo(zos);
                }
                //把excel转为pdf
                byte[] buf = new byte[1024];
                for (DocumentMaterialsVoLarge dc : docs) {
                    String filePath = dc.getUrl();
                    if(filePath==null)
                        continue;
                    filePath = filePath.replace("/profile/", RuoYiConfig.getProfile() + "/");
                    System.out.println(filePath);
                    File tempFile = new File(filePath);
                    //在压缩包中添加文件夹
                    //得到文件名frontCompWithZore(4, dc.get)+
                    String fname = frontCompWithZore(4, dc.getFileNumber().intValue())+"-"+dc.getTitle()+"-"+frontCompWithZore(4,dc.getPageNumber().intValue())+"."
                            +dc.getUrl().split("\\.")[1];
                    if(dc.getStage().equals("01-申请材料"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/01-申请材料/"+fname));
                    else if(dc.getStage().equals("02-办案过程材料"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/02-办案过程材料/"+fname));
                    else if(dc.getStage().equals("03-结论性文件"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/03-结论性文件/"+fname));
                    else if(dc.getStage().equals("04-其他材料")) {
                        zos.putNextEntry(new ZipEntry(fna + adir + "/04-其他材料/" + fname));
                    }
                    else if(dc.getStage().equals("05-档案变更材料"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/05-档案变更材料/"+fname));
                    else if(dc.getStage().equals("06-业务数据"))
                        zos.putNextEntry(new ZipEntry(fna + adir + "/06-业务数据/"+fname));
                    else
                        zos.putNextEntry(new ZipEntry(fna + adir + "/"+fname));
                    int len;
                    FileInputStream in = new FileInputStream(tempFile);
                    while ((len = in.read(buf)) != -1){
                        zos.write(buf, 0, len);
                    }
                    //  zos.putNextEntry(new ZipEntry("04-其他材料"));
                    zos.closeEntry();
                    in.close();
                }
            }
            //删除压缩包
//            if(file.exists()){
//                file.delete();
//            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }finally {
            //关闭流
            if(zos != null){
                try {
                    zos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            //关闭流
            if(os!= null){
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println(file.getName());
        System.out.println(file.getTotalSpace());
        //    file.
        writeFileToRes(response, file.getName(), file);
    }
@@ -128,16 +704,24 @@
     * @param response
     * @param
     */
    @PostMapping("/export")
    @PostMapping("/export/{id}")
    public void packDownload(HttpServletResponse response, Long id) throws Exception {
    public void packDownload(HttpServletResponse response,  @PathVariable Long id) throws Exception {
        // 获取文件的保存位置,读取数据库,
        DocumentMaterials documentMaterials = new DocumentMaterials();
        documentMaterials.setRecordId(id);
        List<DocumentMaterials> docs = documentMaterialsService.selectDocumentMaterialsList(documentMaterials);
        List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString());
        ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(id);
        List<DocumentMaterialsVoLarge> docs = documentMaterialsService.selectDocumentMaterialsAllByRecordId(id);
       System.out.println(docs.size()+"----009");
                //.selectDocumentMaterialsList(documentMaterials);
        List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString());
        if(dsvs==null||dsvs.isEmpty())
        {
            throw new RuntimeException("电子文件信息没有上传,请补充!");
        }
        ArchiveInfoVo aIV = iArchiveRecordsService.selectByRecordId(id);
        System.out.println(dsvs.size());
        List<String> paths = new ArrayList<>();
//        System.out.println(docs);
        if (docs.size() == 1) {  // 直接下载
@@ -157,8 +741,11 @@
            String datumName = "user";
            //压缩文件
            List<String> filePathList = paths;
            File file = compressedFileToZip(docs, dsvs, aIV);
            File file = compressedFileToZip(docs, dsvs, aIV, id);
            System.out.println(file.getName());
            String fileName =aIV.getRecordId()+".zip";
            //输出文件流
            writeFileToRes(response, file.getName(), file);
            //删除压缩包
@@ -173,31 +760,15 @@
        String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
        String filePath = RuoYiConfig.getDownloadPath() + fileName;
        if(file.exists())
            System.out.println("322329323232323");
        System.out.println(filePath+"0009999999999");
        response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
        FileUtils.setAttachmentResponseHeader(response, realFileName);
     //   response.addHeader("Content-Disposition", "attachment;filename=fileName" + ".xls");
        FileUtils.writeBytes(filePath, response.getOutputStream());
        //        FileInputStream inputStream = new FileInputStream(file);
//        //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型.
//        response.setContentType("application/octet-stream");
//        //2.设置文件头:最后一个参数是设置下载文件名
//        response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//        response.addHeader("Content-Length", "" + file.length());
//
//        //3.通过response获取ServletOutputStream对象(out)
//        ServletOutputStream out = response.getOutputStream();
//
//        int b = 0;
//        byte[] buffer = new byte[1024];
//        while (b != -1) {
//            b = inputStream.read(buffer);
//            //4.写到输出流(out)中
//            out.write(buffer, 0, b);
//        }
//        out.flush();
//        out.close();
//        inputStream.close();
    }
    public String frontCompWithZore(int formatLength,int formatNumber){
        /**
@@ -210,81 +781,29 @@
        return newString;
    }
    private void handleXSSFImages(XSSFSheet sheet, Document pdfDoc) throws Exception {
        XSSFDrawing drawing = sheet.getDrawingPatriarch();
        if (drawing == null) return;
        for (XSSFShape shape : drawing.getShapes()) {
            if (shape instanceof XSSFPicture) {
                XSSFPicture pic = (XSSFPicture)shape;
                XSSFClientAnchor anchor = pic.getPreferredSize();
    public  com.aspose.cells.Workbook poiToAspose(org.apache.poi.ss.usermodel.Workbook poiWorkbook) throws Exception {
        // 临时文件路径
        String tempFilePath = "temp_workbook.xlsx";
                // 获取图片数据
                byte[] bytes = pic.getPictureData().getData();
                Image pdfImage = Image.getInstance(bytes);
        try {
            // 1. 将Apache POI Workbook保存为临时文件
            try (FileOutputStream fos = new FileOutputStream(tempFilePath)) {
                poiWorkbook.write(fos);
            }
                // 设置图片位置和大小
                float imageWidth = pdfImage.getWidth();
                float imageHeight = pdfImage.getHeight();
                float scale = Math.min(
                        (PageSize.A4.getWidth() - 100) / imageWidth,
                        (PageSize.A4.getHeight() - 100) / imageHeight
                );
                pdfImage.scaleAbsolute(imageWidth * scale, imageHeight * scale);
            // 2. 使用Aspose加载临时文件
            com.aspose.cells.Workbook asposeWorkbook = new com.aspose.cells.Workbook(tempFilePath);
                // 添加图片到PDF
                pdfDoc.add(pdfImage);
                pdfDoc.add(Chunk.NEWLINE);
            return asposeWorkbook;
        } finally {
            // 清理临时文件
            File tempFile = new File(tempFilePath);
            if (tempFile.exists()) {
                tempFile.delete();
            }
        }
    }
    private static String getCellValue(Cell cell,FormulaEvaluator evaluator) {
      //  System.out.println(cell);
        if (cell == null) return "";
        CellValue cellValue = evaluator.evaluate(cell);
        if(cellValue==null)
            return "";
      //  System.out.println(cellValue.getCellType());
        switch (cellValue.getCellType()) {
            case STRING:
                return cell.getStringCellValue();
            case NUMERIC:
                // 获取数值并转为整型
                double numericValue = cell.getNumericCellValue();
                // 判断是否为整数
                if (numericValue == (int)numericValue) {
                    if((int)numericValue==0)
                        return "";
                    else
                        return String.valueOf((int)numericValue);
                } else {
                    return String.valueOf(numericValue); // 或者根据需要返回四舍五入的整型
                }
            case BOOLEAN:
                return String.valueOf(cell.getBooleanCellValue());
            case FORMULA:
                return cell.getCellFormula()+"";
            case BLANK:
                return "";
            default:
                return "";
        }
    }
    private int getRealLastCellNum(Row row) {
        int lastCellNum = 0;
        for (int i = 0; i < row.getLastCellNum(); i++) {
            Cell cell = row.getCell(i);
            if (cell != null && cell.getCellType() != CellType.BLANK) {
                lastCellNum = i + 1;
            }
        }
        return lastCellNum;
    }
@@ -316,10 +835,10 @@
    // 压缩文件
    private File compressedFileToZip(List<DocumentMaterials> docs, List<DocumentMaterialsVo> dsvs,   ArchiveInfoVo aIV) throws Exception {
    private File compressedFileToZip(List<DocumentMaterialsVoLarge> docs, List<DocumentMaterialsVo> dsvs,   ArchiveInfoVo aIV, Long id) throws Exception {
        //压缩包具体名称(拼接时间戳防止重名)
        String datumName = "";
        String zipFileName = datumName + "-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".zip";
        String zipFileName =dsvs.get(0).getDocumentNumber()+aIV.getRecordId()+ ".zip";
        //生成压缩包存储地址(最后会删掉)
        String fileZip = RuoYiConfig.getProfile() + "/download/" + zipFileName;
        OutputStream os=null;
@@ -334,36 +853,195 @@
            //压缩文件
            zos = new ZipOutputStream(os);
            //pdf目录封面
            String pdfPathF = "07-卷面封面.pdf";
            pdfGenerateService.generatePdf(pdfPathF);
            // 2. 压缩PDF到ZIP文件
                // 添加PDF文件到ZIP
                ZipEntry zipEntry = new ZipEntry(pdfPathF);
                zos.putNextEntry(zipEntry);
                // 读取PDF文件内容并写入ZIP
                try (FileInputStream fis = new FileInputStream(pdfPathF)) {
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = fis.read(buffer)) > 0) {
                        zos.write(buffer, 0, len);
                //09-备考表.pdf
            String pdf09Path = "09-备考表.pdf";
          //  pdfGenerateService.generateFileStyleInfo(pdf09Path, aIV.getRecordId(), id);
            //拿到相关数据
            List<DocumentMaterialFileStyle> dmfs = documentMaterialsService.findFileStyleInfo(Math.toIntExact(id));
            LocalDate currentDate = LocalDate.now();
            String cdt = currentDate.getYear()+"年"+currentDate.getMonthValue()+"月"+currentDate.getDayOfMonth()+"日";
            HashMap<String, Object> hs = new HashMap<String, Object>();
            if(dmfs.isEmpty())
            {
                //全部数据值为0
                hs.put("pages", 0);
                hs.put("volumeNumber", aIV.getRecordId());
                hs.put("time", cdt);
            }
            else {
                int pcc = dmfs.size()<=1?0: dmfs.get(1).getCnt();
                int oth = dmfs.size()<=2?0: dmfs.get(2).getCnt();
                int allCnt = dmfs.get(0).getCnt() + pcc + oth;
                hs.put("pages", allCnt);
                hs.put("volumeNumber", aIV.getRecordId());
                hs.put("time", cdt);
            }
            if (!getLicense()) {
                System.out.println("没有相关证书!");
            }
            try {
                // 获取 Word 模板所在路径
                String filepath = "09-备考表.docx";
                // 通过 XWPFTemplate 编译文件并渲染数据到模板中
                XWPFTemplate template = XWPFTemplate.compile(filepath).render(hs
                       );
                String renderedDocPath = "rendered_output.docx";
                File renderedFile = new File(renderedDocPath);
                try {
                    // 将完成数据渲染的文档写出
                    template.writeAndClose(new FileOutputStream(renderedFile));
                } catch (IOException e) {
                    e.printStackTrace();
                }
                com.aspose.words.Document doc = new com.aspose.words.Document("rendered_output.docx");
                // 创建临时字节输出流
                ByteArrayOutputStream baobk = new ByteArrayOutputStream();
                // 将Word文档转换为PDF字节数组
                doc.save(baobk, com.aspose.words.SaveFormat.PDF);//ȫ��֧��DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF �໥ת��
//                byte[] pdfBytes = baobk.toByteArray();
                // 获取PDF总页数
                // 将PDF添加到ZIP文件
                ZipEntry entry09 = new ZipEntry(pdf09Path);
                zos.putNextEntry(entry09);
                baobk.writeTo(zos);
            } catch (Exception e) {
                e.printStackTrace();
            }
            com.aspose.words.Document doc = new com.aspose.words.Document("09-备考表.docx");
//            // 压缩PDF到ZIP文件
//            // 添加PDF文件到ZIP
//            ZipEntry zipEntry1 = new ZipEntry(pdf09Path);
//            zos.putNextEntry(zipEntry1);
//
//            // 读取PDF文件内容并写入ZIP
//            try (FileInputStream fis = new FileInputStream(pdf09Path)) {
//                byte[] buffer = new byte[1024];
//                int len;
//                while ((len = fis.read(buffer)) > 0) {
//                    zos.write(buffer, 0, len);
//                }
//            }
                //excel 卷内封面导出zip
            ZipEntry entryiv = new ZipEntry("案卷封面" + ".xls");
            List<ArchiveInfoVo> arsi = new ArrayList<>();
            arsi.add(aIV);
            String recordId1 = aIV.getRecordId();
            byte[] imgr1 = barcodeService.generateBarcodeImage(recordId1);
            byte[] sedcode = pdfGenerateService.createQrCodeN(recordId1, 30, 30);
            ExcelExp e3 = new ExcelExp("案卷封面数据",arsi, ArchiveInfoVo.class);
            ExcelExp e4 = new ExcelExp("案卷封面",  arsi, recordId1, imgr1,sedcode, ArchiveInfoVo.class);
            List<ExcelExp> mysheet1 = new ArrayList<ExcelExp>();
            mysheet1.add(e3);
            mysheet1.add(e4);
            ByteOutputStream bos2 = new ByteOutputStream();
            ExcelUtilManySheetSecond<List<ExcelExp>> util3 = new ExcelUtilManySheetSecond<List<ExcelExp>>(mysheet1);
            util3.exportExcelManySheet(bos2, mysheet1);
          //  System.out.println(bos2);
            zos.putNextEntry(entryiv);
            bos2.writeTo(zos);
            //pdf目录封面
            String pdfPathF = "07-案卷封面.pdf";
            // pdfGenerateService.generatePdf(pdfPathF, id);
            try {
                if (!getLicenseExcel()) {
                    System.out.println("授权失败");
                   // return ;
                }
                // 读取Excel文件
                com.aspose.cells.Workbook wb = poiToAspose(util3.getWb());
                // 获取需要导出的sheet(索引从0开始)
                int targetSheetIndex = 1;
                com.aspose.cells.Worksheet targetSheet = wb.getWorksheets().get(targetSheetIndex);
                targetSheet.autoFitRows(true);
                System.out.println("当前sheet名称:" + targetSheet.getName());
                System.out.println("当前sheet索引:" + targetSheet.getIndex());
                // 隐藏所有其他工作表
                for (int i = 0; i < wb.getWorksheets().getCount(); i++) {
                    if (i != targetSheetIndex) {
                        wb.getWorksheets().get(i).setVisible(false);
                    }
                }
                //excel 卷内封面导出zip
            ZipEntry entryiv = new ZipEntry("卷内封面" + ".xls");
            ExcelUtil<ArchiveInfoVo> utilsv = new ExcelUtil<ArchiveInfoVo>(ArchiveInfoVo.class);
            zos.putNextEntry(entryiv);
            ByteOutputStream boss = new ByteOutputStream();
            List<ArchiveInfoVo> aivs = new ArrayList<>();
            aivs.add(aIV);
            utilsv.byteOutputStreamExcel(boss, aivs,"Date List", "");
            boss.writeTo(zos);
                // 设置活动工作表为目标工作表
                wb.getWorksheets().setActiveSheetIndex(targetSheetIndex);
                // 创建PDF保存选项
                com.aspose.cells.PdfSaveOptions pdfSaveOptions = new com.aspose.cells.PdfSaveOptions();
                pdfSaveOptions.setCompliance(com.aspose.cells.PdfCompliance.PDF_A_1_B);
                // 创建临时字节输出流
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                // 将新的Workbook保存为PDF到临时流
             //   newWorkbook.save(baos, com.aspose.cells.SaveFormat.PDF);
                wb.save(baos, pdfSaveOptions);
                // 将PDF添加到ZIP文件
                ZipEntry entry = new ZipEntry(pdfPathF);
                zos.putNextEntry(entry);
                zos.write(baos.toByteArray());
              //  zos.closeEntry();
                // 直接将原始工作簿保存为PDF(只包含可见的工作表)
                long now = System.currentTimeMillis();
                //   System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒");
            } catch (Exception e) {
                e.printStackTrace();
                // 打印详细错误信息
                System.err.println("转换失败:" + e.getMessage());
                e.printStackTrace(System.err);
            }
//
//            ByteOutputStream boss = new ByteOutputStream();
//            List<ArchiveInfoVo> aivs = new ArrayList<>();
//            aivs.add(aIV);
//            utilsv.byteOutputStreamExcel(boss, aivs,"Date List", "");
                //写入电子目录  xsxl
            ZipEntry entry = new ZipEntry("电子文件目录" + ".xls");
            ExcelUtil<DocumentMaterials> util = new ExcelUtil<DocumentMaterials>(DocumentMaterials.class);
            ExcelUtil<DocumentMaterialsVoLarge> util = new ExcelUtil<DocumentMaterialsVoLarge>(DocumentMaterialsVoLarge.class);
            zos.putNextEntry(entry);
            ByteOutputStream bos = new ByteOutputStream();
@@ -377,16 +1055,11 @@
            String recordId = dsvs.get(0).getRecordId();
            byte[] imgr = barcodeService.generateBarcodeImage(recordId);
            ExcelExp e1 = new ExcelExp("卷内目录数据",dsvs, DocumentMaterialsVo.class);
            ExcelExp e2 = new ExcelExp("卷内数据", list2, recordId, imgr, DocumentMaterialsVoSmall.class);
            ExcelExp e2 = new ExcelExp("卷内目录", list2, recordId, imgr, DocumentMaterialsVoSmall.class);
            List<ExcelExp> mysheet = new ArrayList<ExcelExp>();
            mysheet.add(e1);
            mysheet.add(e2);
            ExcelUtilManySheet<List<ExcelExp>> util2 = new ExcelUtilManySheet<List<ExcelExp>>(mysheet);
            ZipEntry entr = new ZipEntry("卷内目录" + ".xls");
            ExcelUtil<DocumentMaterialsVo> util1 = new ExcelUtil<DocumentMaterialsVo>(DocumentMaterialsVo.class);
            System.out.println(dsvs);
@@ -399,128 +1072,88 @@
            bos1.writeTo(zos);
            //把excel转为pdf
            //08-卷内卷内目录的pdf
            String pdf08Path= "08-卷内目录.pdf";
            try {
                // 1. 读取Excel文件
                String excelPath = RuoYiConfig.getProfile() + "/download/"+"卷內目录.xls";
                String pdfPath = RuoYiConfig.getProfile() + "/download/"+"1.pdf";
                Workbook workbook = WorkbookFactory.create(new File(excelPath));
                FileOutputStream fos = new FileOutputStream(pdfPath);
                FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
                // 获取第一个工作表
                    Sheet sheet = workbook.getSheetAt(1);
                    // 创建PDF文档对象
                    Document document = new Document(PageSize.A2, 50, 50, 50, 50);
                    // 创建PDF输出流
                    PdfWriter writer = PdfWriter.getInstance(document, fos);
                // 4. 处理工作表中的图片
                if (workbook instanceof XSSFWorkbook) {
                    handleXSSFImages((XSSFSheet)sheet, document);
                if (!getLicenseExcel()) {
                    System.out.println("授权失败");
                    // return ;
                }
                    // 打开PDF文档
                    document.open();
                // 读取Excel文件
                com.aspose.cells.Workbook wb1 = poiToAspose(util2.getWb());
                    // 创建PDF表格对象
                System.out.println(sheet.getRow(0).getLastCellNum()+"--00");
                    PdfPTable table = new PdfPTable(sheet.getRow(0).getLastCellNum());
                    table.setHeaderRows(1);
                // 获取需要导出的sheet(索引从0开始)
                int targetSheetIndex = 1;
                com.aspose.cells.Worksheet targetSheet = wb1.getWorksheets().get(targetSheetIndex);
                targetSheet.autoFitRows(true);
                System.out.println("当前sheet名称:" + targetSheet.getName());
                System.out.println("当前sheet索引:" + targetSheet.getIndex());
                    // 设置表格宽度
                    table.setWidthPercentage(100);
                    // 设置表格标题
                    Paragraph title = new Paragraph(sheet.getSheetName(), new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 16, Font.BOLD));
                    title.setAlignment(Element.ALIGN_CENTER);
                    document.add(title);
                   // System.out.println(sheet.)
                    // 添加表格内容
                    for (Row row : sheet) {
                        {
                            if (row == null) continue;
                            System.out.println(getRealLastCellNum(row)+"---987");
//                            if(row.getRowNum()==0)
//                                continue;
                            if(row.getRowNum()==2)
                            {
                                PdfPCell pdfCell = ImageSet(100);
                                pdfCell.setColspan(7);
                                pdfCell.setRowspan(3);
                                pdfCell.setBorderWidth(1f);
                                pdfCell.setBorderColor(BaseColor.BLACK);
                                pdfCell.setPadding(5f);
                                pdfCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                pdfCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                                table.addCell(pdfCell);
                                System.out.println("{{{{{{{{{{{{{");
                                continue;
                            }
                            for (int i = 0; i < 7; i++)
                            {
                                Cell cell = row.getCell(i);
                                if(row.getRowNum()==3)
                                {
                                    PdfPCell pdfCell = new PdfPCell(new Paragraph("卷内目录", new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 12)));
                                    pdfCell.setColspan(7);
                                    pdfCell.setBorderWidth(1f);
                                    pdfCell.setBorderColor(BaseColor.BLACK);
                                    pdfCell.setPadding(5f);
                                    pdfCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                    pdfCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                                    table.addCell(pdfCell);
                                    System.out.println("{{{{{{{{{{{{{");
                                    break;
                                }
                                if(cell==null) {
                                    table.addCell("");
                                    continue;
                                }
                                PdfPCell pdfCell = new PdfPCell(new Paragraph(getCellValue(cell, evaluator), new Font(BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED), 12)));
                                if(row.getRowNum()!=1) {
                                    pdfCell.setBorderWidth(1f);
                                    pdfCell.setBorderColor(BaseColor.BLACK);
                                    pdfCell.setPadding(5f);
                                    pdfCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                    pdfCell.setVerticalAlignment(Element.ALIGN_MIDDLE);
                                }
                                if (cell.getRowIndex() == 5) {
                                    pdfCell.setBackgroundColor(BaseColor.LIGHT_GRAY);
                                }
                                table.addCell(pdfCell);
                            }
                        }
                // 隐藏所有其他工作表
                for (int i = 0; i < wb1.getWorksheets().getCount(); i++) {
                    if (i != targetSheetIndex) {
                        wb1.getWorksheets().get(i).setVisible(false);
                    }
                }
                    // 添加表格到PDF文档
                    table.setSpacingBefore(20f);
                    table.setSpacingAfter(20f);
                    table.setKeepTogether(true);
                    document.add(table);
                // 设置活动工作表为目标工作表
                wb1.getWorksheets().setActiveSheetIndex(targetSheetIndex);
                // 创建PDF保存选项
                com.aspose.cells.PdfSaveOptions pdfSaveOptions = new com.aspose.cells.PdfSaveOptions();
                pdfSaveOptions.setCompliance(com.aspose.cells.PdfCompliance.PDF_A_1_B);
                // 创建临时字节输出流
                ByteArrayOutputStream baosm = new ByteArrayOutputStream();
                    // 关闭PDF文档
                    document.close();
                // 将新的Workbook保存为PDF到临时流
                //   newWorkbook.save(baos, com.aspose.cells.SaveFormat.PDF);
                wb1.save(baosm, pdfSaveOptions);
                // 将PDF添加到ZIP文件
                ZipEntry entry2 = new ZipEntry(pdf08Path);
                zos.putNextEntry(entry2);
                zos.write(baosm.toByteArray());
                //  zos.closeEntry();
                // 直接将原始工作簿保存为PDF(只包含可见的工作表)
                long now = System.currentTimeMillis();
                //   System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒");
            } catch (Exception e) {
                e.printStackTrace();
                // 打印详细错误信息
                System.err.println("转换失败:" + e.getMessage());
                e.printStackTrace(System.err);
            }
            //List<DocumentMaterialsVo> list3 = dsvs;
           // pdfGenerateService.generateFileDirectoryPdf(pdf08Path, list3);
//            ZipEntry zipEntry2 = new ZipEntry(pdf08Path);
//            zos.putNextEntry(zipEntry2);
//
//            // 读取PDF文件内容并写入ZIP
//            try (FileInputStream fis = new FileInputStream(pdf08Path)) {
//                byte[] buffer = new byte[1024];
//                int len;
//                while ((len = fis.read(buffer)) > 0) {
//                    zos.write(buffer, 0, len);
//                }
//            }
            boolean res = true;
            byte[] buf = new byte[1024];
            for (DocumentMaterials dc : docs) {
            for (DocumentMaterialsVoLarge dc : docs) {
                String filePath = dc.getUrl();
                if(filePath==null)
                    continue;
                filePath = filePath.replace("/profile/", RuoYiConfig.getProfile() + "/");
                System.out.println(filePath);
@@ -592,3 +1225,7 @@
    }
}