poi-tl使用word转PDF,aspose转pdf,linux环境导出乱码问题

一、问题

? 在linux服务器使用aspose.word转换word文件为pdf的时候显示中文乱码,但是在windows本地环境上使用可以正常转换

二、原因

由于linux服务器缺少对应的字库导致文件转换出现乱码的

三、解决

1、第一种方案(参考以下)

aspose转pdf乱码问题_aspose word转pdf 乱码-CSDN博客

Word模板替换,并转PDF格式输出,Linux服务器乱码问题解决_poi-tl word转pdf乱码-CSDN博客

Linux系统Word转换图片或PDF,字体出现乱码_linux word转pdf中文乱码-CSDN博客

2、第二种方案

先去windows字体库,在目录:C:WindowsFonts下,将需要的字体拷贝到项目中对应的模块resources下

然后在word转PDF方法中指定字体的位置路径

@Slf4j
public class Word2PdfAsposeUtil {
private static boolean getLicense() {
        boolean result = false;
        try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("license.xml")) {
            // License的包路径必须为com.aspose.words.License
            License license = new License();
            license.setLicense(in);
            result = true;
        } catch (Exception e) {
            log.info(e.getMessage());
        }
        return result;
    }

public static void doc2pdf(OutputStream outputStream, HttpServletResponse response, String pdfName) throws IOException {
        if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
            return;
        }
        OutputStream out = response.getOutputStream();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ByteArrayInputStream byteArrayInputStream = null;
        try {
            long old = System.currentTimeMillis();
            response.setCharacterEncoding("utf-8");
            response.setHeader(
                    "Content-Disposition",
                    "attachment;filename=".concat(URLEncoder.encode(pdfName + ".pdf", StandardCharsets.UTF_8)));
            response.setContentType("application/pdf");
            byteArrayOutputStream = (ByteArrayOutputStream) outputStream;
            byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
            //解决Linux缺失字体乱码问题
            OsInfo osInfo = SystemUtil.getOsInfo();
            if(osInfo.isLinux()){
                FontSettings.setFontsFolder(Objects.requireNonNull(Word2PdfAsposeUtil.class.getClassLoader().getResource("fonts")).toURI().getPath(), true);
            }
            Document doc = new Document(byteArrayInputStream); // Address是将要被转化的word文档
            doc.save(out, SaveFormat.PDF);// 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF,
            IOUtils.copy(byteArrayInputStream, out);
            // EPUB, XPS, SWF 相互转换
            long now = System.currentTimeMillis();
            System.out.println("pdf转换成功,共耗时:" + ((now - old) / 1000.0) + "秒"); // 转化用时
        } catch (Exception e) {
            log.info(e.getMessage());
        }finally {
            if (out != null) {
                try {
                    out.flush();
                    PoitlIOUtils.closeQuietlyMulti(out, outputStream, byteArrayOutputStream, byteArrayInputStream);
                } catch (IOException e) {
                    log.info(e.getMessage());
                }
            }
        }
    }
}