Java word转pdf丢失字体以及乱码问题解决

一、 java 项目在Linux环境下word转pdf文字丢失以及乱码问题

在这里插入图片描述例如这样的乱码

二、 问题原因

1. 因为linux系统没有word文本里面的字体文件,需要导入对应的字体文件。
2. java代码中FontSettings没有设置linux系统下的字体源路径。
字体文件路径:windows系统是在C:/Windows/Fonts/,linux系统是在/usr/share/fonts/

三、解决办法

示例代码(只展示fontSettings 相关代码)

import java.io.File;
import com.aspose.words.Document;
import com.aspose.words.FontSettings;
import com.aspose.words.SaveFormat;
import sun.awt.OSInfo;

public String docToPdf(String fdfsUrl) throws Exception {
		File dir = new File(fdfsUrl);
		//word文档
		Document doc = new Document(srcFile.getPath());
		//获取fontSettings 默认的字体设置
		FontSettings fontSettings = FontSettings.getDefaultInstance();
		/** 第一种 设置字体源路径 */
		//windows下的字体源文件路径
		String windowsFonts = "C:/Windows/Fonts/";
		//linux下的字体源文件路径
        String linuxFonts = "/usr/share/fonts/";
        String[] fontsFolders = new String[] {windowsFonts, linuxFonts};
        /** 
        参数说明:
        第一个参数String[] fontsFolders  字体源路径
		“SetFontsFolders”方法从我们作为第一个参数传递的每个字体目录创建字体源。
		第二个参数boolean recursive    是否递归
		false: 不递归任何目录子文件夹中的任何字体
		true: 包含我们传参的目录中的所有字体文件,以及其子目录中的所有字体
		*/
        fontSettings.setFontsFolders(fontsFolders, true);
        doc.setFontSettings(fontSettings);
        doc.save(os, SaveFormat.PDF);
		
		
		/** 第二种 根据不同的环境设置字体源路径 */
		String osType=String.valueOf(OSInfo.getOSType());
		String fonts [] = null;
		if(osType.equals("Linux")){
			//设置字体文件路径
			//fonts = new String[]{"/usr/share/fonts/"};
			//也可以设置指定字体文件
			fonts = new String[]{"/usr/share/fonts/chinese/","/usr/share/fonts/simsun/","/usr/share/fonts/black/","/usr/share/fonts/wingdings/"};
		}else if(osType.equals("Windows")){
			fonts = new String[]{"C:/Windows/Fonts/chinese/","C:/Windows/Fonts/simsun/","C:/Windows/Fonts/black/","C:/Windows/Fonts/wingdings/"};
		}
		doc.save(os, SaveFormat.PDF);
		//上传pdf文件
		String fileUrl = this.uploadFile(new FileInputStream(file), file.length(), "pdf");
		//返回pdf文件路径
		return fileUrl ;
}

Liunx系统导入字体文件:

  1. 找到C:\Windows下面的Fonts文件夹,将整个文件夹移到Linux环境的/usr/share/fonts目录下,再将Fonts文件夹改名为Chinese(也可以取别的名字)

  2. 在liunx系统下执行:
    sudo chmod 755 /usr/share/fonts/Chinese/*(更改这些字体库的权限)

  3. cd /usr/share/fonts/Chinese/

  4. sudo mkfontscale (创建字体的fonts.scale文件,它用来控制字体旋转缩放)

  5. sudo mkfontdir (创建字体的fonts.dir文件,它用来控制字体粗斜体产生)

  6. sudo fc-cache(刷新字体缓存)

四、参考或相关文章:

ASPOSE SetFontsFolders方法说明
Lunix系统导入字体文件以及字体文件授权

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值