这里demo用的maven来管理项目,pom.xml如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.zy</groupId><artifactId>ftl2pdf</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><properties><servlet>3.1.0</servlet><freemarker>2.3.22</freemarker><flying-saucer>9.1.12</flying-saucer></properties><dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet}</version><scope>provided</scope></dependency><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>${freemarker}</version></dependency><dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf</artifactId><version>${flying-saucer}</version></dependency><!-- log4j必需 --><dependency><groupId>log</groupId><artifactId>log4j12</artifactId><version>1.6.6</version></dependency><dependency><groupId>log</groupId><artifactId>log4j</artifactId><version>1.2.16</version></dependency><dependency><groupId>log</groupId><artifactId>log4j-api</artifactId><version>1.6.6</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.46</version></dependency></dependencies>
</project>

然后

package com.zy.common;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.Locale;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xhtmlrenderer.pdf.ITextRenderer;import com.lowagie.text.DocumentException;
import com.lowagie.text.pdf.BaseFont;import freemarker.core.ParseException;
import freemarker.template.Configuration;
import freemarker.template.MalformedTemplateNameException;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateNotFoundException;/*** <p>Title: PdfUtils.java</p>* <p>Description: PDF生成工具类</p>* <p>Company:  </p>* @author ZY* <p> Just go on !!!</p>* @date 2018年3月1日 下午8:44:18 * @version v1.0*/
@SuppressWarnings("all")
public class PDFUtil {private static final Logger logger = LoggerFactory.getLogger(PDFUtil.class);  /*** <p>Description: 生成PDF到文件</p>* <p>Company: </p>* @author ZY* @param ftlPath  模板文件路径(不含文件名)* @param ftlName  模板文件(不含路径)* @param imageDiskPath 图片的磁盘路径* @param data 数据 (填到模板上的数据)* @param outputFile 目标文件(全路径名称)* @throws Exception*/public static void generateToFile(String ftlPath, String ftlName, String imageDiskPath, Object data,String outputFile) throws Exception {OutputStream out = null;ITextRenderer render = null;try {String html = getPdfContent(ftlPath, ftlName, data);   //组装模板和数据生成html串out = new FileOutputStream(outputFile);render = getRender();render.setDocumentFromString(html);     //此处抛异常if (imageDiskPath != null && !imageDiskPath.equals("")) {// html中如果有图片,图片的路径则使用这里设置的路径的相对路径,这个是作为根路径render.getSharedContext().setBaseURL("file:/" + imageDiskPath);}render.layout();render.createPDF(out);render.finishPDF();render = null;} catch (Exception e) {logger.error("Exception:",e);throw e;}finally{if (out != null) {try {out.close();} catch (IOException e) {logger.error("Exception:",e);throw e;}}}}/*** 生成PDF到输出流中(ServletOutputStream用于下载PDF)* * @param ftlPath*            ftl模板文件的路径(不含文件名)* @param ftlName*            ftl模板文件的名称(不含路径)* @param imageDiskPath*            如果PDF中要求图片,那么需要传入图片所在位置的磁盘路径* @param data*            输入到FTL中的数据* @param response*            HttpServletResponse* @return* @throws TemplateNotFoundException* @throws MalformedTemplateNameException* @throws ParseException* @throws IOException* @throws TemplateException* @throws DocumentException*/public static OutputStream generateToServletOutputStream(String ftlPath, String ftlName, String imageDiskPath,Object data, HttpServletResponse response) throws Exception {String html = getPdfContent(ftlPath, ftlName, data);OutputStream out = null;ITextRenderer render = null;out = response.getOutputStream();render = getRender();render.setDocumentFromString(html);if (imageDiskPath != null && !imageDiskPath.equals("")) {// html中如果有图片,图片的路径则使用这里设置的路径的相对路径,这个是作为根路径render.getSharedContext().setBaseURL("file:/" + imageDiskPath);}render.layout();render.createPDF(out);render.finishPDF();render = null;return out;}public static ITextRenderer getRender() throws DocumentException, IOException {ITextRenderer render = new ITextRenderer();String path = getPath();// 添加字体,以支持中文render.getFontResolver().addFont(path + "fonts/ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);render.getFontResolver().addFont(path + "fonts/SIMSUN.TTC", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);return render;}// 获取要写入PDF的内容public static String getPdfContent(String ftlPath, String ftlName, Object o) throws Exception {return useTemplate(ftlPath, ftlName, o);}// 使用freemarker得到html内容public static String useTemplate(String ftlPath, String ftlName, Object o) throws Exception {String html = null;Template tpl = getFreemarkerConfig(ftlPath).getTemplate(ftlName);tpl.setEncoding("UTF-8");StringWriter writer = new StringWriter();tpl.process(o, writer);writer.flush();html = writer.toString();return html;}/*** 获取Freemarker配置* * @param templatePath* @return* @throws IOException*/private static Configuration getFreemarkerConfig(String templatePath) throws IOException {Configuration config = new Configuration();config.setDirectoryForTemplateLoading(new File(templatePath));config.setEncoding(Locale.CHINA, "utf-8");return config;}/*** 获取类项目根路径* * @return*/public static String getPath() {//return PDFUtil.class.getResource("").getPath().substring(1);  //返回类路径(当前类所在的路径)return PDFUtil.class.getResource("/").getPath().substring(1);    //返回项目根路径(编译之后的根路径)}
}

字体、图片、模板放在resource目录下:

下面贴一个示例模板:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta http-equiv="Content-Style-Type" content="text/css"/><title>文档标题</title><style type="text/css"> body{margin: 0 45px;font-family: Arial Unicode MS;font-size: 12px;color: #000;}.document_body h1 , .document_body h2 , .document_body h3 , .document_body h4 , .document_body h5 , .document_body h6 ,.document_body p{width:100%;height: 100%;color: #000;margin: 0;font-weight: normal;text-indent: 0;}.document_body .logo_position{width: 20%;position: absolute;top: 20px;left: 0;}.document_body .logo_position >img{width: 100%;}.document_body{width: 100%;    /*可以修改此处的宽度百分比来适应页面大小*/padding-top: 40px;margin: 0 auto;position: relative;}.document_body p{text-align: justify;text-justify: inter-word;            }.document_head{margin-bottom: 10px;}.document_head .heading{text-align: right;}.document_head .heading h1{font-size: 20px;line-height: 36px;text-align: right;font-weight: bold;}.document_head .heading h6{text-align: right;font-weight: bold;font-size: 12px;}table{width: 100%;text-align: left;margin-bottom: 10px;}table .table_title{background: #999;color: #fff;font-size: 14px;text-align: center;font-weight: bold;}table .strong_area{background: #FFEC00;}span.line_input{display: inline-block;border-bottom: 1px solid #000;padding: 0 6px;margin-left: 2px;}.document_body .document_main .blank{font-family: "Times New Roman"}.sign_area{margin-top: 10px;}.sign_area > div{float: left;}.sign_area > div >b{display: block;height: 30px;font-weight: normal;}strong{font-weight: bold;color: red;}.explain_text p{line-height: 1.5}.explain_text h5{font-weight: bold;}.clear{clear: both;}.mr10{margin-right: 10px;}.link a{font-weight: bold;color: #000;font-size: 13px;}.document_body .side_tips{position: absolute;top:400px;right: -18px;width: 10px;}</style></head><body><!--文档start--><div class="document_body"><div class="document_head"><div class="logo_position"><img src="logo_269_48.png" alt="logo"/></div><div class="heading"><h1>文档标题</h1><h6>提示:警惕洗钱风险,保护您的权益</h6></div>               </div><div class="document_main">               <table cellspacing="0" border="1" cellpadding="4"><tr><td colspan="3" class="table_title">账 户 信 息 1</td></tr><tr class="strong_area"><td align="center">存款人名称</td><td colspan="2">${data.remark1}</td></tr><tr><td align="center">办公地址</td><td colspan="2"><#if data.remark2 == "01"><input type="checkbox" checked="true"/><label class="mr10">同注册地址</label>或 <input type="checkbox"/><label>其它:</label><span class="line_input">  </span>省/区/直辖市<span class="line_input">  </span>市 <span class="line_input">  </span> 区/县 <span class="line_input">  </span><#else><input type="checkbox"/><label class="mr10">同注册地址</label>或 <input type="checkbox" checked="true"/><label>其它:</label><span class="line_input">${data.remark3}</span>省/区/直辖市<span class="line_input">${data.remark4}</span>市 <span class="line_input">${data.remark5}</span> 区/县 <span class="line_input">${data.remark6}</span></#if></td></tr><tr><td align="center">邮寄地址</td><td colspan="2"><#if data.remark7 == "01"><input type="checkbox" checked="true"/><label class="mr10">同注册地址</label>或 1.<input type="checkbox"/><label class="mr10">同办公地址</label>  2.<input type="checkbox"/><label>其它:</label><span class="line_input">  </span>省/区/直辖市<span class="line_input">  </span>市 <span class="line_input">  </span> 区/县 <span class="line_input">  </span><#elseif data.remark7 == "02"><input type="checkbox"/><label class="mr10">同注册地址</label>或 1.<input type="checkbox" checked="true"/><label class="mr10">同办公地址</label>  2.<input type="checkbox"/><label>其它:</label><span class="line_input">  </span>省/区/直辖市<span class="line_input">  </span>市 <span class="line_input">  </span> 区/县 <span class="line_input">  </span><#else><input type="checkbox"/><label class="mr10">同注册地址</label>或 1.<input type="checkbox"/><label class="mr10">同办公地址</label>  2.<input type="checkbox" checked="true"/><label>其它:</label><span class="line_input">${data.remark8}</span>省/区/直辖市<span class="line_input">${data.remark9}</span>市 <span class="line_input">${data.remark10}</span> 区/县 <span class="line_input">${data.remark11}</span></#if></td></tr><tr><td rowspan="3" align="center">联系信息</td><td><#if data.remark12 == "01"><input type="checkbox" checked="true"/><label class="mr10">法定代表人</label>或<br/><input type="checkbox"/><label>单位负责人</label><#else><input type="checkbox"/><label class="mr10">法定代表人</label>或<br/><input type="checkbox" checked="true"/><label>单位负责人</label></#if></td><td>办公电话:区号<span class="line_input">${data.remark13}</span>直线<span class="line_input">${data.remark14}</span>分机<span class="line_input">${data.remark15}</span><br/>移动电话:<span class="line_input">${data.remark16}</span></td></tr><tr><td class="strong_area" align="center">财务负责人</td><td>姓名:<span class="line_input mr10">${data.remark17}</span>办公电话:区 号<span class="line_input">${data.remark18}</span>直线<span class="line_input">${data.remark19}</span>分机<span class="line_input">${data.remark20}</span><br/>移动电话:<span class="line_input mr10">${data.remark21}</span>电子邮箱:<span class="line_input">${data.remark22}</span></td></tr><tr class="strong_area"><td align="center">财务经办人员</td><td>姓名:<span class="line_input mr10">${data.remark23}</span>办公电话:区 号<span class="line_input">${data.remark24}</span>直线<span class="line_input">${data.remark25}</span>分机<span class="line_input">${data.remark26}</span><br/>移动电话:<span class="line_input">${data.remark27}</span></td></tr><tr><td rowspan="2" align="center">账户种类</td><td align="center">人民币</td><td><#if data.remark28 == "01">1.<input type="checkbox" checked="true"/><label class="mr10">定期账户</label>2.<input type="checkbox"/><label class="mr10">基本户</label>3.<input type="checkbox"/><label>一般户且用于:</label><input type="checkbox"/><label class="mr10">结算</label><input type="checkbox"/><label class="mr10">贷款</label>或 <input type="checkbox"/><label>其它:</label>   <span class="line_input">    </span><br/>4.<input type="checkbox"/><label class="mr10">临时户</label>5.<input type="checkbox"/><label>专用户且账户资金性质为:</label><span class="line_input mr10"> </span>6.<input type="checkbox"/><label>NRA账户且国家代码为:</label><span class="line_input mr10"> </span><#elseif data.remark28 == "02">1.<input type="checkbox"/><label class="mr10">定期账户</label>2.<input type="checkbox" checked="true"/><label class="mr10">基本户</label>3.<input type="checkbox"/><label>一般户且用于:</label><input type="checkbox"/><label class="mr10">结算</label><input type="checkbox"/><label class="mr10">贷款</label>或 <input type="checkbox"/><label>其它:</label> <span class="line_input">    </span><br/>4.<input type="checkbox"/><label class="mr10">临时户</label>5.<input type="checkbox"/><label>专用户且账户资金性质为:</label><span class="line_input mr10"> </span>6.<input type="checkbox"/><label>NRA账户且国家代码为:</label><span class="line_input mr10"> </span><#elseif data.remark28 == "03">1.<input type="checkbox"/><label class="mr10">定期账户</label>2.<input type="checkbox"/><label class="mr10">基本户</label>3.<input type="checkbox" checked="true"/><label>一般户且用于:</label><#if data.remark29 == "01"><input type="checkbox" checked="true"/><label class="mr10">结算</label><input type="checkbox"/><label class="mr10">贷款</label>或 <input type="checkbox"/><label>其它:</label> <span class="line_input">    </span><br/><#elseif data.remark29 == "02"><input type="checkbox"/><label class="mr10">结算</label><input type="checkbox" checked="true"/><label class="mr10">贷款</label>或 <input type="checkbox"/><label>其它:</label>   <span class="line_input">    </span><br/><#else><input type="checkbox"/><label class="mr10">结算</label><input type="checkbox"/><label class="mr10">贷款</label>或 <input type="checkbox" checked="true"/><label>其它:</label>   <span class="line_input">${data.remark30}</span><br/></#if>4.<input type="checkbox"/><label class="mr10">临时户</label>5.<input type="checkbox"/><label>专用户且账户资金性质为:</label><span class="line_input mr10"> </span>6.<input type="checkbox"/><label>NRA账户且国家代码为:</label><span class="line_input mr10"> </span><#elseif data.remark28 == "04">1.<input type="checkbox"/><label class="mr10">定期账户</label>2.<input type="checkbox"/><label class="mr10">基本户</label>3.<input type="checkbox"/><label>一般户且用于:</label><input type="checkbox"/><label class="mr10">结算</label><input type="checkbox"/><label class="mr10">贷款</label>或 <input type="checkbox"/><label>其它:</label>    <span class="line_input">    </span><br/>4.<input type="checkbox" checked="true"/><label class="mr10">临时户</label>5.<input type="checkbox"/><label>专用户且账户资金性质为:</label><span class="line_input mr10"> </span>6.<input type="checkbox"/><label>NRA账户且国家代码为:</label><span class="line_input mr10"> </span><#elseif data.remark28 == "05">1.<input type="checkbox"/><label class="mr10">定期账户</label>2.<input type="checkbox"/><label class="mr10">基本户</label>3.<input type="checkbox"/><label>一般户且用于:</label><input type="checkbox"/><label class="mr10">结算</label><input type="checkbox"/><label class="mr10">贷款</label>或 <input type="checkbox"/><label>其它:</label> <span class="line_input">    </span><br/>4.<input type="checkbox"/><label class="mr10">临时户</label>5.<input type="checkbox"  checked="true"/><label>专用户且账户资金性质为:</label><span class="line_input mr10">${data.remark31}</span>6.<input type="checkbox"/><label>NRA账户且国家代码为:</label><span class="line_input mr10"> </span><#else>1.<input type="checkbox"/><label class="mr10">定期账户</label>2.<input type="checkbox"/><label class="mr10">基本户</label>3.<input type="checkbox"/><label>一般户且用于:</label><input type="checkbox"/><label class="mr10">结算</label><input type="checkbox"/><label class="mr10">贷款</label>或 <input type="checkbox"/><label>其它:</label> <span class="line_input">    </span><br/>4.<input type="checkbox"/><label class="mr10">临时户</label>5.<input type="checkbox"/><label>专用户且账户资金性质为:</label><span class="line_input mr10"> </span>6.<input type="checkbox" checked="true"/><label>NRA账户且国家代码为:</label><span class="line_input mr10">${data.remark32}</span></#if></td></tr><tr><td align="center">外  币</td><td>币种:<#if data.remark33 == "01">1.<input type="checkbox" checked="true"/><label class="mr10">美元</label>2.<input type="checkbox"/><label class="mr10">港币</label>3.<input type="checkbox"/><label class="mr10">欧元</label>4.<input type="checkbox"/><label class="mr10">日元</label>5.<input type="checkbox"/><label >其它:</label><span class="line_input">    </span><br/><#elseif data.remark33 == "02">1.<input type="checkbox"/><label class="mr10">美元</label>2.<input type="checkbox" checked="true"/><label class="mr10">港币</label>3.<input type="checkbox"/><label class="mr10">欧元</label>4.<input type="checkbox"/><label class="mr10">日元</label>5.<input type="checkbox"/><label >其它:</label><span class="line_input">    </span><br/><#elseif data.remark33 == "03">1.<input type="checkbox"/><label class="mr10">美元</label>2.<input type="checkbox"/><label class="mr10">港币</label>3.<input type="checkbox" checked="true"/><label class="mr10">欧元</label>4.<input type="checkbox"/><label class="mr10">日元</label>5.<input type="checkbox"/><label >其它:</label><span class="line_input">    </span><br/><#elseif data.remark33 == "04">1.<input type="checkbox"/><label class="mr10">美元</label>2.<input type="checkbox"/><label class="mr10">港币</label>3.<input type="checkbox"/><label class="mr10">欧元</label>4.<input type="checkbox" checked="true"/><label class="mr10">日元</label>5.<input type="checkbox"/><label >其它:</label><span class="line_input">    </span><br/><#else>1.<input type="checkbox"/><label class="mr10">美元</label>2.<input type="checkbox"/><label class="mr10">港币</label>3.<input type="checkbox"/><label class="mr10">欧元</label>4.<input type="checkbox"/><label class="mr10">日元</label>5.<input type="checkbox" checked="true"/><label >其它:</label><span class="line_input">${data.remark34}</span><br/></#if>种类:<#if data.remark35 == "01">1.<input type="checkbox" checked="true"/><label class="mr10">经常项目外汇账户</label>2.<input type="checkbox"/><label class="mr10">外汇资本金账户</label>3.<input type="checkbox"/><label class="mr10">外债账户</label>4.<input type="checkbox"/><label >其它:</label><span class="line_input">    </span><#elseif data.remark35 == "02">1.<input type="checkbox"/><label class="mr10">经常项目外汇账户</label>2.<input type="checkbox" checked="true"/><label class="mr10">外汇资本金账户</label>3.<input type="checkbox"/><label class="mr10">外债账户</label>4.<input type="checkbox"/><label >其它:</label><span class="line_input">    </span><#elseif data.remark35 == "03">1.<input type="checkbox"/><label class="mr10">经常项目外汇账户</label>2.<input type="checkbox"/><label class="mr10">外汇资本金账户</label>3.<input type="checkbox" checked="true"/><label class="mr10">外债账户</label>4.<input type="checkbox"/><label >其它:</label><span class="line_input">    </span><#else>1.<input type="checkbox"/><label class="mr10">经常项目外汇账户</label>2.<input type="checkbox"/><label class="mr10">外汇资本金账户</label>3.<input type="checkbox"/><label class="mr10">外债账户</label>4.<input type="checkbox" checked="true"/><label >其它:</label><span class="line_input">${data.remark36}</span></#if></td></tr></table><table cellspacing="0" border="1" cellpadding="4"><tr><td colspan="3" class="table_title">账 户 信 息 2</td></tr><tr><td align="center">控股股东或<br/>实际控制人</td><td colspan="2">名称:<span class="line_input mr10">${data.remark37}</span>证件种类:<#if data.remark38 == "01">1.<input type="checkbox" checked="true"/><label class="mr10">身份证</label>2.<input type="checkbox"/><label class="mr10">护照</label>3.<input type="checkbox"/><label>其它:</label>    <span class="line_input">    </span><br/><#elseif data.remark38 == "02">1.<input type="checkbox"/><label class="mr10">身份证</label>2.<input type="checkbox" checked="true"/><label class="mr10">护照</label>3.<input type="checkbox"/><label>其它:</label>  <span class="line_input">    </span><br/><#else>    1.<input type="checkbox"/><label class="mr10">身份证</label>2.<input type="checkbox"/><label class="mr10">护照</label>3.<input type="checkbox" checked="true"/><label>其它:</label>  <span class="line_input">${data.remark39}</span><br/></#if>证件号码:<span class="line_input mr10">${data.remark40}</span>证件到期日:<#if data.remark41 == "01">1.<input type="checkbox" checked="true"/><label class="mr10">长期有效</label>2.<input type="checkbox"/><label >到期日</label><span class="line_input">    </span>年<span class="line_input">    </span>月<span class="line_input">    </span>日</td><#else>1.<input type="checkbox"/><label class="mr10">长期有效</label>2.<input type="checkbox" checked="true"/><label >到期日</label><span class="line_input">${data.remark42}</span>年<span class="line_input">${data.remark43}</span>月<span class="line_input">${data.remark44}</span>日</td></#if></tr><tr class="strong_area"><td rowspan="2" align="center"><p style="color: red;text-align: center;">税收居民身份<br/>信息</p></td><td><p style="color: red">机构类别:<#if data.remark45 == "01">1.<input type="checkbox" checked="true"/><label class="mr10">消极非金融机构</label>2.<input type="checkbox"/>其他非金融机构</p></td><#else>1.<input type="checkbox"/><label class="mr10">消极非金融机构</label>2.<input type="checkbox" checked="true"/>其他非金融机构</p></td></#if><td><p style="color: red">税收居民身份:<#if data.remark46 == "01">1.<input type="checkbox" checked="true"/><label class="mr10">非居民或多重税收身份</label>2.<input type="checkbox"/>仅中国税收居民</p></td><#else>1.<input type="checkbox"/><label class="mr10">非居民或多重税收身份</label>2.<input type="checkbox" checked="true"/>仅中国税收居民</p></td></#if></tr><tr class="strong_area"><td colspan="2"><p style="color: red">注:属于“消极非金融机构”或“非居民或多重税收身份”的,需进一步提供税收居民声明文件及相关补充资料。</p></td></tr><tr><td align="center">上级法人或主管单位</td><td colspan="2">名称:<span class="line_input">${data.remark47}</span><br/>注:申请单位如有上级法人或主管单位,需提供其证照资料及法定代表人/单位负责人身份证件资料。</td></tr><tr class="strong_area"><td align="center">网上/手机银行/橙e网服务</td><td colspan="2"><#if data.remark48 == "01"><input type="checkbox" checked="true"/><label class="mr10">开通或加挂网上/手机银行/橙e网,且网上银行服务权限:</label><#else><input type="checkbox"/><label class="mr10">开通或加挂网上/手机银行/橙e网,且网上银行服务权限:</label></#if><#if data.remark49 == "01"><input type="checkbox" checked="true"/><label class="mr10">转账与查询(企业管理员可在网银端自设录入及复核用户)</label><#else><input type="checkbox"/><label class="mr10">转账与查询(企业管理员可在网银端自设录入及复核用户)</label></#if>或 <#if data.remark50 == "01"><input type="checkbox" checked="true"/><label class="mr10">仅查询;</label><#else><input type="checkbox"/><label class="mr10">仅查询;</label></#if><br/><label class="mr10">接收网上/手机银行激活码的移动电话:</label><#if data.remark51 == "01"><input type="checkbox" checked="true"/><label class="mr10">同法定代表人(单位负责人)电话</label><input type="checkbox"/><label>同财务负责人电话</label><#else><input type="checkbox"/><label class="mr10">同法定代表人(单位负责人)电话</label><input type="checkbox" checked="true"/><label>同财务负责人电话</label></#if><br/><b>USBKEY购买数量:<span class="line_input">${data.remark52}</span>个</b></td></tr><tr><td align="center">其它增值服务<br/>(可多选)</td><td colspan="2"><b class="mr10">1.默认开通电话银行</b><#if data.remark53 == "01">2.<input type="checkbox" checked="true"/><label>开通金卫士服务且签约移动电话为:<#if data.remark54??>①</label><span class="line_input">${data.remark54}</span><br/><#if data.remark55??>②<span class="line_input">${data.remark54}</span><#if data.remark56??>③<span class="line_input">${data.remark56}</span>;    <#else>③<span class="line_input">    </span>;    </#if><#else>②<span class="line_input">    </span>③<span class="line_input">    </span>;    </#if><#else>①</label><span class="line_input">    </span><br/>②<span class="line_input">    </span>③<span class="line_input">    </span>;    </#if><#else></#if>缴费方式为:<#if data.remark57 == "01"><input type="checkbox" checked="true"/><label class="mr10">按月</label><input type="checkbox"/><label class="mr10">按条</label><input type="checkbox"/>按年<br/><#elseif data.remark57 == "02"><input type="checkbox"/><label class="mr10">按月</label><input type="checkbox" checked="true"/><label class="mr10">按条</label><input type="checkbox"/>按年<br/><#else><input type="checkbox"/><label class="mr10">按月</label><input type="checkbox"/><label class="mr10">按条</label><input type="checkbox" checked="true"/>按年<br/></#if><#if data.remark58 == "01">3.<input type="checkbox" checked="true"/><label class="mr10">开通通兑</label><#else>3.<input type="checkbox"/><label class="mr10">开通通兑</label></#if><#if data.remark59 == "01">4.<input type="checkbox" checked="true"/><label>开通支付密码</label><#if data.remark60 == "01">(支付密码器:<input type="checkbox" checked="true"/><label class="mr10">新开</label><input type="checkbox"/><label class="mr10">自备)</label><#else>(支付密码器:<input type="checkbox"/><label class="mr10">新开</label><input type="checkbox" checked="true"/><label class="mr10">自备)</label></#if><#else>4.<input type="checkbox"/><label>开通支付密码</label>(支付密码器:<input type="checkbox"/><label class="mr10">新开</label><input type="checkbox"/><label class="mr10">自备)</label></#if><#if data.remark61 == "01">5.<input type="checkbox" checked="true"/><label>电子商业汇票签约</label><#else>5.<input type="checkbox"/><label>电子商业汇票签约</label></#if></td></tr>                    </table>  <br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><table cellspacing="0" border="1" cellpadding="4"><col width="34%"/><col width="33%"/><col width="33%"/><tr><td colspan="3" class="table_title">意 见</td></tr><tr class="link"><td align="center"><a href="#">xxxx审核意见</a></td><td align="center"><a href="#">xxxx承诺及签章</a></td><td align="center"><a href="#">xxxx审核意见</a></td></tr><tr><td valign="top" style="position: relative" class="strong_area"><p style="text-indent: 24px">本单位因结算需要,申请在贵行开立账户,保证开户资料的真实、完整、合规。本单位已阅读、理解《平安银行单位账户管理协议》条款(后附),并同意按协议约定使用账户和办理业务。</p><p style="padding: 60px 0 80px">法定代表人<strong style="font-weight: normal">或其授权人</strong>签章:<span class="line_input">${data.remark62}</span></p><div style="position: absolute;width: 100%;bottom: 4px;right: 4px"><p style="padding: 20px 0 20px 0;">申请单位(公章)</p><p style="text-align: right;padding-bottom:15px;"><span class="line_input">${data.remark63}</span>年<span class="line_input">${data.remark64}</span>月<span class="line_input">${data.remark65}</span>日</p></div></td><td valign="top" style="position: relative"><p style="margin: 20px 0;"> 经办:<span class="line_input">${data.remark66}</span></p><p style="position: relative"> 主管:<span class="line_input">${data.remark67}</span></p><div style="position: relative;width: 100%;bottom: 4px;right: 4px"><p style="padding: 115px 0 0 0;margin: 20px 0;">开户银行(签章)</p><p style="text-align: right;padding-bottom:15px;"><span class="line_input">${data.remark68}</span>年<span class="line_input">${data.remark69}</span>月<span class="line_input">${data.remark70}</span>日</p></div></td><td valign="top" style="position: relative"><p style="text-align: center">(非核准类账户除外)</p><p style="margin: 20px 0;"> 经办人(签章):<span class="line_input">${data.remark71}</span></p><div style="position: relative;width: 100%;bottom: 4px;right: 4px"><br/><br/><p style="padding: 105px 0 0 0;">中国人民银行(签章)</p><br/><p style="text-align: right;padding-bottom:15px;"><span class="line_input">${data.remark72}</span>年<span class="line_input">${data.remark73}</span>月<span class="line_input">${data.remark74}</span>日</p></div></td></tr></table><div class="sign_area" style="width: 100%;"><div style="width: 45%;text-align: right"><b>客户经理UM号:<span class="line_input">${data.remark75}</span></b></div><div style="text-align; right;margin-left: 60px"><b>客户经理姓名:<span class="line_input">${data.remark76}</span></b></div><p class="clear"></p></div>         </div><div class="side_tips"><p>第</p><p>一</p><p>联</p><p>:</p><p>开</p><p>户</p><p>银</p><p>行</p><p>留</p><p>存</p><p style="margin-top: 80px;">第</p><p>二</p><p>联</p><p>:</p><p>申</p><p>请</p><p>单</p><p>位</p><p>留</p><p>存</p></div>                                 </div><!--文档end-->
</body>
</html>

然后就是上测试代码:

package com.zy.test;import java.util.HashMap;
import java.util.Map;import org.junit.Test;import com.zy.common.templatebo.PDFTemplateBo;
import com.zy.common.utils.PDFUtil;public class TestPDFUtil {@Testpublic void testGeneratePDF(){String templateName = "template";//需要选用的模板名称String targetPathRoot = "D:/temp/";//生成pdf的目标位置Map<String, Object> map = generateUnitOpenAccountApplicationData();//构建模板所需数据try {String path = PDFUtil.getPath();//System.out.println(path); //项目根路径PDFUtil.generateToFile(path,"templates/" + templateName + ".ftl", path + "/images/", map, targetPathRoot + templateName + ".pdf");System.out.println("生成PDF成功!");} catch (Exception e) {e.printStackTrace();System.out.println("生成PDF失败!");}}public Map<String, Object> generateUnitOpenAccountApplicationData() {Map<String, Object>map = new HashMap<String, Object>();PDFTemplateBo bo = new PDFTemplateBo();bo.setRemark1("张三");//存款人名称bo.setRemark2("02");//办公地址:01同注册地址,02其它  当此项值为02时要设置remark3、remark4、remark5、remark6的值bo.setRemark3("xxx");//具体办公地址:省bo.setRemark4("xxx");//具体办公地址:市bo.setRemark5("xxx");//具体办公地址:区/县bo.setRemark6("xxx");//具体办公地址:bo.setRemark7("03");//邮寄地址:01同注册地址,02同办公地址,03其他  当此项值为03时要设置remark8、remark9、remark10、remark11的值bo.setRemark8("xxx");//具体邮寄地址:省bo.setRemark9("xxx");//具体邮寄地址:市bo.setRemark10("xxx");//具体邮寄地址:区/县bo.setRemark11("xxx");//具体邮寄地址:bo.setRemark12("01");//联系信息:01法定代表人,02单位负责人bo.setRemark13("027");//办公电话:区号bo.setRemark14("88936");//办公电话:直线bo.setRemark15("985635");//办公电话:分机bo.setRemark16("13295684565");//办公电话:移动电话bo.setRemark17("赖总");//财务负责人:姓名bo.setRemark18("010");//办公电话:区 号bo.setRemark19("88968");//办公电话:直线bo.setRemark20("9435649");//办公电话:分机bo.setRemark21("18868365686");//办公电话:移动电话bo.setRemark22("2322423@qq.com");//电子邮箱bo.setRemark23("罗总");//财务经办人员:姓名bo.setRemark24("020");//办公电话:区 号bo.setRemark25("89468");//办公电话:直线bo.setRemark26("9845146");//办公电话:分机bo.setRemark27("16686866868");//办公电话:移动电话bo.setRemark28("05");//账户种类:人民币:01定期账户,02基本户,03一般户,04临时户,05专用户,06NRA账户    当此项值为03时要设置remark29的值  当此项为05时要设置remark31的值   当此项值为06时要设置remark32的值//vo.setRemark29("03");//一般户且用于:01结算,02贷款,03其它  当此项值为03时要设置remark30的值//vo.setRemark30("预算");//具体的其他账户类型bo.setRemark31("国有");//remark28值为05时要设置此项   专用户且账户资金性质为//vo.setRemark32("64987");//remark28值为06时要设置此项   NRA账户且国家代码为bo.setRemark33("05");//账户种类:外  币:币种:01美元,02港币,03欧元,04日元,05其他  当此项的值为05时要设置remark32的值bo.setRemark34("英镑");//具体的币种bo.setRemark35("04");//账户种类:外  币:种类:01经常项目外汇账户,02外汇资本金账户,03外债账户,04其他  当此项值为04时要设置remark34的值bo.setRemark36("具体的账户种类");//具体的种类bo.setRemark37("老祝");//控股股东或实际控制人bo.setRemark38("03");// 证件种类:01身份证,02护照,03其他  当此项值为03时要设置remark37的值bo.setRemark39("好男人证");//具体的证件种类名称bo.setRemark40("86686688");//证件号码bo.setRemark41("02");//证件到期日类型:01长期有效,02具体到期日  当此项值为02时要设置remark40、remark41、remark42的值bo.setRemark42("2080");//证件到期日  年bo.setRemark43("08");  //证件到期日  月bo.setRemark44("18");  //证件到期日  日bo.setRemark45("02");//机构类别:01消极非金融机构,02其他非金融机构bo.setRemark46("01");//税收居民身份:01非居民或多重税收身份,02仅中国税收居民bo.setRemark47("xxx");//上级法人或主管单位名称bo.setRemark48("01");//是否勾选 开通或加挂网上/手机银行/橙e网,且网上银行服务权限:01勾选,02不勾选bo.setRemark49("02");//是否勾选 转账与查询(企业管理员可在网银端自设录入及复核用户):01勾选,02不勾选bo.setRemark50("01");//是否勾选 仅查询:01勾选,02不勾选bo.setRemark51("02");//接收网上/手机银行激活码的移动电话:01同法定代表人(单位负责人)电话,02同财务负责人电话bo.setRemark52("20");//USBKEY购买数量bo.setRemark53("01");//其它增值服务:开通金卫士服务且签约移动电话:01勾选,02不勾选   当此项值为01时要设置remark52的值bo.setRemark54("13398595998");//电话号码1//vo.setRemark55("");//电话号码2//vo.setRemark56("");//电话号码3bo.setRemark57("02");//缴费方式:01按月,02按条,03按年bo.setRemark58("01");//是否勾选 开通通兑:01勾选,02不勾选bo.setRemark59("01");//是否勾选  开通支付密码:01勾选,02不勾选  当此项的值为01时要设置remark58的值bo.setRemark60("01");//支付密码器类型:01新开,02自备bo.setRemark61("01");//是否勾选  电子商业汇票签约 :01勾选,02不勾选bo.setRemark62("法定代表人");//法定代表人或其授权人签章bo.setRemark63("2018");//签章日期  年bo.setRemark64("03");  //签章日期  月bo.setRemark65("10");  //签章日期  日bo.setRemark66("经办签的字");//经办签字bo.setRemark67("主管签的字");//主管签字bo.setRemark68("2018");//签字日期  年bo.setRemark69("03");  //签字日期  月bo.setRemark70("10");  //签字日期  日bo.setRemark71("经办人的签章");//经办人(签章)bo.setRemark72("2018");//签章日期  年bo.setRemark73("03");//签章日期  月bo.setRemark74("10");//签章日期  日bo.setRemark75("88888888");//客户经理UM号bo.setRemark76("老刘");//客户经理姓名map.put("data", bo);return map;}
}

截取部分生成的pdf:

												

根据html改为ftl模板生成pdf文件,支持中文及换行相关推荐

  1. springboot 基于.ftl模板生成pdf文件

    目录 Demo前置简述 生成pdf内容 项目结构 主要实现 api测试 完整代码地址 Demo前置简述 实现功能:用户个人信息测试数据加上ftl模板得到html字符串,然后根据html字符串生成pdf ...

  2. freemarker 模板生成pdf文件并下载

    利用freemarker 模板生成pdf文件,通过浏览器直接下载或生成文件到指定目录 1.pom.xml文件 <!--引入Freemarker的依赖--> <dependency&g ...

  3. java 制作pdf模板,Java-pdf模板制作流程-使用pdf 模板生成pdf文件

    Java 使用pdf 模板生成pdf文件 --制作流程 1.      使用工具 adobe acrobat dc.word 2015 2.      使用 word 繪制一個 3*5 的表格並保存, ...

  4. java 模板生成PDF文件 复选框勾选

    java 模板生成PDF文件 复选框勾选 // pdf填充时要有第三个参数s.setField("A", On, true);

  5. Java使用Itext5与html模板生成pdf并支持下载

    Java使用Itext5与html模板生成pdf 文章目录 Java使用Itext5与html模板生成pdf 前言 一.引入依赖 二.相关使用说明 1.工具类 2.模板配置 3.模板的抽象类(定义了相 ...

  6. Java根据模板生成pdf文件并导出

    原文地址:http://blog.csdn.net/TOP__ONE/article/details/65442390 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf ...

  7. java 字符串转pdf文件_java中根据模板生成pdf文件

    原标题:java中根据模板生成pdf文件 阅读目录 简介 业务需求 引入jar包 pdf模板文件与方法参数 代码部分 总结归纳 回到顶部 简介 本文使用java引入apach提供的pdf操作工具生成p ...

  8. itextpdf通过pdf模板生成pdf文件

    itextpdf通过pdf模板生成pdf文件,设置粗体字体 1.创建pdf模板 2.使用模板生成pdf 3.itext自带的字体列表 4.遇到的坑 1.创建pdf模板 可以使用PDFFescape网站 ...

  9. java根据模板生成pdf文件并导出(iText)

    java根据模板生成pdf文件并导出 首先你的制作一个pdf模板: 1.先用word做出模板界面 2.文件另存为pdf格式文件 3.通过Adobe Acrobat pro软件打开刚刚用word转换成的 ...

最新文章

  1. iOS超全开源框架、项目和学习资料汇总:UI篇
  2. c++11 模板的别名
  3. VS切换到按F5不需要按Fn键的快捷键模式
  4. IP、TCP和DNS与HTTP的密切关系
  5. Winform中自定义添加ZedGraph右键实现设置所有Y轴刻度的上下限
  6. 【工程化】从0搭建VueJS移动端组件库开发框架
  7. dz email地址无效_Zcash屏蔽地址漏洞或揭示全节点IP地址(附解决方案)
  8. java image 内存不足_一招解决游戏内存不足的神器Caffeine
  9. Atitit 安全登录退出管理法v3 tbb.docx 目录 1.1. 未持有效出入边界票据。。校验票据有效性 1 1.2. 从事与票据种类不符的活动的 2 1.3. 数据为数字的应该校验数字 2
  10. 交易撮合引擎原理与实现【含源码】
  11. 写简历的大原则和投简历的小技巧
  12. 计算机网络的基本组成包括哪些,计算机网络的基本组成是什么?
  13. MQTT Essentials(Basics(1-5) And Features(6-10))
  14. pytorch、torch、torchvision介绍
  15. 海贼王java7723_我的世界海贼王模组7723首发版
  16. 背景图片上面写字的方法。
  17. 文档化Python代码完全指南(翻译)
  18. html2canvas页面滚动时截图不全空白问题
  19. 荣联再次中标中国移动云资源池项目
  20. halide 入门实战(1)

热门文章

  1. skyworth E900-S 安装沙发
  2. 图片教程+html,html图片教程
  3. 什么是域名DNS?有什么用途?
  4. Ubuntu 16.04-18.04中安装 WPS Office 2016 for Linux(集合篇含字体解决方法)简单好用
  5. 越南籍学生如何进行计算机教学,越南三年级数学神题太难博士动用计算机(图)...
  6. android设备udid,Android下获取设备唯一标识(UDID, DeviceID...)
  7. ftp登录工具,三款好用的ftp登录工具
  8. EDMA 和QDMA 还看不懂,先收藏着
  9. 【PyQt5】孩子要上小学了,写个软件做练口算吧!
  10. matlab二次型状态反馈调节器,线性二次型最优控制器设计ppt课件