在外网环境写了个导出PDF的demo可以正常导出PDF,也可以正常展示中文,但是当我把代码移植到内网服务器上时,导出的PDF不能正常展示中文,日志也没有打印异常,于是就用源码执行看看什么原因,排查过程:

首先,查看工具类,发现中文是读取的外部文件,

随后读取文件加载到字体列表:

*** 字体所在目录*/private static final String FONT_RESOURCE_DIR = "/font";/*** @param htmlContent html文本* @param dest        目的文件路径,如 /xxx/xxx.pdf* @param imgBaseUri 图片所在资源目录,可为null* @throws IOException IO异常*/public static void createPdf(String htmlContent, String dest,String imgBaseUri) throws IOException {ConverterProperties props = new ConverterProperties();// props.setCharset("UFT-8"); 编码FontProvider fp = new FontProvider();fp.addStandardPdfFonts();// .ttf 字体所在目录String resources = Html2PdfUtil.class.getResource(FONT_RESOURCE_DIR).getPath();System.out.println(resources);fp.addDirectory(resources);props.setFontProvider(fp);
。。。

于是接下来就一路debug这个方法:fp.addDirectory(resources),在跟踪到FontSet类的如下方法时,发现else if中明明读取的后缀是“.ttf”却不进此分支,应该是addFont(file)方法出错了:

/*** Add all the fonts in a directory and possibly its subdirectories.** @param dir                path to directory.* @param scanSubdirectories recursively scan subdirectories if {@code true}.* @return number of added fonts.*/public int addDirectory(String dir, boolean scanSubdirectories) {int count = 0;String[] files = FileUtil.listFilesInDirectory(dir, scanSubdirectories);if (files == null)return 0;for (String file : files) {try {String suffix = file.length() < 4 ? null : file.substring(file.length() - 4).toLowerCase();if (".afm".equals(suffix) || ".pfm".equals(suffix)) {// Add only Type 1 fonts with matching .pfb files.String pfb = file.substring(0, file.length() - 4) + ".pfb";if (FileUtil.fileExists(pfb) && addFont(file)) {count++;}} else if ((".ttf".equals(suffix) || ".otf".equals(suffix) || ".ttc".equals(suffix))&& addFont(file)) {count++;}

继续跟下去,找到FontInfo类的create方法,在执行fetchDescriptor(fontName)方法返回null:

static FontInfo create(String fontName, String encoding, String alias, Range range) {FontCacheKey cacheKey = FontCacheKey.create(fontName);FontProgramDescriptor descriptor = getFontNamesFromCache(cacheKey);if (descriptor == null) {descriptor = FontProgramDescriptorFactory.fetchDescriptor(fontName);putFontNamesToCache(cacheKey, descriptor);}return descriptor != null ? new FontInfo(fontName, null, encoding, descriptor, range, alias) : null;}

再接下去就是获取文件内容之类的了,再上面看到截图中ttf文件是编译了的,再点开war包中的ttf文件,显示:

另一个字体文件simsun.ttf,其实主要用到的是字体文件simsun.ttf,于是把源文件复制到war包中,再启动程序,导出pdf,正常:

查找解决使用html2pdf插件导出PDF不展示中文的问题相关推荐

  1. bootstrap table export插件导出pdf格式文件中文乱码问题解决办法

    bootstrap table export插件导出pdf格式文件中文乱码的问题折腾了我整整两天,网上到处都是改源码,自己设置字体的方案,我都没搞定.结果今天看到官方文档(地址:GitHub - hh ...

  2. 解决Angular Kendo UI 导出PDF中文乱码

    在使用 Kendo UI for Angular 的 PDFExportComponent 组件时,如果内容是中文则导出PDF将会出现乱码,网上许多人认为是官方不支持中文,但其实不然,阅读文档 The ...

  3. Jasperreport导出pdf内容展示不完全处理

    [+] 场景 测试过程发现,尽管已经设置如下配置: Position Type : Fix Relative to Top Stretch Type:Relative to  Band Height ...

  4. java 使用itext导出PDF文件,中文不显示问题解决

    之前写的java 使用itext 导出pdf 发现有个问题,在今天使用的时候,发现一个问题,就是当单元格中写中文的时候,导出来的pdf中文不显示. java 使用itext导出PDF文件,图片文字左右 ...

  5. pd4ml技术html导出pdf,支持中文,兼容Linux

    java html导出pdf的文章有很多大多都使用的是itext,其实用过的都知道itext有时并不能满足我们的需求,不能兼容html的样式,而且从html页面导出的图片到pdf中也并不好处理.Fly ...

  6. ITextRenderer导出pdf不显示中文

    ITextRenderer freemarker 生成pdf demo,并解决中文不显示的问题 package com.pdf;import com.lowagie.text.DocumentExce ...

  7. echarts 图表导出PDF(带滚动条)/图片导出PDF

    echarts 图表导出PDF[带滚动条]/图片导出PDF 效果展示 提出问题 思考问题 解决问题 导出PDF 里面的页头中文乱码问题 参数说明 效果展示 提出问题 在开发过程中,有需求是将展示出来的 ...

  8. VScode+MarkDown导出PDF图片显示问题

    问题 Windows10下使用VScode写MarkDown,但是在使用本地图片时在预览窗口可以完整显示图片,但是在用MarkDown-PDF插件导出PDF后,发现图片没有显示,以下是我导入图片时使用 ...

  9. PDF怎么支持中文 KendoUI 导出PDF

    大家好,我是米娅 我尝试了很多种kendo 上PDF的导出,包括Grid与整个div界面.都不支持中文,它官网上面的都是支持英文的,我导出的中文都是这种(□□□)方框,数字和英文字符都能正确的导出, ...

最新文章

  1. 误删oracle数据库文件,误删Oracle数据文件导致数据库无法打开
  2. python数据预测_python时间序列预测股票走势
  3. 介绍Linux中cp直接覆盖不提示的方法
  4. android core log,Android 日志系统(Logcat)的实现分析
  5. 查看tomcat管理信息
  6. c++卸载工具_IIS修复IIS出现错误后如何完全卸载重装
  7. 一个init.php(网站启始)的一般信息
  8. BZOJ 1208 HNOI 2004 宠物收养所 splay
  9. Oracle的CaseWhen
  10. vscode 终端美化
  11. 电气simulink常用模块_支持PLC编程的5大电气语言,你会几种?
  12. codeforces 69A. Young Physicist
  13. body加背景图片没反应_body背景图片,给body加背景图片
  14. 使用决策树算法预测西瓜的好坏
  15. apache avro 简介
  16. U1C1 数据挖掘与文本分析的背景与实际应用
  17. 用户体验的模型:Whitney Quesenbery的5E原则
  18. 蒙特卡洛 c语言,从伪随机数的产生到高大上的蒙特卡洛算法(C语言实现)
  19. Java学习路线:day11 客户信息管理软件
  20. 微软模拟飞行10厦门航空涂装_《微软模拟飞行》海量附加内容!最真实的飞行体验...

热门文章

  1. 项目助理是打杂的吗_关于助理——那些你不知道的事
  2. windows live mail error message
  3. AI智能音箱技术方案开发
  4. Java毕设_双线自动闭塞集中联锁设信号员培训系统
  5. Linux 知识总结
  6. 郭富城《好舞蹈》献综艺首秀 称不愿随便结婚
  7. MySQL 慢日志分析工具Mysqldumpslow
  8. c语言求最大公因数和最小公倍数
  9. 对3721上网助手的一些疑问建议
  10. Android Studio 2.3后,找不到Launch Standalone SDK Manager