我们用的java 版本 aspose,用于将word 转换为pdf,windows 下中文正常,linux 中文显示为方块,是因为linux 下没有中文字体或者 docker 容器中没有中文字体导致的
乱码解决方法:
1. linux 配置中文字体(适用于宿主机直接跑java 程序的方式)
#CentOS字体所在目录为/usr/share/fonts,在该目录下新建文件夹chinese, su root mkdir /usr/share/fonts/chinese cd /usr/share/fonts/chinese #安装字体 yum install mkfontscale yum install fontconfig mkfontscale mkfontdir fc-cache -fv #重启系统或者source /etc/profile。
2. docker 容器映射中文字体(前提是主机存在中文字体)
# 直接将字体映射到容器 docker run -d --restart=always -v /etc/localtime:/etc/localtime -v /usr/share/fonts:/usr/share/fonts --name test --net=host test
表格被压缩问题处理
首先需要用aspose 读取出word 文档的内容,哪个表格出问题就解决哪个表格的适应就行
public static void doc2pdf(String wordPath, String pdfPath) throws Exception { /* * // 验证License 若不验证则转化出的pdf文档会有水印产生 if */ AsposeLicenseHelper.getWordsLicense(); // 转换开始前时间 long old = System.currentTimeMillis(); // 新建的PDF文件路径 File file = new File(pdfPath); FileOutputStream os = new FileOutputStream(file); // 要转换的word文档的路径 Document doc = new Document(wordPath); // 设置表格自适应,根据内容自适应,否则表格多了转pdf 会挤压在一起 ,简单示例,取word 中的第3个表格 Node node=doc.getChild(NodeType.TABLE,2,true); Table table=(Table) node; table.autoFit(AutoFitBehavior.AUTO_FIT_TO_CONTENTS);// 设置表格根据内容自适应 doc.updateFields(); // 相互转换 doc.save(os, com.aspose.words.SaveFormat.PDF); // 转换结束后时间 long now = System.currentTimeMillis(); os.close(); System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒"); }