如何使用Freemarker生成中文PDF避免乱码?

摘要:添加依赖 <dependency> <groupId>org.freemarker<groupId> &a
添加依赖 <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%E
阅读全文