freemark模板 加 iText创建pdf合同

本文介绍了一个使用Freemarker模板和iText库将模板转换为PDF文件的Java项目。项目通过填充参数到HTML模板中,再将HTML转换为PDF,特别关注了中文显示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    公司要做模板合同,网上找了很多案例。都不是很好用,后面找到一个差不多的,自己整理了下。希望需要的小伙伴可以用到,另外也是想的以后不用那么麻烦的找了。

      

      不说那么多直接上代码吧 

      首先需要5个jar包

  

     需要说的是iTextAsian.jar  是处理字体的jar包必不可少,如果是英文合同那就算了哈大笑大笑   

     另外需要自己下载个字体库,不用都下,用啥字体下载啥字体,就可以了

    再说说模板,因为iText对html的支持不是很好,所以还是要模板尽量用table控制

     接下来就是我们 的代码了

   

package tempTest;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import com.lowagie.text.pdf.BaseFont;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class ftlTopdf {

	private static Logger log = Logger.getLogger(ftlTopdf.class.getName());

	private Configuration configuration = null;

	String producePdfPath = "";

	public ftlTopdf() {
		configuration = new Configuration();
		configuration.setDefaultEncoding("UTF-8");
	}

	/**
	 * 生成pdf
	 * 
	 * @param params
	 * @param tempUrl
	 * @param htmlUrl
	 * @param pdFUrl
	 * @return
	 */
	public String processPdf(Map<String, Object> params, String templPath, String ftlName, String htmlPath,
			String pdfPath, String fontPath) {

		// 得到模板地址

		try {
			configuration.setDirectoryForTemplateLoading(new File(templPath));
			Template temp = configuration.getTemplate(ftlName);
			File htmlFile = new File(htmlPath);
			if (!htmlFile.exists()) {
				htmlFile.createNewFile();
			}
			Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(htmlPath)), "utf-8"));
			temp.process(params, out);
			out.flush();

			String url = htmlFile.toURI().toURL().toString();
			OutputStream os = new FileOutputStream(pdfPath);
			ITextRenderer renderer = new ITextRenderer();
			renderer.setDocument(url);

			// 解决中文问题
			ITextFontResolver fontResolver = renderer.getFontResolver();

			fontResolver.addFont(fontPath + "simsun.ttc", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

			renderer.layout();
			renderer.createPDF(os);
			os.close();
		} catch (Exception e) {
			log.info(e.toString());
			return "";
		}

		return pdfPath;
	}


	public static void main(String[] args) {
		ftlTopdf cert=new ftlTopdf();
		Map<String, Object> map=new HashMap<>();
		map.put("customerName", "user");
		map.put("customerAddress", "北京市通州区高里掌路1号");
		map.put("customerTel", "");
		map.put("customerEmail", "@qq.com");
		map.put("AcapAmount", "");
		
		map.put("orderAmount", "");
		cert.processPdf(map, "E:/templent/", "jybftl.ftl", "D:/aaa.html", "D:/aaa.pdf", "D:/fonts/");
	}
}

好了 想要jar包的小伙伴可以去这里下

另外加个模板 

font字体库就不加了啊  自己找点就好了 一般就是楷体  希腊语啥的

链接: https://pan.baidu.com/s/1kUEpF2R 密码: k8z2


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值