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 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 list = new ArrayList<>(); //用于记录该临时pdf文件是否删除 List 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; } }