在使用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 }
View Code
4、运行,然后找到生成的PDF文件,打开它

- 以上步驟只是完成了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 }
View Code
5.1 ftl引入字体样式
<span class="symbol-text">✓</span>
- 在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 }
View Code
- 最后导出PDF看下
