提交 31a0671c authored 作者: 133's avatar 133

[清退] 代码提交

上级 a9ed218d
...@@ -36,6 +36,35 @@ ...@@ -36,6 +36,35 @@
<artifactId>config</artifactId> <artifactId>config</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.21</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.19</version>
</dependency>
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-itext5</artifactId>
<version>9.1.6</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.5.8</version>
</dependency>
</dependencies> </dependencies>
......
...@@ -6,8 +6,10 @@ import com.itextpdf.text.Image; ...@@ -6,8 +6,10 @@ import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize; import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter; import com.itextpdf.text.pdf.PdfWriter;
import com.tykj.dev.config.swagger.AutoDocument; import com.tykj.dev.config.swagger.AutoDocument;
import com.tykj.dev.device.file.entity.Documents;
import com.tykj.dev.device.file.entity.FileRet; import com.tykj.dev.device.file.entity.FileRet;
import com.tykj.dev.device.file.service.UseReportFIleService; import com.tykj.dev.device.file.service.UseReportFIleService;
import com.tykj.dev.device.file.util.JavaToPdfHtmlFreeMarker;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -50,6 +52,19 @@ public class FileController { ...@@ -50,6 +52,19 @@ public class FileController {
@Autowired @Autowired
UseReportFIleService useReportFIleService; UseReportFIleService useReportFIleService;
/**
* 生成单据
* @return
*/
@ApiOperation(value = "生成单据")
@PostMapping("/printDocuments")
public ResponseEntity printDocuments(@RequestBody Documents documents) throws IOException, DocumentException {
String[] content = JavaToPdfHtmlFreeMarker.freeMarkerRender(documents);
return ResponseEntity.ok(JavaToPdfHtmlFreeMarker.createPdf(content,url,preview));
}
/** /**
* 文件上传 * 文件上传
*/ */
...@@ -270,4 +285,6 @@ public class FileController { ...@@ -270,4 +285,6 @@ public class FileController {
return new FileRet(originalFilename, url + newName, preview + newName); return new FileRet(originalFilename, url + newName, preview + newName);
} }
} }
package com.tykj.dev.device.file.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author zjm
* @version 1.0.0
* @ClassName DocumentDevice.java
* @Description 单据涉及装备实体
* @createTime 2021年01月25日 10:19:00
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@ApiModel(value = "单据涉及装备实体", description = "单据涉及装备实体")
public class DocumentDevice {
@ApiModelProperty(name = "型号")
private String model;
@ApiModelProperty(name = "部件")
private String parts;
@ApiModelProperty(name = "类型")
private String category;
@ApiModelProperty(name = "密级")
private String securityClassification;
@ApiModelProperty(name = "应用领域")
private String applicationField;
@ApiModelProperty(name = "数量")
private Integer count;
@ApiModelProperty(name = "装备序列号")
private String deviceSerialNumber;
@ApiModelProperty(name = "生产序列号")
private String productionSerialNumber;
@ApiModelProperty(name = "备注")
private String remark;
}
package com.tykj.dev.device.file.entity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author zjm
* @version 1.0.0
* @ClassName Documents.java
* @Description 出库入库单据样式
* @createTime 2021年01月25日 10:16:00
*/
@AllArgsConstructor
@NoArgsConstructor
@Data
@ApiModel(value = "出库入库单据样式", description = "出库入库单据属性实体")
public class Documents {
@ApiModelProperty(name = "单据号")
private String number;
@ApiModelProperty(name = "单据标题")
private String title;
@ApiModelProperty(name = "接收单位")
private String receiveUnit;
@ApiModelProperty(name = "批复文号")
private String replyNum;
@ApiModelProperty(name = "相关装备")
private List<DocumentDevice> documentDevices;
@ApiModelProperty(name = "发件单位")
private String senderUnit;
}
package com.tykj.dev.device.file.util;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfCopy;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.tykj.dev.device.file.entity.DocumentDevice;
import com.tykj.dev.device.file.entity.Documents;
import com.tykj.dev.device.file.entity.FileRet;
import freemarker.template.Configuration;
import freemarker.template.Template;
import org.springframework.beans.factory.annotation.Value;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;
import java.io.*;
import java.util.*;
/**
* @author zjm
* @version 1.0.0
* @ClassName html.java
* @Description TODO
* @createTime 2021年01月23日 15:04:00
*/
public class JavaToPdfHtmlFreeMarker {
@Value("${file.path}")
public String url;
@Value("${preview.path}")
public String preview;
private static final Map<Integer,String> MAP= new HashMap<Integer, String>() {
{
put(1,"第一联发机单位");
put(2,"第二联发机单位");
put(3,"第三联发机单位");
}
};
private static final String DEST = "/Users/zjm/code/Template/HelloWorld_CN_HTML_FREEMARKER.pdf";
private static final String HTML = "bill.html";//template_freemarker
private static final String FONT = "/Users/zjm/code/Template/simhei.ttf";
private static Configuration freemarkerCfg = null;
static {
freemarkerCfg =new Configuration();
//freemarker的模板目录
try {
freemarkerCfg.setDirectoryForTemplateLoading(new File("/Users/zjm/Downloads/equip/dev-file/src/main/resources/"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException, DocumentException {
// List<user> userList=new ArrayList<>();
// userList.add(new user("占金名",19,1));
// userList.add(new user("占金名1",19,1));
// userList.add(new user("占金名2",19,1));
Documents documents=new Documents();
documents.setNumber("NO:第221321134号");
documents.setReceiveUnit("杭州机要");
documents.setReplyNum("123123123131");
documents.setSenderUnit("浙江省");
documents.setTitle("密码装备清退单");
List<DocumentDevice> documentDevices=new ArrayList<>();
for (int i=0;i<20;i++){
DocumentDevice documentDevice=new DocumentDevice();
documentDevice.setCount(i);
documentDevice.setModel("MM001");
documentDevice.setRemark("备注");
documentDevice.setApplicationField("省一级");
documentDevice.setDeviceSerialNumber("asdq1231232");
documentDevice.setProductionSerialNumber("12312312312");
documentDevice.setParts("密码机");
documentDevice.setCategory("装备");
documentDevice.setSecurityClassification("机密");
documentDevices.add(documentDevice);
}
documents.setDocumentDevices(documentDevices);
String[] content = JavaToPdfHtmlFreeMarker.freeMarkerRender(documents);
JavaToPdfHtmlFreeMarker.createPdf(content,"/Users/zjm/code/test-tu/","12313");
}
public static FileRet createPdf(String[] htmlFiles,String path,String preview) throws IOException, DocumentException {
Long startTime = System.currentTimeMillis();
Document document = new Document();
String name=UUID.randomUUID().toString()+".pdf";
PdfCopy pdfCopy = null; //创建一个新文件
try {
pdfCopy = new PdfCopy(document, new FileOutputStream(path+name));
document.open();
for (String htmlFile : htmlFiles) {
if (htmlFile != null) {
String url = new File(htmlFile).toURI().toURL().toString();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
// 解决中文不显示问题
ITextFontResolver fontResolver = renderer.getFontResolver();
fontResolver.addFont(FONT, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
renderer.layout();
renderer.createPDF(os);
PdfReader pdfReader = new PdfReader(os.toByteArray());
for (int i = 1; i <= pdfReader.getNumberOfPages(); i++) {
PdfImportedPage importedPage = pdfCopy.getImportedPage(pdfReader, i);
pdfCopy.addPage(importedPage);
}
os.close();
}
}
Long endTime = System.currentTimeMillis();
System.out.print("Itext parse Html to Pdf End -> " + (endTime - startTime));
return new FileRet("", path + "print/" + name, preview + "print/" + name);
} catch (IOException | DocumentException e) {
e.printStackTrace();
} finally {
document.close();
}
return new FileRet();
}
/**
* freemarker渲染html
*/
public static String[] freeMarkerRender(Documents documents) {
Writer out = new StringWriter();
String [] strings=new String[100000];
Integer index=0;
try {
// 获取模板,并设置编码方式
Template template = freemarkerCfg.getTemplate("bill.html");
template.setEncoding("UTF-8");
List<DocumentDevice> list=documents.getDocumentDevices();
for (int i=1; i<=3; i++){
boolean falg=true;
Integer page=0;
int pageNum = page + 1;
int pageSize = 7;
Integer totalNum = list.size();
//默认从零分页,这里要考虑这种情况,下面要计算。
Integer totalPage = 0;
while (falg){
if (totalNum > 0) {
totalPage = totalNum % pageSize == 0 ? totalNum / pageSize : totalNum / pageSize + 1;
}
if (pageNum >= totalPage) {
pageNum = totalPage;
falg=false;
}
int startPoint = (pageNum - 1) * pageSize;
int endPoint = startPoint + pageSize;
if (totalNum <= endPoint) {
endPoint = totalNum;
}
String htmlname="/Users/zjm/code/Template/"+ UUID.randomUUID().toString()+".html";
// 合并数据模型与模板
FileWriter fileWriter = new FileWriter(new File(htmlname));
template.process(toMap(documents,list.subList(startPoint, endPoint),MAP.get(i)),fileWriter);
out.flush();
strings[index]=htmlname;
index++;
pageNum++;
}
}
return strings;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return null;
}
private static Map<String,Object> toMap(Documents documents,List<DocumentDevice> list,String test){
Map<String,Object> data = new HashMap();
data.put("ul",test);
data.put("number",documents.getNumber());
data.put("title",documents.getTitle());
data.put("receiveUnit",documents.getReceiveUnit());
data.put("replyNum",documents.getReplyNum());
data.put("senderUnit",documents.getSenderUnit());
data.put("documentDevices",list);
return data;
}
}
# 应用名称
spring.application.name=demo
# 应用服务 WEB 访问端口
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/worksite_new?useSSL=false&serverTimezone=UTC&autoReconnect=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
差异被折叠。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<title>Title</title>
<style>
body{
font-family:SimHei;
}
.blue{
color: blue;
}
</style>
</head>
<body>
<div class="blue">
你好,${name}
</div>
<div>
<#list userList as user>
用户名:${user.name}
密 码:${user.code}
年 龄: ${user.age}
</#list>
</div>
</body>
</html>
\ No newline at end of file
差异被折叠。
No preview for this file type
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论