这里写自定义目录标题

  • java 模板转PDF(合同)详细讲解
    • 导入jar包
    • 模板合同
    • Controller层
    • 实体类Guarantee
    • 工具类FtlToHtml
    • 工具类HtmlToPdf
    • 测试结果
    • 总结

java 模板转PDF(合同)详细讲解

我是一个刚刚入职的小白,领导扔给我一个word文档合同模板,然后去生成一个PDF电子签章,话不多说直接看代码,

导入jar包

     <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.11</version></dependency><dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.11</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.23</version></dependency><dependency><groupId>org.xhtmlrenderer</groupId><artifactId>flying-saucer-pdf</artifactId><version>9.0.9</version></dependency>

模板合同

这里需要注意的是,领导给我的是word文档需要转换成html格式,链接: 在线转换格式.转换html完成后,把html代码所有内容复制到**.ftl**文件,如图和代码![在这里插入图片描述](https://img-blog.csdnimg.cn/20201201163843671.png

<!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" /><meta name="generator" content="Aspose.Words for .NET 15.1.0.0" /><title></title><style>body{font-family: SimSun;padding: 0pt 45pt 0pt;}</style>
</head>
<body>
<div><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:center; widows:0"><span style=" font-size:14pt; font-weight:bold">XXXX</span><spanstyle=" font-size:14pt; font-weight:bold">皮皮虾</span><span style=" font-size:14pt; font-weight:bold">XXXXXXXX授权书</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:20.8pt; widows:0"><spanstyle=" font-size:10.5pt; font-weight:bold">尊敬的客户:为了维护您的权益,请在签署本授权书前,仔细阅读本授权书各条款(特别是黑体字条款),关注您的权利、义务</span><spanstyle=" font-size:10.5pt">。如有任何疑问,请向经办人咨询。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:20.8pt; widows:0"><spanstyle=" font-size:10.5pt">&#xa0;</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; widows:0"><span style=" font-size:10.5pt; font-weight:bold">XXXXXXXXXXXXXXXX</span><spanstyle=" font-size:10.5pt; font-weight:bold">有限公司</span><span style=" font-size:10.5pt">:</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt 0.75pt; orphans:0; text-align:justify; text-indent:21pt; widows:0"><spanstyle=" font-size:10.5pt; font-weight:bold">一</span><span style=" font-size:10.5pt; font-weight:bold">、</span><spanstyle=" font-size:10.5pt; font-weight:normal">XXXXXXXXX不可撤XXXXXXXX:</span><span style=" font-size:10.5pt; font-weight:bold">贵司</span><spanstyle=" font-size:10.5pt; font-weight:bold">按照国家相关规定采集并向金融信用信息基础数据库及其他依法成立的征信机构提供XXXXXXXXXXXXXXXXXXX在内的信用信息(包含XXXXXXXXXXXXXX合同义务产生的</span><spanstyle=" font-size:10.5pt; font-weight:bold; text-decoration:underline">不良</span><span style=" font-size:10.5pt; font-weight:bold">信息</span><spanstyle=" font-size:10.5pt; font-weight:bold">)</span><span style=" font-size:10.5pt; font-weight:bold">。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt 0.75pt; orphans:0; text-align:justify; text-indent:21pt; widows:0"><spanstyle=" font-size:10.5pt">二</span><span style=" font-size:10.5pt">、</span><spanstyle=" font-size:10.5pt; font-weight:bold">本人知悉</span><span style=" font-size:10.5pt; font-weight:bold">贵司</span><spanstyle=" font-size:10.5pt; font-weight:bold">向征信机构提供不良信用信息前,可以选择以电子邮件、短信、纸质信件等任一方式通知XXXXXX</span><spanstyle=" font-size:10.5pt; font-weight:bold">,其中以电子邮件、短信方式发出通知的,发出即视为通知有效送达</span><span style=" font-size:10.5pt; font-weight:bold">。本人知悉,当本人联系信息变更时,需要及时更新,确保及时收到通知。若本人未及时更新,本人留存的联系方式视为有效联系方式,通过该联系方式通知本人时,视为有效送达本人。但是,依照法律、行政法规规定公开的不良信息除外。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt 0.75pt; orphans:0; text-align:justify; text-indent:21pt; widows:0"><spanstyle=" font-size:10.5pt">三</span><span style=" font-size:10.5pt">、XXXXXXXX同意并不可撤销地XXXXXXX:</span><spanstyle=" font-size:10.5pt; font-weight:bold">贵司</span><span style=" font-size:10.5pt; font-weight:bold">根据国家有关规定,在办理涉及本人的业务时,有权向金融信用信息基础数据库及其他依法成立的征信机构查询、打印、保存本人的</span><spanstyle=" font-size:10.5pt; font-weight:bold">个人信息及</span><span style=" font-size:10.5pt; font-weight:bold">信用信息,并用于下述用途:</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:15.75pt; widows:0"><spanstyle=" font-size:10.5pt">(一)审核本人</span><span style="font-family:仿宋_GB2312; font-size:10.5pt">(</span><spanstyle=" font-size:10.5pt">本人配偶</span><span style=" font-size:10.5pt">、XXX借款人、XXXXX借款人配偶)</span><spanstyle=" font-size:10.5pt"> 就借款向贵司申请融资担保服务</span><span style=" font-size:10.5pt">的办理;</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:15.75pt; widows:0"><spanstyle=" font-size:10.5pt">(二)审核本人作为提出</span><span style=" font-size:10.5pt">XXXXXXXXXX申请</span><spanstyle=" font-size:10.5pt">的XX、组织或机构的XX人、XX人、XX人、XX人、XX者、XX人或XX团队主要成员的信用信息;</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:15.75pt; widows:0"><spanstyle=" font-size:10.5pt">(三)对已向XX或XX人、XX人、XX人、XX者、XX个人、XX或XX</span><span style=" font-size:10.5pt">提供</span><spanstyle=" font-size:10.5pt">的</span><span style=" font-size:10.5pt">XXXXXXXXXX服务</span><spanstyle=" font-size:10.5pt">进行</span><span style=" font-size:10.5pt">提供后的</span><spanstyle=" font-size:10.5pt">XXXXX管理;</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:15.75pt; widows:0"><spanstyle=" font-size:10.5pt">(四)审核XXXXXXXX异议申请;</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:15.75pt; widows:0"><spanstyle=" font-size:10.5pt">(五)向XXXXXXXX的其他</span><span style=" font-size:10.5pt">贵司</span><spanstyle=" font-size:10.5pt">合法XX范围内的业务</span><span style=" font-size:10.5pt">,XX与XX业务相关的XX咨询业务,XX顾问中介服务等</span><spanstyle=" font-size:10.5pt">。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:20.6pt; widows:0"><spanstyle=" font-size:10.5pt; font-weight:bold">四</span><span style=" font-size:10.5pt; font-weight:bold">、如果</span><spanstyle=" font-size:10.5pt; font-weight:bold">贵司</span><span style=" font-size:10.5pt; font-weight:bold">超出XX权XX进行XXXXXXX和XXX使用,则</span><spanstyle=" font-size:10.5pt; font-weight:bold">贵司</span><span style=" font-size:10.5pt; font-weight:bold">应XXXX与此有关的法律责任。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt 7.15pt; orphans:0; text-align:justify; text-indent:15.45pt; widows:0"><spanstyle=" font-size:10.5pt; font-weight:bold">五</span><span style=" font-size:10.5pt; font-weight:bold">、</span><spanstyle="font-family:仿宋; font-size:14pt; font-weight:normal"> </span><span style=" font-size:10.5pt; font-weight:bold">若本人在</span><spanstyle=" font-size:10.5pt; font-weight:bold">贵司</span><span style=" font-size:10.5pt; font-weight:bold">业务XX办理,XX接受</span><spanstyle=" font-size:10.5pt; font-weight:bold">贵司</span><span style=" font-size:10.5pt; font-weight:bold">文件管理要求将XX授权书及XX信用报告XX</span><spanstyle=" font-size:10.5pt; font-weight:bold">贵司</span><span style=" font-size:10.5pt; font-weight:bold">留存,无须退回XX</span><spanstyle=" font-size:10.5pt; font-weight:bold">。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:20.6pt; widows:0"><spanstyle=" font-size:10.5pt; font-weight:bold">六</span><span style=" font-size:10.5pt; font-weight:bold">、本授权书内容与相关业务的合同条款不一致的,无论相关合同在本授权书之前或之后签署,XX以本授权书的XX为准,但相关合同条款明确约定是针对本授权书XXXXX所做XXXXX的除外。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:20.6pt; widows:0"><spanstyle=" font-size:10.5pt; font-weight:bold"> </span><span style=" font-size:10.5pt; font-weight:bold">七</span><spanstyle=" font-size:10.5pt; font-weight:bold">、本授权书有效期至XXXXX业务结清或终止之日止(XXXX征信异议XXXX除外)。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:20.6pt; widows:0"><spanstyle=" font-size:10.5pt; font-weight:bold">XXXXXX声明:XXXXX已仔细阅读上述所有条款,并已特别注意字体加黑的内容。</span><span style=" font-size:10.5pt; font-weight:bold">贵司</span><spanstyle=" font-size:10.5pt; font-weight:bold">已应XXXXXXX要求对相关条款予以XXXXXXXX。XXXXX对所有条款的含义及相应的XXXXX已全部</span><spanstyle=" font-size:10.5pt; font-weight:bold; text-decoration:underline">知晓</span><span style=" font-size:10.5pt; font-weight:bold">并充分理解,XXXXXXX自愿作出上述授权、XXXX和XXXXX。XXXXX承诺本授权书授权事项为不可撤销之授权,XXXXXX签字或以其他方式确认之XXXXXXXXXX。</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; text-indent:20.6pt; widows:0"><spanstyle="font-family:Calibri; font-size:10.5pt; font-weight:bold">&#xa0;</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; padding-left:6.2pt; text-align:justify; text-indent:-6.2pt; widows:0"><spanstyle=" font-size:10.5pt">本人(签名):${pre.myName}    联系电话:${pre.phone}</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; padding-left:6.2pt; text-align:justify; text-indent:-6.2pt; widows:0"><spanstyle=" font-size:10.5pt">证件名称:${pre.cerName}    证件号码:${pre.cerNumber} </span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; padding-left:6.2pt; text-align:justify; text-indent:-6.2pt; widows:0"><spanstyle=" font-size:10.5pt">联系地址:</span><span style=" font-size:10.5pt">${pre.address} </span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; padding-left:6.2pt; text-align:justify; text-indent:-6.2pt; widows:0"><spanstyle=" font-size:10.5pt">签署日期:${pre.year}年${pre.month}月${pre.day}日</span></p><p style="line-height:22pt; margin:0pt 0pt 1pt; orphans:0; text-align:justify; widows:0"><span style="font-family:Calibri; font-size:10.5pt; font-weight:bold">&#xa0;</span></p>
</div>
</body>
</html>

Controller层

package com.nswt.credit.ws.file;import com.nswt.common.util.FtlToHtml;
import com.nswt.common.util.HtmlToPdf;
import com.nswt.credit.model.file.Guarantee;
import com.nswt.credit.model.file.PerLetter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;@RestController
@RequestMapping("/api/pdf")
@Transactional(rollbackFor = Throwable.class)
@Slf4j
public class PdfController {@AutowiredHtmlToPdf htmlToPdf;@RequestMapping(method = RequestMethod.POST, value = "createGuarantee")public void getGuarantee(@RequestBody Guarantee gua) throws Exception {//模板名称String templateName = "Text.ftl";//获取当前时间Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));int year = calendar.get(Calendar.YEAR);gua.setYear(String.valueOf(year));int month = calendar.get(Calendar.MONTH) + 1;gua.setMonth(String.valueOf(month));int day = calendar.get(Calendar.DATE);gua.setDay(String.valueOf(day));Map<String, Object> map = new HashMap<>();//构建模板所需数据map.put("gua", gua);FtlToHtml ftlToHtml = new FtlToHtml();String html = ftlToHtml.getHtmlString(templateName, map);//生成PDFhtmlToPdf.makePdf(html);}}

实体类Guarantee

package com.nswt.credit.model.file;import lombok.Data;import java.util.Date;@Data
public class Guarantee {//本人姓名private String myName;//联系电话private String phone;//身份证号private String idNumber;//地址private String address;//签署日期private Date date;private String year;private String month;private String day;
}

工具类FtlToHtml

package com.nswt.common.util;import freemarker.template.Configuration;
import freemarker.template.Template;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import java.io.File;
import java.io.StringWriter;
import java.io.Writer;
import java.util.Map;/*** @Description: 根据模板转换为html* @Auther: Shierbao⸙* @Date: 2019/11/3 20:14*/
@Component
@Slf4j
public class FtlToHtml {/*** 功能描述: 根据模板及数据模型获取html字符串* @param ftlName: ftl模板名称* @param mode: 数据模型* @return: java.lang.String* @date: 2019/11/3 20:28*/public String getHtmlString(String ftlName, Map<String, Object> mode){String sysname = System.getProperty ("os.name");String path = "";if (sysname != null && sysname.toLowerCase().contains("windows")) {//windows系统path = this.getClass().getResource("/").toString().replaceAll("file:/", "");} else {//linux或unix系统path = "/home/risk/app/mservices/risk-job-executor/resources";}String ftlPath = path + "/file/ftl";Writer writer = null;String htmlContent = "";try {//创建freeMarker配置实例Configuration configuration = new Configuration(Configuration.getVersion());// 获取模版路径configuration.setDirectoryForTemplateLoading(new File(ftlPath));//设置模板编码格式configuration.setDefaultEncoding("UTF-8");configuration.setNumberFormat("#.#######");//加载模版文件Template template = configuration.getTemplate(ftlName);writer = new StringWriter();//替换模板template.process(mode, writer);//获取内容htmlContent = writer.toString();} catch (Exception e) {throw new RuntimeException("模板转换失败");} finally {try {if (null != writer) {writer.flush();}} catch (Exception e2) {e2.printStackTrace();}}return htmlContent;}
}

工具类HtmlToPdf

@Component
public class HtmlToPdf {
public void makePdf(String html) throws Exception {
//        html = html.replaceAll("\"", "'").replaceAll("<style>", "<style>body{font-family:simsun;}</style>");    //注意这里为啥要写这个,主要是替换成这样的字体,如果不设置中文有可能显示不出来。
//        System.out.println(html);String id = IdUtils.create();//这里是随机生成窜字符,做练习可以去掉,id需要改变File pdfOutputFile = new File("F:/", id + ".pdf");OutputStream os = new FileOutputStream(pdfOutputFile);    //生成PDF文件的路径ITextRenderer renderer = new ITextRenderer();ITextFontResolver font = renderer.getFontResolver();font.addFont("F:/simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);//添加中文识别,这里是设置的宋体,Linux下要换成对应的字体renderer.setDocumentFromString(html);renderer.layout();renderer.createPDF(os);renderer.finishPDF();}
}

测试结果


总结

word文档转HTML,然后把HTML代码全部复制到**.ftl文件下,利用工具类FtlToHtml把.ftl文件的内容以字符串类型输出,最后利用工具类HtmlToPdf把字符串类型的HTML代码转成PDF即可。

java 模板转PDF(合同)详细讲解相关推荐

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

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

  2. java中PreparedStatement和Statement详细讲解

    java中PreparedStatement和Statement详细讲解 大家都知道PreparedStatement对象可以防止sql注入,而Statement不能防止sql注入,那么大家知道为什么 ...

  3. java 模板转 PDF

    首先思路是把html转成pdf,如果是用word转的话首先需要把word转成html,然后再将html转成word,下面附上word转html的地址Word转HTML--免费在线Word转网页 1.首 ...

  4. idea如何设置注释模板,图文超详细讲解

    目录 先打开idea设置 一,idea类注释 1,找到以下设置 2,设置模板 3,apply保存完成 二,idea方法注释 1,创建自定义的组 2,创建模板 3,设置模板 4,选择生成模板的文件 5, ...

  5. java后台导出excel代码详细讲解,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  6. java第一章,win10 jdk的安装,配置jdk环境,第一个java程序的运行(详细讲解)

    1.jdk的安装 jdk下载地址官网:https://www.oracle.com/java/technologies/javase-downloads.html 来到此页面(如下图所示), 我们还是 ...

  7. Java面向对象——继承(超详细讲解)

    一.继承的基本概念 被继承的类称为父类(超类),继承父类的类都称为子类(派生类) 继承是指一个对象直接使用另一个对象的属性和方法,但是能继承非私有的属性和方法: Java只能实现单继承,即一个类只能有 ...

  8. java设计模式桥接模式最详细讲解,从设计卷到开发看源码

    为什么要使用设计模式? 说到底还是为了程序拓展和移植性,无法就是那几种设计思想 单一职责原则 , 开闭原则  里氏替换原则 ,依赖倒置原则,接口隔离原则,组合复用原则  迪米特法则这些思想和原则就是为 ...

  9. java里类得继承详细讲解_java中类的继承详解。

    前言 继承是面向对象的三大特征之一. 也是实现软件复用的重要手段. Java继承具有单继承的特点, 每个子类只有一个直接父类. 继承的特点 Java的继承通过extends关键字实现. 实现继承的类被 ...

  10. java 304_HTTP 304错误的详细讲解

    Not Modified 客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档).服务器告诉客户,原来缓冲的文档还可以继续使用. ...

最新文章

  1. 前端实例练习 - 轮播图
  2. dataTable() 与 DataTable() 的差别与处理方式
  3. js实现Form表单submit提交截获数据(各浏览器通用)
  4. 【转】1.3异步编程:线程同步基元对象
  5. Flex 页面跳转 四种方法
  6. 20190818:(leetcode习题)反转字符串整数反转
  7. python处理出租车轨迹数据_1-出租车数据的基础处理,由gps生成OD(pandas).ipynb...
  8. 计算机中单位换算tb,bit Byte KB MB GB TB 单位换算
  9. 海康 安全码 修改密码_「海康威视客户服务」“通道被锁定”“网络不可达”“未认证的设备”……NVR4.0 Lite通道专题来袭!...
  10. Visio导出矢量图转eps格式
  11. 汪华:未来三年的移动互联网创业
  12. Android9 更改系统默认输入法
  13. Incapsula的全球网络地图
  14. java3D实现空间立方体,纯CSS3实现一个旋转的3D立方体盒子
  15. 能 ping 通但端口不通时端口可用性探测说明
  16. labelme画出的标注json转换成二值标签图,并解决label全黑问题
  17. 大数据基础知识(上)
  18. 阿里云弹性裸金属服务器规格族详解和使用场景
  19. 2021年制冷与空调设备运行操作免费试题及制冷与空调设备运行操作操作证考试
  20. 立体感的3D图像(包含左右眼)生成Red-Cyan分析图

热门文章

  1. 一些微信小程序demo地址记录分享
  2. Android 代码中执行adb shell命令
  3. XP经典壁纸,多少人曾爱慕你年轻时的容颜
  4. java敏感词过滤算法
  5. 莫烦 Python 基础
  6. SDLC - 螺旋模型
  7. SQL2005数据库可疑的解决方法
  8. 【地图学】高斯-克吕格(Gauss-Kruger)投影原理、应用详解(3°带、6°带)
  9. sql选择性插入_SQL插入选择
  10. tp5验证码详细代码