Java 通过aspose.words 把docx文件转成pdf文件后中文变成小方块的解决方法

本文讲述了如何解决Java通过Aspose.Words将Word文档转换为PDF时,中文显示为小方块的问题,原因在于服务器缺少word中的相关字体。作者详细描述了如何上传宋体字体文件、调整权限、安装ttmkfdir并更新字体缓存的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 通过aspose.words 把docx转成pdf后中文变成小方块的解决方法.md

在有些应用场景中需要将word生成pdf,一开始以为是response的问题,设置了

response.setCharacterEncoding("UTF-8");

以后也没有效果,后来发现java中间生成的word文件是可以正常显示中文的,问题就出在word转pdf的过程中,几经测试,发现是服务器上没有word中的相关字体文件,那么就分两步走解决问题:

  1. 将字体文件上传到服务器上
  • 将windows操作系统上的字体文件(C:\WINDOWS\FONTS)拷贝出来,改字体文件名为:simsun.ttc。
  • 登录linux服务器,查看系统中包含哪些字体。
shell> fc-list

/usr/share/fonts/abattis-cantarell/Cantarell-Bold.otf: Cantarell:style=Bold

/usr/share/fonts/abattis-cantarell/Cantarell-Regular.otf: Cantarell:style=Regular

/usr/share/fonts/abattis-cantarell/Cantarell-Oblique.otf: Cantarell:style=Oblique

/usr/share/fonts/abattis-cantarell/Cantarell-BoldOblique.otf: Cantarell:style=BoldOblique

没有宋体字体。

  • 将字体文件(simsun.ttc)上传到目录/usr/share/fonts/chinese(如果目录不存在则创建目录)下。
  • 修改字体文件的权限。
shell> cd /usr/share/fonts/chinese

shell> chmod 755 simsun.ttc

安装ttmkfdir(如已安装,跳过)

shell> yum -y install ttmkfdir

搜索目录中所有的字体信息,汇总生成fonts.scale文件

shell> ttmkfdir /usr/share/fonts/chinese

刷新内存中的字体缓存。

shell> fc-cache

再次查看系统中包含哪些字体。

shell> fc-list

/usr/share/fonts/chinese/simsun.ttc: SimSun,宋体:style=Regular,常规

/usr/share/fonts/abattis-cantarell/Cantarell-Bold.otf: Cantarell:style=Bold

/usr/share/fonts/chinese/simsun.ttc: NSimSun,新宋体:style=Regular,常规

/usr/share/fonts/abattis-cantarell/Cantarell-Regular.otf: Cantarell:style=Regular

/usr/share/fonts/abattis-cantarell/Cantarell-Oblique.otf: Cantarell:style=Oblique

/usr/share/fonts/abattis-cantarell/Cantarell-BoldOblique.otf: Cantarell:style=BoldOblique

参考链接
2. 在代码中做如下设置


 // 新建一个空白pdf文档
File tempFilePDF = File.createTempFile("temp", ".pdf");

 if (operationSystemName.contains("nix") || operationSystemName.contains("nux") || operationSystemName.contains("mac")) {
  String[] fontsFolder = {"/usr/share/fonts"};
  FontSettings.setFontsFolders(fontsFolder,true );
}

 os = new FileOutputStream(tempFilePDF);
Document doc = new Document(tempFileDocx.getAbsolutePath());
doc.save(os, SaveFormat.PDF);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值