Aspose.Word For Java word转html画布的问题

我有一个文档,里面创建了一些画布,画布里面有一些汉字,我想用aspose.word将其转换为html。画布会转换成一张图片。
我在windows 10 上转换没有问题,图片都能正常转换成功
但是我将程序部署到服务器(linux)上,如果画布里面有中文就会乱码。而英文不会。

eg.zip (21.4 KB)
这里面有我的程序代码截图和异常结果截图,还有原始word文档。
请问是我的代码有问题还是我服务器缺少什么东西

你好,

您需要在您的服务器上安装中文字体。您文件使用DengXian和SimSun字体,因此请在Linux服务器上安装它们

此外,您可能需要从Windows 10安装其他标准的中文字体,以便将来呈现其他文档。 在Windows 10上安装的标准中文字体列表您可以在此处找到: Font List Windows 10 - Typography | Microsoft Learn

我看了一下,发现我的服务器上有等线的字体image.png (936 Bytes)
image.png (603 Bytes)
然后我改了画布里面的文本字体几种都试了,转出来的都是乱码

image.png (809 Bytes)
宋体也是有的

请确保Aspose.Words可以在Linux系统上找到字体。

本文介绍了Aspose.Words查找字体的位置:
Aspose.Words 在 Linux 上寻找 TrueType 字体的地方

此外,您可以使用SetFontsFolder方法指定具有字体的自定义文件夹:
从文件夹加载字体

请尝试一下,让我知道它是怎样的。 谢谢。

我的服务器字体都在/usr/share/fonts/chinese/这个目录下。
我觉得应该不是字体的原因,因为同样的字体,在画布里面转换都成了方框,不在画布里能够正常识别并且转换成功。
而且这种方框很像是编码不对导致的,转换的时候没有使用utf-8?

image.png (16.9 KB)

Aspose.Words 与 UTF-8 一起正常工作。 您在第一条消息中写道,在 Windows 上将此文档转换为 HTML 没有问题。 所以,这里没有问题。

Aspose.Words 转换页面中包含 English, hello word! 的部分 和宋体图像。 对于那个 Aspose.Words 应该采用一种字体,从该字体中获取一个字母的图片并在图像中绘制该字母。 如果找不到字体,或者字体不包含字母的图片,Aspose.Words 将绘制正方形。

请尝试通过 SetFontFolder 方法指定字体文件夹:

Document doc = new Document(inputPath);
HtmlSaveOptions options = new HtmlSaveOptions();
options.setExportHeadersFootersMode(ExportHeadersFootersMode.NONE);
options.setSaveFormat(SaveFormat.HTML);

FontSettings fontsettings = FontSettings.getDefaultInstance();
fontsettings.setFontsFolder("/usr/share/fonts/chinese", true);
doc.setFontSettings(fontsettings);

doc.save(outputPath, options);

你好,我刚用你的方法尝试过了,设置了字体的文件夹路径。和我之前没设置字体路径试一样的。
我个人认为,如果是因为字体的原因,为什么在画布外的能正常识别转换,而在画布里面就不可以。

@590smile,

将文档转换为HTML时,Aspose.Words将TextBox呈现为PNG,文本“画布后面的字”仍然是标记中的文本。

我用绿色标记了下面的文本框,文本“画布后面的字”标记为红色。

浏览器使用其设置来查找所需的字体以呈现文本“画布后面的字”。

如果无法找到指定的字体,浏览器可以使用不同的字体。
在此示例中,浏览器使用“Microsoft Yahei”来渲染文本“画布后面的字”。 我用棕色线条标记了这种情况。


如果将文档转换为没有正确字体的PNG或PDF,则所有汉字都将作为正方形呈现。 例如:
ImageSaveOptions options = new ImageSaveOptions(SaveFormat.PNG);
options.setResolution(600f);

Document doc = new Document(inputPath);
doc.save("out.nofonts.png", options);

out.nofonts.png

指定了相同的代码,但使用字体的位置:

ImageSaveOptions options = new ImageSaveOptions(SaveFormat.PNG);
options.setResolution(600f);

Document doc = new Document(inputPath);

FontSettings fontsettings = FontSettings.getDefaultInstance();
fontsettings.setFontsFolder("/usr/share/fonts/chinese", true);
doc.setFontSettings(fontsettings);

doc.save("out.withfonts.png", options);

out.withfonts.png (172.1 KB)

你好,因为我的项目是部署到docker容器里的。我没有把字体装到docker容器里面,只装在服务器的电脑上,所以一直乱码。现在我已经把字体装到docker容器里了。转出来的图片没有乱码了。很感谢这几天你的帮忙。不好意思,麻烦你了