原因
首先说下原因哈。这个其实比较简单,默认的Linux发行版其实都不会内置中文字体的。而找不到中文字体,乱码或者空白自然也就是正常的了。
解决办法
上传中文字体并手动设置路径
这是一种需要改代码的方式,具体操作就是将Windows字体文件夹(默认是C:\Windows\Fonts字体复制到linux中的文件夹)上传到Linux中,并在代码中指定。
具体方式是:
//word
com.aspose.words.FontSettings.getDefaultInstance().setFontsFolder(fontFolder, false);
//excel
com.aspose.cells.FontConfigs.setFontFolder(fontFolder, false);
//ppt
com.aspose.slides.FontsLoader.loadExternalFonts(new String[]{fontFolder});
另外有一点要注意:路径结尾必须带分隔符!!!
即必须是/data/fonts/这种,如果是写成/data/fonts的话,它会读取不到字体文件,转而读取系统上的默认字体。也就是说,仍然会是乱码。
安装中文字体
即然它会读取默认字体,那我们还不如直接安装呢,省的手抖了少个/还得去重新折腾。
- 首先你要有字体文件,ttf或者ttc格式的均可以我们可以从windows的 C:\WINDOWS\Fonts 这个目录下的字体文件复制出来,例如我们得到的字体文件是 segoui.ttf
- 将这个字体文件上传到随便一个Linux目录下。例如我们复制到/usr/share/fonts/win这个目录下。
- 切换到我们上一步复制的字体所在的目录创建字体索引
sudo mkfontscale
该命令执行完之后可以发现在当前目录下生成了一个名为 fonts.scale 的文本文件
- 在目录中创建字体文件的索引
sudo mkfontdir
该命令执行完之后会在当前目录下生成名为 fonts.dir 的文本文件
- 构建字体信息缓存文件
sudo fc-cache
- 使用fc-list进行字体确认。这个命令会输入现在安装的所有字体。当我们看到我们上传的中文字体,再去执行aspose的代码就不会出现乱码了