package com.ruoyi.web.controller.project; 
 | 
  
 | 
import com.itextpdf.text.DocumentException; 
 | 
import com.ruoyi.common.config.RuoYiConfig; 
 | 
import com.ruoyi.common.core.controller.BaseController; 
 | 
import com.ruoyi.common.utils.MergeFilesToPDFUtils; 
 | 
import com.ruoyi.project.domain.MegerIsRemove; 
 | 
import com.ruoyi.project.domain.ServiceDonateannex; 
 | 
import com.ruoyi.project.domain.ServiceDonatebaseinfo; 
 | 
import com.ruoyi.project.service.IBaseOnlyvalueService; 
 | 
import com.ruoyi.project.service.IServiceDonateannexService; 
 | 
import com.ruoyi.project.service.IServiceDonatebaseinfoService; 
 | 
import io.swagger.annotations.Api; 
 | 
import io.swagger.annotations.ApiOperation; 
 | 
import lombok.extern.slf4j.Slf4j; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
import org.springframework.web.bind.annotation.GetMapping; 
 | 
import org.springframework.web.bind.annotation.RequestMapping; 
 | 
import org.springframework.web.bind.annotation.RequestParam; 
 | 
import org.springframework.web.bind.annotation.RestController; 
 | 
  
 | 
import javax.servlet.http.HttpServletResponse; 
 | 
import java.io.File; 
 | 
import java.io.IOException; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Collections; 
 | 
import java.util.Comparator; 
 | 
import java.util.List; 
 | 
  
 | 
/** 
 | 
 * PDF合并 
 | 
 * 
 | 
 * @author ruoyi 
 | 
 * @date 2022-01-24 
 | 
 */ 
 | 
@Slf4j 
 | 
@Api("PDF合并") 
 | 
@RestController 
 | 
@RequestMapping("/project/pdfmerge") 
 | 
public class PdfMergeController extends BaseController { 
 | 
    @Autowired 
 | 
    private IServiceDonateannexService serviceDonateannexService; 
 | 
  
 | 
    @Autowired 
 | 
    private MergeFilesToPDFUtils mergeFilesToPDFUtils; 
 | 
  
 | 
    @Autowired 
 | 
    private IBaseOnlyvalueService baseOnlyvalueService; 
 | 
  
 | 
    @Autowired 
 | 
    private IServiceDonatebaseinfoService donatebaseinfoService; 
 | 
  
 | 
    /** 
 | 
     * 图片、pdf、文档合并成pdf 
 | 
     */ 
 | 
    @ApiOperation("图片、pdf、文档合并成pdf") 
 | 
    @GetMapping("/merge") 
 | 
    public void merge(@RequestParam("infoId") Long infoId, HttpServletResponse response) { 
 | 
        log.info("merge的入参为辅:{}", infoId); 
 | 
        ServiceDonateannex serviceDonateannex = new ServiceDonateannex(); 
 | 
        serviceDonateannex.setInfoid(infoId); 
 | 
        List<ServiceDonateannex> serviceDonateannexes = serviceDonateannexService.queryList(serviceDonateannex); 
 | 
        if (!CollectionUtils.isEmpty(serviceDonateannexes)) { 
 | 
            log.info("serviceDonateannexes查询的数据为:{}", serviceDonateannexes.size()); 
 | 
            //根据Annexfilestype进行排序 
 | 
            Collections.sort(serviceDonateannexes, Comparator.comparingInt(ServiceDonateannex::getAnnexfilestype)); 
 | 
            //获取文件存放的位置(配置文件里的Profile地址) 
 | 
            String localPath = RuoYiConfig.getProfile(); 
 | 
            //用于转成一维数组 
 | 
            List<String> list = new ArrayList<>(); 
 | 
            //用于记录该临时pdf文件是否删除 
 | 
            List<MegerIsRemove> megerIsRemoveList = new ArrayList<>(); 
 | 
            for (ServiceDonateannex serviceDonateannex1 : serviceDonateannexes) { 
 | 
                String path = serviceDonateannex1.getAnnexurl().replace("/profile", localPath); 
 | 
                String suffix = path.substring(path.lastIndexOf(".")); 
 | 
                Boolean aBoolean = false; 
 | 
                if (suffix.equals(".jpg") || suffix.equals(".JPG") || suffix.equals(".PNG") || suffix.equals(".png") || suffix.equals(".JPEG") || suffix.equals(".jpeg")) { 
 | 
                    //图片处理 
 | 
                    try { 
 | 
                        aBoolean = mergeFilesToPDFUtils.addImageToPdf(path, getNewFileNameWithExtension(path, ".pdf")); 
 | 
                    } catch (IOException e) { 
 | 
                        e.printStackTrace(); 
 | 
                    } 
 | 
                } else if (suffix.equals(".pdf") || suffix.equals(".PDF")) { 
 | 
                    //pdf文件处理 
 | 
                    String pdf = getNewFileNameWithExtension(path, ".pdf"); 
 | 
                    list.add(pdf); 
 | 
                    megerIsRemoveList.add(new MegerIsRemove(false, pdf)); 
 | 
                } else if (suffix.equals(".doc") || suffix.equals(".DOC") || suffix.equals(".docx") || suffix.equals(".DOCX")) { 
 | 
                    //word文件处理 
 | 
                    aBoolean = mergeFilesToPDFUtils.wordtoPdf(path, getNewFileNameWithExtension(path, ".pdf")); 
 | 
                } 
 | 
                if (aBoolean) { 
 | 
                    //将图片和word文件的临时文件,存到集合中,以便后面删除 
 | 
                    String pdf = getNewFileNameWithExtension(path, ".pdf"); 
 | 
                    list.add(pdf); 
 | 
                    megerIsRemoveList.add(new MegerIsRemove(true, pdf)); 
 | 
                } 
 | 
            } 
 | 
            //获取合并名称 
 | 
            ServiceDonatebaseinfo donatebaseinfo = donatebaseinfoService.getById(serviceDonateannexes.get(0).getInfoid()); 
 | 
  
 | 
            String fileName = donatebaseinfo.getIdcardno() + donatebaseinfo.getName() + ".pdf"; 
 | 
            try { 
 | 
                //文件合并 
 | 
                mergeFilesToPDFUtils.mergePdfFiles(list, fileName); 
 | 
            } catch (IOException e) { 
 | 
                e.printStackTrace(); 
 | 
            } catch (DocumentException e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
            //删除临时文件 
 | 
            for (MegerIsRemove megerIsRemove : megerIsRemoveList) { 
 | 
                if (megerIsRemove.getIsdel()) { 
 | 
                    new File(megerIsRemove.getPath()).delete(); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private static String getNewFileNameWithExtension(String fileName, String extension) { 
 | 
        int dotIndex = fileName.lastIndexOf('.'); 
 | 
        return dotIndex != -1 ? fileName.substring(0, dotIndex) + extension : fileName; 
 | 
    } 
 | 
  
 | 
} 
 |