提交 a41f7181 authored 作者: 133's avatar 133

[模版] 修改生成pdf类

上级 cd59e8db
......@@ -144,7 +144,7 @@ public class JavaToPdfHtmlFreeMarker {
/**
* freemarker渲染html
*/
public static String[] freeMarkerRender(Documents documents,String htmlPath) {
public static String[] freeMarkerRender1(Documents documents,String htmlPath) {
Writer out = new StringWriter();
String [] strings=new String[100000];
int index=0;
......@@ -182,6 +182,173 @@ public class JavaToPdfHtmlFreeMarker {
return null;
}
public static String[] freeMarkerRender(Documents documents,String htmlPath) {
Writer out = new StringWriter();
String [] strings=new String[100000];
int index=0;
try {
// 获取模板,并设置编码方式
Template template = freemarkerCfg.getTemplate("bill.html");
template.setEncoding("UTF-8");
List<DocumentDevice> list=documents.getDocumentDevices();
List<List<DocumentDevice>> listList=toDocList(list);
int count=listList.size();
for (int i=1; i<=3; i++){
Integer page=1;
for (List<DocumentDevice> list1:listList) {
String htmlname=htmlPath+ UUID.randomUUID().toString()+".html";
// 合并数据模型与模板
FileWriter fileWriter = new FileWriter(new File(htmlname));
template.process(toMap(documents,list1,MAP.get(i),page,count),fileWriter);
out.flush();
strings[index]=htmlname;
index++;
page++;
}
}
return strings;
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
return null;
}
public static List<List<DocumentDevice>> toDocList(List<DocumentDevice> deviceList) throws UnsupportedEncodingException {
List<List<DocumentDevice>> lists=new ArrayList<>();
List<DocumentDevice> documentDevices=new ArrayList<>();
int i=0;
for (int j=0;j< deviceList.size();j++){
DocumentDevice documentDevice=deviceList.get(j);
int max= toMax2(documentDevice);
if (i+max==14){
String s=String.join("",toListString(documentDevice.getDeviceSerialNumber(),56));
documentDevice.setOneCount(max);
documentDevice.setDeviceSerialNumber(s);
documentDevices.add(documentDevice);
lists.add(documentDevices);
documentDevices=new ArrayList<>();
i=0;
}else if (i+max>14){
//当前页面少了多少行
int differ=14-i;
List<String> modelList= toListString(documentDevice.getModel(),13);
List<String> seqList=toListString(documentDevice.getDeviceSerialNumber(),56);
List<String> pasList=toListString(documentDevice.getParts(),13);
DocumentDevice documentDevice1=new DocumentDevice();
if (modelList.size()>differ){
documentDevice.setModel(String.join("",modelList.subList(0,differ)));
documentDevice1.setModel(String.join("",modelList.subList(differ,modelList.size())));
}
if (seqList.size()>differ){
documentDevice.setDeviceSerialNumber(String.join("",seqList.subList(0,differ)));
documentDevice1.setDeviceSerialNumber(String.join("",seqList.subList(differ,seqList.size())));
}
if (pasList.size()>differ){
documentDevice.setParts(String.join("",pasList.subList(0,differ)));
documentDevice1.setParts(String.join("",pasList.subList(differ,pasList.size())));
}
documentDevice.setOneCount(differ);
documentDevices.add(documentDevice);
lists.add(documentDevices);
documentDevices=new ArrayList<>();
documentDevice1.setOneCount(max-differ);
documentDevices.add(documentDevice1);
i=max-differ;
}else {
String s=String.join("",toListString(documentDevice.getDeviceSerialNumber(),56));
documentDevice.setOneCount(max);
documentDevice.setDeviceSerialNumber(s);
documentDevices.add(documentDevice);
i=i+max;
}
}
if (documentDevices.size()!=0){
lists.add(documentDevices);
}
return lists;
}
private static int toMax2(DocumentDevice documentDevice){
int partsCount=String_length(documentDevice.getParts());
int deviceSerialNumberCount=String_length(documentDevice.getDeviceSerialNumber());
int modelCount=String_length(documentDevice.getModel());
int parts = (partsCount%13>0) ? partsCount/20 + 1 : partsCount/13;
int deviceSerialNumber=(deviceSerialNumberCount%56>0) ? deviceSerialNumberCount/56 + 1 : deviceSerialNumberCount/56;
int model=(modelCount%13>0) ? modelCount/13 + 1 : modelCount/13;
int max=parts;
//求最大
if(max<deviceSerialNumber){
max=deviceSerialNumber;
}
if(max<model) {
max = model;
}
return max;
}
private static List<String> toListString(String str,int len) throws UnsupportedEncodingException {
List<String> list =new ArrayList<>();
int stringLen=String_length(str);
if (stringLen>len){
boolean falg=true;
int i=0;
while (falg){
if ((i+1)*len>stringLen) {
list.add(subString(str,i*len+1,stringLen,"GBK"));
falg=false;
}else {
list.add(subString(str,i*len+1,(i+1)*len,"GBK")+"<br/>");
i++;
}
}
return list;
}else {
list.add(str);
return list;
}
}
public static String subString(String text, int start, int end, String encode) throws UnsupportedEncodingException {
if( text == null || text == "")
return null;
StringBuffer sb = new StringBuffer();
int currentLength = 0;
for( char c : text.toCharArray() )
{
currentLength += String.valueOf(c).getBytes(encode).length;
if( currentLength >= start && currentLength <= end )
{
sb.append(c);
}else {
continue;
}
}
return sb.toString();
}
public static List<String> freeMarkerRenderList(Documents documents,String htmlPath) {
Writer out = new StringWriter();
List<String> listCont=new ArrayList<>();
......@@ -191,7 +358,7 @@ public class JavaToPdfHtmlFreeMarker {
template.setEncoding("UTF-8");
List<DocumentDevice> list=documents.getDocumentDevices();
List<List<DocumentDevice>> listList=toList(list);
List<List<DocumentDevice>> listList=toDocList(list);
int count=listList.size();
for (int i=1; i<=3; i++){
Integer page=1;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论