关于Java项目用aspose word转pdf在Linux环境乱码问题

jar包之前使用的是 这是pdf在Linux上显示的问题,都是方格,开始以为是乱码问题,后来查了一下,说是在Linux上没加载到中文字体,然后把用到的字体包从windows的C:WindowsFonts里找出来,复制到linux的/usr/share/fonts/windows-fonts下然后就是其他博客的那些,刷新字体# fc-cache。不生效重启服务器 # reboot。,刷新了一下服务器,感觉还是没起效果,于是,又开始查找,终于找到一个,说可能是没有读到字体,于是: package com.shineyoo.common.utils.wordtopdf;

import com.aspose.words.Document; import com.aspose.words.FontSettings; import com.aspose.words.License; import com.aspose.words.SaveFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileOutputStream;

public class Doc2PdfUtil { private static Logger logger = LoggerFactory.getLogger(Doc2PdfUtil.class);

/**
 * doc转pdf
 *
 * @param docPath doc文件路径,包含.doc
 * @param pdfPath pdf文件路径,包含.pdf
 * @return
 */
public static File doc2Pdf(String docPath, String pdfPath) {
    System.out.println("pdfPath = "+pdfPath);
    System.out.println("pdfPath = "+pdfPath);
    File pdfFile = new File(pdfPath);
    //判断是否windows系统,Linux要读取字体,否则pdf字体为方格
    if(!OSinfo.isWindows()){
    //这是重点
        **FontSettings.getDefaultInstance().setFontsFolder(File.separator + "usr"
                + File.separator + "share" + File.separator + "fonts" +File.separator + "Fonts", true);**
    }
    try {
        String s = "<License><Data><Products><Product>Aspose.Total for Java</Product><Product>Aspose.Words for Java</Product></Products><EditionType>Enterprise</EditionType><SubscriptionExpiry>20991231</SubscriptionExpiry><LicenseExpiry>20991231</LicenseExpiry><SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber></Data><Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature></License>";
        ByteArrayInputStream is = new ByteArrayInputStream(s.getBytes());
        License license = new License();
        license.setLicense(is);
        Document document = new Document(docPath);
        FileOutputStream fileOutputStream = new FileOutputStream(pdfFile);
        System.out.println("pdf文件:"+fileOutputStream);
        document.save(fileOutputStream, SaveFormat.PDF);
    } catch (Exception e) {
        logger.info("****aspose doc转pdf异常");
        e.printStackTrace();
    }
    return pdfFile;
}

}

将FontSettings.getDefaultInstance().setFontsFolder(File.separator + “usr” + File.separator + “share” + File.separator + “fonts” +File.separator + “Fonts”, true);这段放到读取文件之前,就可以了,怎么样,很简单吧!

经验分享 程序员 微信小程序 职场和发展