Commit 86dee380 by weiguanying

国结公共模块代码上传

parent 019ef2d7
...@@ -6,7 +6,10 @@ import cn.com.brilliance.doc.service.WordTemplateService; ...@@ -6,7 +6,10 @@ import cn.com.brilliance.doc.service.WordTemplateService;
import cn.com.brilliance.doc.utils.WordToPDF; import cn.com.brilliance.doc.utils.WordToPDF;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.Map; import java.util.Map;
...@@ -65,7 +68,6 @@ public class FileController { ...@@ -65,7 +68,6 @@ public class FileController {
wordToPDF.doxcTopdf(filePath, targetPath, licenseKey); wordToPDF.doxcTopdf(filePath, targetPath, licenseKey);
return targetPath; return targetPath;
} }
/** /**
* word-docx模板生成word-docx * word-docx模板生成word-docx
* @param paramMap map * @param paramMap map
...@@ -76,4 +78,17 @@ public class FileController { ...@@ -76,4 +78,17 @@ public class FileController {
public String wordTemplateToWord(@RequestBody Map<String, Object> paramMap) { public String wordTemplateToWord(@RequestBody Map<String, Object> paramMap) {
return wordTemplateService.poiCreateWord(paramMap); return wordTemplateService.poiCreateWord(paramMap);
} }
/**
*
* 读取模板文件并生成docx返回base码预览
* @param paramMap 模板所需参数
* @param response 请求应答
* @return
* @throws IOException
*/
@PostMapping("word")
public String wordConvertAndPreview(@RequestBody Map<String, Object> paramMap, HttpServletResponse response) throws IOException {
return wordTemplateService.wordConvertAndPreview(paramMap,response);
}
} }
...@@ -2,10 +2,13 @@ package cn.com.brilliance.doc.service; ...@@ -2,10 +2,13 @@ package cn.com.brilliance.doc.service;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map; import java.util.Map;
@Repository @Repository
public interface WordTemplateService { public interface WordTemplateService {
String docxTemplateToDocx(String templateName); String docxTemplateToDocx(String templateName);
String poiCreateWord(Map<String, Object> paramMap); String poiCreateWord(Map<String, Object> paramMap);
String wordConvertAndPreview(Map<String, Object> paramMap, HttpServletResponse response) throws IOException;
} }
...@@ -5,6 +5,7 @@ import cn.com.brilliance.doc.service.WordTemplateService; ...@@ -5,6 +5,7 @@ import cn.com.brilliance.doc.service.WordTemplateService;
import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.XWPFTemplate;
import fr.opensagres.xdocreport.document.json.JSONObject; import fr.opensagres.xdocreport.document.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import fr.opensagres.xdocreport.document.IXDocReport; import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry; import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
...@@ -12,8 +13,13 @@ import fr.opensagres.xdocreport.template.IContext; ...@@ -12,8 +13,13 @@ import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind; import fr.opensagres.xdocreport.template.TemplateEngineKind;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import sun.misc.BASE64Encoder;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
...@@ -29,6 +35,7 @@ public class WordTemplateServiceImpl implements WordTemplateService { ...@@ -29,6 +35,7 @@ public class WordTemplateServiceImpl implements WordTemplateService {
@Autowired @Autowired
private DocBean docBean; private DocBean docBean;
@Override
public String docxTemplateToDocx(String templateName) { public String docxTemplateToDocx(String templateName) {
InputStream ins = null; InputStream ins = null;
OutputStream out = null; OutputStream out = null;
...@@ -79,11 +86,12 @@ public class WordTemplateServiceImpl implements WordTemplateService { ...@@ -79,11 +86,12 @@ public class WordTemplateServiceImpl implements WordTemplateService {
} }
/** /**
*
* 基于poi-tl模板引擎生成docx模板文件为docx * 基于poi-tl模板引擎生成docx模板文件为docx
*
* @param paramMap 模板文件替换参数 * @param paramMap 模板文件替换参数
* @return * @return
*/ */
@Override
public String poiCreateWord(Map<String, Object> paramMap) { public String poiCreateWord(Map<String, Object> paramMap) {
String templatePath = docBean.getTemplatesPath() + paramMap.get("templateName"); String templatePath = docBean.getTemplatesPath() + paramMap.get("templateName");
String targetPath = docBean.getFilePath() + paramMap.get("fileName"); String targetPath = docBean.getFilePath() + paramMap.get("fileName");
...@@ -100,4 +108,63 @@ public class WordTemplateServiceImpl implements WordTemplateService { ...@@ -100,4 +108,63 @@ public class WordTemplateServiceImpl implements WordTemplateService {
return targetPath; return targetPath;
} }
/**
* 读取模板文件并生成docx返回base码预览和下载
* @date 2023-03-21
* @author weiguanying
* @param paramMap
* @param response
* @return
* @throws IOException
*/
@Override
public String wordConvertAndPreview(Map<String, Object> paramMap, HttpServletResponse response) throws IOException {
File sourceFile = new File(docBean.getTemplatesPath() + paramMap.get("templateName"));
//在模板文件中任意表格位置填充数据
Map<String, Object> data = new HashMap();
data.put("title", paramMap.get("title"));
//浏览器端下载
response.setCharacterEncoding("utf-8");
response.setContentType("application/msword" + ";charset=UTF-8");
String fileName = "preview" + ".docx";
response.setHeader("Content-Disposition", "attachment;filename="
.concat(String.valueOf(URLEncoder.encode(fileName, "UTF-8"))));
response.flushBuffer();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sourceFile));
//创建输出流
OutputStream os = response.getOutputStream();
//最终编译渲染并输出
XWPFTemplate.compile(sourceFile).render(data).writeAndClose(os);
// 创建字节输出流
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
outputStream.write(buffer, 0, i);
i = bis.read(buffer);
}
// 读取输出流字节
byte[] bytes = outputStream.toByteArray();
// 转BASE64编码字符串
BASE64Encoder encoder = new BASE64Encoder();
String base64String = encoder.encodeBuffer(bytes).trim();
if (bis != null) {
bis.close();
}
if (os != null) {
os.close();
}
if (outputStream != null) {
outputStream.close();
}
System.out.println(base64String);
// response.se
return base64String;
// return base64String.replaceAll("\n", "").replaceAll("\r", "");
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment