server-controller

@Slf4j
@Controller
public class ExportPPTController {

private static final String REQ_FILES = "files";
private static final String REQ_DATA = "data";
private static final String REQ_TEMPLATE_ID = "templateId";
private static final String REQ_DOWNLOAD_FILE_NAME = "fileName";

@Autowired
private PdfHelper pdf2Helper;

@Autowired
private PPTConf pptConf;

@Autowired
private MessageSender messageSender;

@Autowired
private ViewOptionConvertReportService viewOptionConvertReportService;

@PostMapping("/ppt/handler")
public void handler(HttpServletRequest request, HttpServletResponse httpResponse) {
String downloadFileName = "" + System.currentTimeMillis();
try (XMLSlideShow ppt = genPPT(request)) {

downloadFileName = ((MultipartHttpServletRequest) request).getParameter(REQ_DOWNLOAD_FILE_NAME);
downloadFileName =
SafeString.filterFileName(StringUtil.isNotBlank(downloadFileName) ? downloadFileName : "" + System.currentTimeMillis());

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

ppt.write(outputStream);
httpResponse.addHeader(HttpHeaders.CONTENT_LENGTH, "" + outputStream.size());
httpResponse.setContentType("application/force-download");// 设置强制下载不打开
httpResponse.addHeader(HttpHeaders.CONTENT_DISPOSITION,
"attachment;filename=" + new String((downloadFileName + ".pptx").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
ppt.write(httpResponse.getOutputStream());

} catch (Exception e) {
log.error("生成PPT[" + downloadFileName + "]时出错 " + e.getMessage(), e);
}
}


@PostMapping(value = "/pdf/handler", produces = MediaType.APPLICATION_JSON_VALUE)
public void pdfHandlerWithOffice(HttpServletRequest request, HttpServletResponse httpResponse) {
String downloadFileName = "" + System.currentTimeMillis();
try (XMLSlideShow ppt = genPPT(request)) {

downloadFileName = ((MultipartHttpServletRequest) request).getParameter(REQ_DOWNLOAD_FILE_NAME);
downloadFileName =
SafeString.filterFileName(StringUtil.isNotBlank(downloadFileName) ? downloadFileName : "" + System.currentTimeMillis());


pdf2Helper.ppt2PdfWithJacob(ppt, httpResponse.getOutputStream(), pptConf.getTemplateFolder());

// httpResponse.addHeader(HttpHeaders.CONTENT_LENGTH, "" + outputStream2.size());
httpResponse.setContentType("application/force-download");// 设置强制下载不打开
httpResponse.addHeader(HttpHeaders.CONTENT_DISPOSITION,
"attachment;filename=" + new String((downloadFileName + ".pdf").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
} catch (Exception e) {
log.error("生成PPT[" + downloadFileName + "]时出错 " + e.getMessage(), e);
}
}

@PostMapping("/autoReport/export")
public void autoReport(HttpServletRequest request, HttpServletResponse httpResponse) {

var data = request.getParameter(REQ_DATA);
log.info("自动报告导出request===>{}", data);
ReportExportRequest reportExportRequest = JSONObject.parseObject(data, ReportExportRequest.class);
if (null == reportExportRequest) {
return;
}
StopWatch stopWatch = new StopWatch();
stopWatch.start("export ppt");
String reportNum = reportExportRequest.getReportNum();
RiflemanConfig riflemanConfig = reportExportRequest.getRiflemanConfig();
String fileType = reportExportRequest.getFileType();
String fileName = reportExportRequest.getFileName();
GlobalContext globalContext = reportExportRequest.getGlobalContext();

ExportPPTMessage exportPPTMessage = new ExportPPTMessage();
exportPPTMessage.setReportNum(reportNum);

try {
Map<String, Object> context = ObjectUtils.convert2map(globalContext, true);
fileName = SafeString.filterFileName(StringUtils.isNotEmpty(fileName) ? fileName : System.currentTimeMillis() + "");
PPTReport pptReport = viewOptionConvertReportService.convert(context, reportNum, riflemanConfig);
XMLSlideShow ppt = AutoReportGenerator.generatorPPT(pptReport, pptConf.getTemplateFolder(), pptConf.getTempFileFolder());

FileOutputStream fileO = new FileOutputStream(pptConf.getTempFileFolder() + "自动报告.pptx");
ppt.write(fileO);
fileO.close();
httpResponse.setContentType("application/force-download");// 设置强制下载不打开
if ("pptx".equals(fileType)) {//ppt
// ByteArrayOutputStream outputStream = null;
// try {
// outputStream = new ByteArrayOutputStream();
// ppt.write(outputStream);
// outputStream.flush();
// } finally {
// outputStream.close();
// ppt.close();
// }
// outputStream.writeTo(httpResponse.getOutputStream());

fileName += ".pptx";
ppt.write(httpResponse.getOutputStream());
httpResponse.getOutputStream().flush();
} else if ("pdf".equals(fileType)) {//pdf
fileName += ".pdf";
pdf2Helper.ppt2PdfWithJacob(ppt, httpResponse.getOutputStream(), pptConf.getTemplateFolder());
}
exportPPTMessage.setStatus("T");
httpResponse.addHeader(HttpHeaders.CONTENT_DISPOSITION,
"attachment;filename=" + new String((fileName).getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));

stopWatch.stop();
long time = stopWatch.getTotalTimeMillis();
log.info("export ppt success! use {} ms.", time);
} catch (Exception e) {
log.error("生成[" + fileName + "]时出错" + e.getMessage(), e);
exportPPTMessage.setStatus("F");
}

log.info("ppt生成完成,发送mq消息;reportNum={}", reportNum);
messageSender.send(exportPPTMessage);
}

private XMLSlideShow genPPT(HttpServletRequest request) throws IOException {
val multiReq = (MultipartHttpServletRequest) request;
val files = multiReq.getFiles(REQ_FILES);
val data = multiReq.getParameter(REQ_DATA);
var templateId = multiReq.getParameter(REQ_TEMPLATE_ID);

log.info(data);
MultipartFile file = null;
Map<String, byte[]> fileMap = Maps.newHashMap();
for (var i = 0; i < files.size(); ++i) {
file = files.get(i);
if (!file.isEmpty()) {
fileMap.put(file.getOriginalFilename(), file.getBytes());
} else {
// does nothing
}
}

List<SlideData> slideDataList = JSON.parseArray(data, SlideData.class);

slideDataList.forEach(slide -> {
if (CollectionUtils.isNotEmpty(slide.getImageDataList())) {
slide.getImageDataList().forEach(img -> {
if (fileMap.containsKey(img.getPicId())) {
img.setPicBytes(fileMap.get(img.getPicId()));
}
});
}
});

return PowerPointGenerator.generatorPowerPoint(pptConf.getTemplateFolder() + SafeString.filterFileName(templateId) + ".pptx", slideDataList);
}

f
@Controller
@Slf4j
public class ExportWordController {
@Autowired
private PPTConf pptConf;

@Autowired
private ReportGenerateService reportGenerateService;

@PostMapping(value = "/word/export", produces = MediaType.APPLICATION_JSON_VALUE)

public void exportWord(HttpServletRequest request, HttpServletResponse httpResponse) {
var data = request.getParameter("data");
List<WordExportRequest> wordExportRequests = JSON.parseArray(data, WordExportRequest.class);
try {
reportGenerateService.htmlToWord(httpResponse.getOutputStream(), wordExportRequests);
httpResponse.setContentType("application/force-download");// 设置强制下载不打开
httpResponse.addHeader(HttpHeaders.CONTENT_DISPOSITION,
"attachment;filename=" + new String((System.currentTimeMillis() + ".doc").getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
} catch (IOException e) {
log.error("htmlToWord失败,e==>{}", e.getMessage(), e);
}
}
}


@Slf4j
@RestController
public class RiflemanController {
@Autowired
private PPTConf pptConf;

@Autowired
private ScreenService screenService;

@PostMapping("/rifleman/shotChart")
public List<ScreenResultDTO> shotChart(HttpServletRequest request, HttpServletResponse httpResponse) {
List<ScreenResultDTO> screenResultDTOS = Lists.newArrayList();
try {
String data = request.getParameter("data");
RiflemanConfig riflemanConfig = JSON.parseObject(data, RiflemanConfig.class);
List<ScreenConfig> screenConfigs = riflemanConfig.getScreenConfigs();
// ScreenUtils.screen(riflemanConfig.getJsName(), riflemanConfig.getUrl(), riflemanConfig.getPageViewSize()
// , screenConfigs, riflemanConfig.getParam());
ScreenUtils.chromeDriverScreen(riflemanConfig, pptConf.getTempFileFolder(), pptConf.getChromeDriverPath());

List<String> tempFiles = Lists.newArrayList();
for (int i = 0; i < screenConfigs.size(); i++) {
ScreenResultDTO screenResultDto = new ScreenResultDTO();
String picName = screenConfigs.get(i).getPicName();
tempFiles.add(picName);
byte[] picBytes = ScreenUtils.getScreenPicBytes(picName, pptConf.getTempFileFolder());
screenResultDto.setFileName(picName);
screenResultDto.setFileBytes(picBytes);
screenResultDTOS.add(screenResultDto);
}

FileUtils.removeTempFile(pptConf.getTempFileFolder(), tempFiles);
} catch (Exception e) {
log.error("截屏时出错 " + e.getMessage(), e);
}
return screenResultDTOS;
}

@PostMapping("/rifleman/scrollScreenShot")
public List<ScreenResultDTO> scrollScreenShot(HttpServletRequest request, HttpServletResponse httpResponse) {
List<ScreenResultDTO> screenResultDTOS = Lists.newArrayList();
try {
String data = request.getParameter("data");
RiflemanConfig riflemanConfig = JSON.parseObject(data, RiflemanConfig.class);
List<ScreenConfig> screenConfigs = riflemanConfig.getScreenConfigs();
screenService.scrollScreenShot(riflemanConfig);

List<String> tempFiles = Lists.newArrayList();
for (int i = 0; i < screenConfigs.size(); i++) {
ScreenResultDTO screenResultDto = new ScreenResultDTO();
String picName = screenConfigs.get(i).getPicName();
tempFiles.add(picName);
byte[] picBytes = ScreenUtils.getScreenPicBytes(picName, pptConf.getTempFileFolder());
screenResultDto.setFileBytes(picBytes);
screenResultDto.setFileName(picName);
screenResultDTOS.add(screenResultDto);
}

FileUtils.removeTempFile(pptConf.getTempFileFolder(), tempFiles);
} catch (Exception e) {
log.error("截屏时出错 " + e.getMessage(), e);
}
return screenResultDTOS;
}
}




}
posted @ 2020-03-30 18:33  controlV  阅读(293)  评论(0编辑  收藏  举报