当前位置: 首页 > news >正文

java freemarker(ftl)模板填充导出PDF,支持中文乱码

添加依赖

        <dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version></dependency><dependency><groupId>com.openhtmltopdf</groupId><artifactId>openhtmltopdf-pdfbox</artifactId><version>1.0.10</version></dependency>

java代码

    public void exportPdf(String html, String outputPath) throws Exception {PdfRendererBuilder builder = new PdfRendererBuilder();builder.useFastMode();// 注册思源宋体——关键点builder.useFont(() -> getClass().getClassLoader().getResourceAsStream("xxx/siyuansongti.ttf"), "Source Han Serif CN");builder.useFont(() -> getClass().getClassLoader().getResourceAsStream("xxx/DejaVuSans-7.ttf"), "DejaVu Sans");builder.withHtmlContent(html, null);builder.toStream(new FileOutputStream(outputPath));builder.run();}@GetMapping("test")public void test() throws Exception{Configuration cfg = new Configuration(Configuration.VERSION_2_3_32);cfg.setDefaultEncoding("UTF-8");cfg.setClassLoaderForTemplateLoading(this.getClass().getClassLoader(),"templates");Template tpl = cfg.getTemplate("xxx/index.ftl");StringWriter writer = new StringWriter();tpl.process(buildDto(), writer);exportPdf(writer.toString(), "D:/xxx.pdf");}

ftl模板使用字体库

文件名:xxx.ftl

ps:处理中文乱码

        body {font-family: "Source Han Serif CN", "DejaVu Sans";font-size: 12px;margin: 0;padding: 0;}

字体库

https://chenyanbin-software.oss-cn-guangzhou.aliyuncs.com/%E5%AD%97%E4%BD%93%E5%BA%93/DejaVuSans-7.ttf

https://chenyanbin-software.oss-cn-guangzhou.aliyuncs.com/%E5%AD%97%E4%BD%93%E5%BA%93/siyuansongti.ttf

更多字体库:https://www.mianfeiziti.com/thread-491.htm

 

http://www.jsqmd.com/news/47680/

相关文章:

  • 2025年广东洁净度检测公司权威推荐榜单:广东医院(诊所)洁净环境检测/广东空气净化器检测平台/广东新风机检测服务机构精选
  • C# Avalonia 18- ControlTemplates - FlipPanelTest
  • 2025 最新仿石漆厂家权威推荐榜:真石漆 / 绿色环保仿石漆优质品牌精选仿石漆/真石漆/绿色真石漆/有资质的仿石漆公司推荐
  • 2025年纱线烘干机制造厂权威推荐榜单:气流烘干机/筒子烘干机/快速烘干机源头制造厂精选
  • CTF逆向Re:零基础系统性入门教程-5-动态调试
  • CF1817B Fish Graph
  • CF1630C Paint the Middle
  • CF1707B Difference Array
  • P3113 [USACO14DEC] Marathon G
  • 封装map和set(红黑树作为底层结构如何完成map和set插入遍历)
  • 淮安市一对一辅导机构权威排行榜推荐:2026家教机构穿透式测评!
  • 崖山数据库导出 - 华
  • 南昌航空大学-软件学院-23207201-吕玉英
  • AI Compass前沿速览:Nano Banana Pro、Gemini 3 、 HunyuanVideo 1.5 、Meta SAM 3D生成
  • Prufer序列与Cayley公式
  • MX Round 27 解题报告
  • 11.22模拟赛
  • 从超时到秒杀:三路快排解决数组排序的完整实战与反思
  • 2025年光伏安装厂家权威推荐榜单:光伏施工/光伏/光伏发电源头厂家精选
  • 机房夸夸乐
  • 2025年镀锌水沟盖板订做厂家权威推荐榜单:雨水沟盖板/污水沟盖板/镀锌排水沟盖板源头厂家精选
  • 完整教程:【Deepseek OCR】重磅测试,mac环境下的体验【本人已经本地实验成功】
  • 使用C# Channel实现工位流水线调度系统
  • 2025年发电机制造厂权威推荐榜单:康姆勒原装发电机组/康姆勒发电机组/全自动柴油发电机组源头厂家精选
  • 2025百元白酒精选推荐指南:十大香型佳酿与纯粮酒挑选策略
  • BLOG1-NCHU-单部电梯调度程序
  • Hadoop生态系统怎样优化存储性能
  • 【matlab】机器学习入门之旅
  • web漏洞、waf繞過和前端加密繞過
  • 部署tendis 集群