生活随笔
收集整理的這篇文章主要介紹了
java 模板转PDF(合同)详细讲解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這里寫自定義目錄標題 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**文件,如圖和代碼,關注您的權利、義務</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"> </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"> </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"> </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(合同)详细讲解 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。