FontSettings.getDefaultInstance().setFontsSources(new FontSourceBase[]
{
new SystemFontSource(),
new FolderFontSource(Test.class.getClassLoader().getResource("fonts").getPath(), true)
});
我使用以上代码设置字体源,在编辑器中测试正常,但是打成jar包放到服务器上会发现我设置的字体源文件夹无效
图片是我的字体目录
@yangcl107 您正在尝试从 JAR 或项目加载字体。 FolderFontSource 需要字体文件夹的绝对路径,并且不支持从 JAR 加载。 不幸的是,Aspose.Words 不读取打包到 JAR 或 WAR 中的字体。 因此,在您的情况下,您应该将字体复制到操作系统文件系统中,或者使用 StreamFontSource 或 MemoryFontSource 从 JAR 文件中获取字体并将其提供给 Aspose.Words。
谢谢,我尝试使用了 StreamFontSource,以下是我的代码,但似乎没有起效果,麻烦帮我看下哪里有问题
public static List<FileInputStream> loadFonts() {
List<FileInputStream> fontStreams = new ArrayList<>();
// 获取ClassLoader
ClassLoader classLoader = Test.class.getClassLoader();
// 获取resources/fonts目录下的所有文件
File fontsDirectory = new File(Objects.requireNonNull(classLoader.getResource("fonts")).getFile());
if (fontsDirectory.isDirectory()) {
File[] fontFiles = fontsDirectory.listFiles();
if (fontFiles != null) {
for (File fontFile : fontFiles) {
try {
FileInputStream fontStream = new FileInputStream(fontFile);
fontStreams.add(fontStream);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return fontStreams;
}
List<FontSourceBase> bases = new ArrayList<>();
loadFonts().forEach(a->{
FontSourceBase fontSource = new StreamFontSource() {
@Override
public InputStream openFontDataStream() throws Exception {
return a;
}
};
bases.add(fontSource);
});
FontSettings fontSettings = new FontSettings();
fontSettings.setFontsSources(bases.toArray(new FontSourceBase[0]));
@yangcl107 你有什么问题?是异常还是其他问题?如果可能的话,创建一个简单的应用程序来重现问题。
不是异常,看起来是没有设置成功,我设置字体是为了解决lunix下生成目录页码不对的问题。我将字体放在linux文件夹下,代码指定绝对路径时页码没问题,我用上述StreamFontSource时页码还是出现了问题,
@yangcl107 通常,classLoader.getResource 会询问字体名称,但不会询问字体文件夹。您在此处的结果正确吗?尝试只加载一种所需的字体,然后用页码检查结果。