freemarker模板怎么同时打印多份(freeMarker动态生成表格已有固定表头)
在已经有表头的情况下,动态生成表格数据:,下面我们就来聊聊关于freemarker模板怎么同时打印多份?接下来我们就一起去了解一下吧!
freemarker模板怎么同时打印多份
在已经有表头的情况下,动态生成表格数据:
ftl标签代码:
<#list partnerList>
<#items as partnerInfo>
<w:tr>
<w:tblPrEx>
<w:tblBorders>
<w:top w:val="single" w:color="auto" w:sz="4" w:space="0"/>
<w:left w:val="single" w:color="auto" w:sz="4" w:space="0"/>
<w:bottom w:val="single" w:color="auto" w:sz="4" w:space="0"/>
<w:right w:val="single" w:color="auto" w:sz="4" w:space="0"/>
<w:insideH w:val="single" w:color="auto" w:sz="4" w:space="0"/>
<w:insideV w:val="single" w:color="auto" w:sz="4" w:space="0"/>
</w:tblBorders>
<w:tblCellMar>
<w:top w:w="0" w:type="dxa"/>
<w:left w:w="108" w:type="dxa"/>
<w:bottom w:w="0" w:type="dxa"/>
<w:right w:w="108" w:type="dxa"/>
</w:tblCellMar>
</w:tblPrEx>
<w:tc>
<w:tcPr>
<w:tcW w:w="1125" w:type="pct"/>
<w:noWrap w:val="0"/>
<w:vAlign w:val="top"/>
</w:tcPr>
<w:p>
<w:pPr>
<w:pStyle w:val="19"/>
<w:pageBreakBefore w:val="0"/>
<w:tabs>
<w:tab w:val="left" w:pos="702"/>
<w:tab w:val="left" w:pos="8681"/>
</w:tabs>
<w:kinsoku/>
<w:wordWrap/>
<w:overflowPunct/>
<w:toplinePunct w:val="0"/>
<w:bidi w:val="0"/>
<w:snapToGrid/>
<w:spacing w:after="0" w:afterAutospacing="0" w:line="360" w:lineRule="auto"/>
<w:jc w:val="center"/>
<w:textAlignment w:val="auto"/>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体" w:cs="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:highlight w:val="none"/>
<w:vertAlign w:val="baseline"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="en-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体" w:cs="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:highlight w:val="none"/>
<w:vertAlign w:val="baseline"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="en-US"/>
</w:rPr>
<w:t xml:space="preserve">${partnerInfo.partnerName}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="938" w:type="pct"/>
<w:noWrap w:val="0"/>
<w:vAlign w:val="top"/>
</w:tcPr>
<w:p>
<w:pPr>
<w:pStyle w:val="19"/>
<w:pageBreakBefore w:val="0"/>
<w:tabs>
<w:tab w:val="left" w:pos="702"/>
<w:tab w:val="left" w:pos="8681"/>
</w:tabs>
<w:kinsoku/>
<w:wordWrap/>
<w:overflowPunct/>
<w:topLinePunct w:val="0"/>
<w:bidi w:val="0"/>
<w:snapToGrid/>
<w:spacing w:after="0" w:afterAutospacing="0" w:line="360" w:lineRule="auto"/>
<w:jc w:val="center"/>
<w:textAlignment w:val="auto"/>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体" w:cs="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:highlight w:val="none"/>
<w:vertAlign w:val="baseline"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="en-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体" w:cs="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:highlight w:val="none"/>
<w:vertAlign w:val="baseline"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="en-US"/>
</w:rPr>
<w:t xml:space="preserve">${partnerInfo.partnerPosition}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1781" w:type="pct"/>
<w:noWrap w:val="0"/>
<w:vAlign w:val="top"/>
</w:tcPr>
<w:p>
<w:pPr>
<w:pStyle w:val="19"/>
<w:pageBreakBefore w:val="0"/>
<w:tabs>
<w:tab w:val="left" w:pos="702"/>
<w:tab w:val="left" w:pos="8681"/>
</w:tabs>
<w:kinsoku/>
<w:wordWrap/>
<w:overflowPunct/>
<w:topLinePunct w:val="0"/>
<w:bidi w:val="0"/>
<w:snapToGrid/>
<w:spacing w:after="0" w:afterAutospacing="0" w:line="360" w:lineRule="auto"/>
<w:jc w:val="center"/>
<w:textAlignment w:val="auto"/>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体" w:cs="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:highlight w:val="none"/>
<w:vertAlign w:val="baseline"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="en-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体" w:cs="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:highlight w:val="none"/>
<w:vertAlign w:val="baseline"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="en-US"/>
</w:rPr>
<w:t xml:space="preserve">${partnerInfo.partnerIdCard}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1154" w:type="pct"/>
<w:noWrap w:val="0"/>
<w:vAlign w:val="top"/>
</w:tcPr>
<w:p>
<w:pPr>
<w:pStyle w:val="19"/>
<w:pageBreakBefore w:val="0"/>
<w:tabs>
<w:tab w:val="left" w:pos="702"/>
<w:tab w:val="left" w:pos="8681"/>
</w:tabs>
<w:kinsoku/>
<w:wordWrap/>
<w:overflowPunct/>
<w:topLinePunct w:val="0"/>
<w:bidi w:val="0"/>
<w:snapToGrid/>
<w:spacing w:after="0" w:afterAutospacing="0" w:line="360" w:lineRule="auto"/>
<w:jc w:val="center"/>
<w:textAlignment w:val="auto"/>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体" w:cs="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:highlight w:val="none"/>
<w:vertAlign w:val="baseline"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="en-US"/>
</w:rPr>
</w:pPr>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia" w:ascii="宋体" w:hAnsi="宋体" w:eastAsia="宋体" w:cs="宋体"/>
<w:color w:val="auto"/>
<w:sz w:val="24"/>
<w:szCs w:val="24"/>
<w:highlight w:val="none"/>
<w:vertAlign w:val="baseline"/>
<w:lang w:val="en-US" w:eastAsia="zh-CN" w:bidi="en-US"/>
</w:rPr>
<w:t xml:space="preserve">${partnerInfo.partnerRemark}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</#items>
</#list>
java代码:
public class WordExportUtil {
private static Logger LOGGER = LoggerFactory.getLogger(WordExportUtil.class);
private static WordExportUtil service = null;
private WordExportUtil() {
super();
}
static WordExportUtil getInstance() {
if (service == null) {
synchronized (WordExportUtil.class) {
if (service == null) {
service = new WordExportUtil();
}
}
}
return service;
}
/**
* @param templateFilePath eg: /template/test/test.ftl
* @param dataMap
* @param exportFilePath eg: /tmp/test/test123.doc
* @param loadType 设置路径加载方式。1-绝对路径,2-项目相对路径
* @return
* @throws Exception
*/
File createDocFile(String templateFilePath, Map<String, Object> dataMap, String exportFilePath, int loadType) throws Exception {
Template t = null;
configuration configuration = new Configuration(Configuration.VERSION_2_3_22);
configuration.setDefaultEncoding("UTF-8");
try {
templateFilePath = pathReplace(templateFilePath);
String ftlPath = templateFilePath.substring(0, templateFilePath.lastIndexOf("/"));
if (loadType == 1) {
configuration.setDirectoryForTemplateLoading(new File(ftlPath)); // FTL文件所存在的位置
} else {
configuration.setClassForTemplateLoading(this.getClass(), ftlPath);//以类加载的方式查找模版文件路径
}
String ftlFile = templateFilePath.substring(templateFilePath.lastIndexOf("/") 1);
t = configuration.getTemplate(ftlFile); // 模板文件名
File outFile = new File(exportFilePath);
Writer out = null;
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile)));
t.process(dataMap, out);
} catch (Exception e) {
LOGGER.error("导出word文档出错", e);
throw e;
}
return null;
}
/**
* 把路径的\替换成/
*
* @param path
* @return
*/
private String pathReplace(String path) {
while (path != null && path.contains("\\")) {
path = path.replace("\\", "/");
}
return path;
}
public static void main(String[] args) {
Map<String, Object> dataMap = new HashMap<String, Object>();
getData(dataMap);
String templateFile = "C:\\Users\\admin\\Desktop\\文档\\方案--完整版2.ftl";
String exportFile = "C:\\Users\\admin\\Desktop\\生成文档名称" ".doc";
try {
WordExportUtil.getInstance().createDocFile(templateFile, dataMap, exportFile, 1);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void getData(Map<String, Object> dataMap) {
List<PartnerInfo> partnerList = new ArrayList<>();
PartnerInfo partnerInfo1 = new PartnerInfo("1", "2", "2", "3");
PartnerInfo partnerInfo2 = new PartnerInfo("1","2","2","3");
PartnerInfo partnerInfo3 = new PartnerInfo("1","2","2","3");
partnerList.add(partnerInfo1);
partnerList.add(partnerInfo2);
partnerList.add(partnerInfo3);
dataMap.put("partnerList", partnerList);
}
}
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com