Itex+freemarker 导出PDF文件时✓无法正常显示
在使用Itex+freemarker 导出PDF文件时✓无法正常显示
在网上看到了以下思路:经过实验后是靠谱的
1、首先打开一个word文件,输入这个特殊字符,然后在字体选择框里看见这个特殊字符所用的字体,就是“Segoe UI Symbol”
2、然后打开C:\Windows\Fonts,找到这个字体的文件,右键点击弹出菜单栏点进属性,复制它的文件名“SIMLI.TTF”
3、然后编辑代码,把字体文件换成这个

1 public static void main(String[] args)throws IOException, DocumentException{ 2 Document document = new Document(); 3 OutputStream os = new FileOutputStream(new File("D:/hello99.pdf")); 4 PdfWriter.getInstance(document,os); 5 document.open(); 6 7 //C:/Windows/Fonts/seguisym.ttf 8 BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/seguisym.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); 9 com.itextpdf.text.Font font = new com.itextpdf.text.Font(baseFont, 12); 10 11 document.add(new Paragraph("☑",font)); 12 document.add(new Paragraph("✓",font)); 13 document.close(); 14 }
4、运行,然后找到生成的PDF文件,打开它
5. 以上步驟只是完成了Itex导出PDF文件时显示特殊字符,但是通过freemarker渲染后转成的PDF还是没办法显示
此时需要在对应的ftl也配置上对应的字体
5.1 先自定义字体

1 /*自定义字体*/ 2 @font-face { 3 font-family: 'Segoe UI Symbol'; 4 src: url('../fonts/seguisym.ttf') format('truetype'); 5 font-weight: normal; 6 font-style: normal; 7 } 8 9 /*引入字体样式*/ 10 .symbol-text { 11 font-family: 'Segoe UI Symbol', sans-serif; 12 }
5.1 ftl引入字体样式
<span class="symbol-text">✓</span>
6. 在java代码中将字体样式嵌入itext中

1 public String createPdfByHtml(final String html) throws Exception { 2 String outputFile = getTempName(pdfFileRootDir, PDF_SUFFIX_NAME); 3 File filePath = new File(pdfFileRootDir); 4 5 if (!filePath.exists()) { 6 filePath.mkdirs(); 7 } 8 OutputStream os = null; 9 ITextRenderer renderer = null; 10 try { 11 os = new FileOutputStream(outputFile); 12 renderer = new ITextRenderer(); 13 renderer.setDocumentFromString(html); 14 ITextFontResolver fontResolver = renderer.getFontResolver(); 15 fontResolver.addFont(buildAbsoluteFilePath("FONT") + MINGLIU, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 16 fontResolver.addFont(buildAbsoluteFilePath("FONT") + MINGLIUB, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 17 fontResolver.addFont(buildAbsoluteFilePath("FONT") + FANGSONGGB2312, BaseFont.IDENTITY_H, 18 BaseFont.NOT_EMBEDDED);// 仿宋_GB2312 19 fontResolver.addFont(buildAbsoluteFilePath("FONT") + HUAWENZHONGSONG, BaseFont.IDENTITY_H, 20 BaseFont.NOT_EMBEDDED);// 华文中宋 21 fontResolver.addFont(buildAbsoluteFilePath("FONT") + SIMSUN, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 22 fontResolver.addFont(buildAbsoluteFilePath("FONT") + MSYH, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 23 fontResolver.addFont(buildAbsoluteFilePath("FONT") + FZXIAOBIAOSONG_B05S, BaseFont.IDENTITY_H, 24 BaseFont.NOT_EMBEDDED); 25 // 字体包 26 fontResolver.addFont(buildAbsoluteFilePath("FONT") + SIMHEI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 27 // 黑体 28 fontResolver.addFont(buildAbsoluteFilePath("FONT") + ARIAL, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 29 // Arail 30 fontResolver.addFont(buildAbsoluteFilePath("FONT") + ARIAL_B, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); // Arail 31 fontResolver.addFont(buildAbsoluteFilePath("FONT") + ARIAL_I, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); // Arail 32 // Times New Roman 33 fontResolver.addFont(buildAbsoluteFilePath("FONT") + TIMES, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 34 // Times New Roman 35 fontResolver.addFont(buildAbsoluteFilePath("FONT") + TIMES_B, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 36 fontResolver.addFont(buildAbsoluteFilePath("FONT") + JDHEI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 37 fontResolver.addFont(buildAbsoluteFilePath("FONT") + MSHEI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 38 fontResolver.addFont(buildAbsoluteFilePath("FONT") + STXINGKAI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 39 fontResolver.addFont(buildAbsoluteFilePath("FONT") + KAITI, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 40 fontResolver.addFont(buildAbsoluteFilePath("FONT")+SEGUISYM, BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); 41 42 renderer.layout(); 43 renderer.createPDF(os); 44 os.flush(); 45 46 // 返回生成PDF文件的路径和名字 ,以保存数据库 47 return outputFile; 48 } catch (Exception e) { 49 // PDF生成失败,需要将临时文件删除 50 PDFUtil.deleteFile(outputFile); 51 throw new ServiceException("html转化pdf异常:xml = " + html); 52 } finally { 53 // os.close(); 54 os = null; 55 renderer = null; 56 } 57 58 }
7. 最后导出PDF看下