代码优化 处女转pdf 权限问题

This commit is contained in:
gaojiabao
2023-06-02 17:04:13 +08:00
parent b4d0eab10e
commit 4d2604aea5
2 changed files with 28 additions and 26 deletions
@@ -8,12 +8,17 @@ import com.adc.da.sys.constant.ValidFlagEnum;
import com.adc.da.util.FileUtil;
import com.adc.da.util.UUIDUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.docx4j.Docx4J;
import org.docx4j.convert.out.FOSettings;
import org.docx4j.fonts.IdentityPlusMapper;
import org.docx4j.fonts.Mapper;
import org.docx4j.fonts.PhysicalFont;
import org.docx4j.fonts.PhysicalFonts;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
@@ -602,35 +607,31 @@ public class AttFileEOServiceImpl extends ServiceImpl<AttFileEODao, AttFileEO> i
if(fileInfo != null){
File fileWord = new File(src+fileInfo.getFilePath()+fileInfo.getFileName());
logger.info("==================================fileWord文件路径========================"+src+fileInfo.getFilePath()+fileInfo.getFileName());
AttFileVo attFileVo = saveFileInfo(fileWord);
// 保存后 开始转换为 pdf版本
File inputWord = new File(src+attFileVo.getFilePath()+attFileVo.getFileName());
logger.info("==================================inputWord文件路径========================"+src+attFileVo.getFilePath()+attFileVo.getFileName());
String filePdfName = "";
if(StringUtils.isNotBlank(attFileVo.getFileName())){
String[] split = attFileVo.getFileName().split("\\.");
if(StringUtils.isNotBlank(fileInfo.getFileName())){
String[] split = fileInfo.getFileName().split("\\.");
filePdfName = split[0]+".pdf";
}
File outputFile = new File(src+fileInfo.getFilePath()+filePdfName);
logger.info("==================================outputFile文件路径========================"+src+fileInfo.getFilePath()+filePdfName);
try {
InputStream docxInputStream = new FileInputStream(inputWord);
OutputStream outputStream = new FileOutputStream(outputFile);
IConverter converter = LocalConverter.builder().build();
converter.convert(docxInputStream).as(DocumentType.DOCX).to(outputStream).as(DocumentType.PDF).execute();
outputStream.close();
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(fileWord);
Mapper fontMapper = new IdentityPlusMapper();
PhysicalFont font = PhysicalFonts.getPhysicalFonts().get("Comic Sans MS");
fontMapper.put("Calibri", font);
wordMLPackage.setFontMapper(fontMapper);
OutputStream os = new java.io.FileOutputStream(src+fileInfo.getFilePath()+filePdfName);
FOSettings foSettings = Docx4J.createFOSettings();
foSettings.setWmlPackage(wordMLPackage);
Docx4J.toFO(foSettings, os, Docx4J.FLAG_EXPORT_PREFER_XSL);
File outputFile = new File(src+fileInfo.getFilePath()+filePdfName);
// 读取docx文件
// 合法存入当前文件
if(outputFile.exists()){
logger.info("==================================word.docx转换成功========================");
attFileVoPdf = saveFileInfo(outputFile);
//存入成功以后 删除word 版本
if(attFileVoPdf != null) {
if (inputWord.exists()) {
inputWord.delete();
deleteById(attFileVo.getId());
logger.info("==================================word.docx删除成功========================");
}
if (outputFile.exists()) {
outputFile.delete();
logger.info("==================================word.pdf删除成功========================");