fix: word转PDF字体目录补充Windows系统字体目录

- setFontsFolders 会替换 aspose 的默认字体源,原配置只有 Linux 路径
  (/usr/share/fonts),Windows 服务器上 aspose 找不到任何系统字体,
  全部替换为内置 Fanwood(无中文字形),转换出的 PDF 中文全部为方框
- 字体目录加入 C:\Windows\Fonts(保留 Linux 路径兼容),修复后
  PDF 正确嵌入宋体子集,中文正常显示
main
chenyuan 4 hours ago
parent e2f550de99
commit 2ca158d330

@ -11,6 +11,8 @@ import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import org.apache.poi.hslf.usermodel.*;
import org.apache.poi.xslf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.awt.*;
import java.awt.image.BufferedImage;
@ -32,6 +34,8 @@ import static com.sztzjy.linkCommerce.util.pdfUtils.PDFConvertUtil.TypeEnum.*;
*/
public final class PDFConvertUtil {
private static final Logger log = LoggerFactory.getLogger(PDFConvertUtil.class);
final private static Map<TypeEnum, List<String>> types = new HashMap<>();
public static enum TypeEnum {
@ -122,14 +126,18 @@ public final class PDFConvertUtil {
// 验证License 若不验证则转化出的pdf文档会有水印产生
if (!getLicense()) {
log.warn("word转PDF失败:Aspose License 校验未通过");
return false;
}
try {
//此处处理乱码和小方块
//如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题
//指定文件库内容路径
// 字体目录同时包含 Windows 系统字体与 Linux 常见目录:
// setFontsFolders 会替换 aspose 的默认字体源,漏掉 Windows 字体目录时
// 宋体等中文字体不可见,转换出的 PDF 中文全部变成方框
FontSettings.getDefaultInstance().setFontsFolders(
new String[] {"/usr/share/fonts", "/usr/share/fonts/win"}
new String[] {"C:\\Windows\\Fonts", "/usr/share/fonts", "/usr/share/fonts/win"}
, true);
// 将源文件保存在com.aspose.words.Document中,具体的转换格式依靠里面的save方法
com.aspose.words.Document doc = new com.aspose.words.Document(inputStream);
@ -139,7 +147,7 @@ public final class PDFConvertUtil {
System.out.println("word转换完毕");
} catch (Exception e) {
e.printStackTrace();
log.warn("word转PDF异常", e);
return false;
}finally {
closeOutput(outputStream);
@ -208,7 +216,7 @@ public final class PDFConvertUtil {
aposeLic.setLicense(is);
result = true;
} catch (Exception e) {
e.printStackTrace();
log.warn("Aspose Words License 加载异常", e);
}
return result;
}
@ -225,8 +233,11 @@ public final class PDFConvertUtil {
//此处处理乱码和小方块
//如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题
//指定文件库内容路径
// 字体目录同时包含 Windows 系统字体与 Linux 常见目录:
// setFontsFolders 会替换 aspose 的默认字体源,漏掉 Windows 字体目录时
// 宋体等中文字体不可见,转换出的 PDF 中文全部变成方框
FontSettings.getDefaultInstance().setFontsFolders(
new String[] {"/usr/share/fonts", "/usr/share/fonts/win"}
new String[] {"C:\\Windows\\Fonts", "/usr/share/fonts", "/usr/share/fonts/win"}
, true);
// 原始excel路径
com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook(inputStream);
@ -329,8 +340,11 @@ public final class PDFConvertUtil {
//此处处理乱码和小方块
//如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题
//指定文件库内容路径
// 字体目录同时包含 Windows 系统字体与 Linux 常见目录:
// setFontsFolders 会替换 aspose 的默认字体源,漏掉 Windows 字体目录时
// 宋体等中文字体不可见,转换出的 PDF 中文全部变成方框
FontSettings.getDefaultInstance().setFontsFolders(
new String[] {"/usr/share/fonts", "/usr/share/fonts/win"}
new String[] {"C:\\Windows\\Fonts", "/usr/share/fonts", "/usr/share/fonts/win"}
, true);
hslfSlideShow = new HSLFSlideShow(inputStream);
@ -411,8 +425,11 @@ public final class PDFConvertUtil {
//此处处理乱码和小方块
//如果在本地运行,此处报错,请注释这个这是字体,主要是为了解决linux环境下面运行jar时找不到中文字体的问题
//指定文件库内容路径
// 字体目录同时包含 Windows 系统字体与 Linux 常见目录:
// setFontsFolders 会替换 aspose 的默认字体源,漏掉 Windows 字体目录时
// 宋体等中文字体不可见,转换出的 PDF 中文全部变成方框
FontSettings.getDefaultInstance().setFontsFolders(
new String[] {"/usr/share/fonts", "/usr/share/fonts/win"}
new String[] {"C:\\Windows\\Fonts", "/usr/share/fonts", "/usr/share/fonts/win"}
, true);
slideShow = new XMLSlideShow(inputStream);

Loading…
Cancel
Save