我有一个文档,里面创建了一些画布,画布里面有一些汉字,我想用aspose.word将其转换为html。画布会转换成一张图片。
我在windows 10 上转换没有问题,图片都能正常转换成功
但是我将程序部署到服务器(linux)上,如果画布里面有中文就会乱码。而英文不会。
你好,
您需要在您的服务器上安装中文字体。您文件使用DengXian和SimSun字体,因此请在Linux服务器上安装它们
此外,您可能需要从Windows 10安装其他标准的中文字体,以便将来呈现其他文档。 在Windows 10上安装的标准中文字体列表您可以在此处找到: Font List Windows 10 - Typography | Microsoft Learn
请确保Aspose.Words可以在Linux系统上找到字体。
本文介绍了Aspose.Words查找字体的位置:
Aspose.Words 在 Linux 上寻找 TrueType 字体的地方
此外,您可以使用SetFontsFolder方法指定具有字体的自定义文件夹:
从文件夹加载字体
请尝试一下,让我知道它是怎样的。 谢谢。
我的服务器字体都在/usr/share/fonts/chinese/这个目录下。
我觉得应该不是字体的原因,因为同样的字体,在画布里面转换都成了方框,不在画布里能够正常识别并且转换成功。
而且这种方框很像是编码不对导致的,转换的时候没有使用utf-8?
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);
你好,我刚用你的方法尝试过了,设置了字体的文件夹路径。和我之前没设置字体路径试一样的。
我个人认为,如果是因为字体的原因,为什么在画布外的能正常识别转换,而在画布里面就不可以。
将文档转换为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);
指定了相同的代码,但使用字体的位置:
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容器里了。转出来的图片没有乱码了。很感谢这几天你的帮忙。不好意思,麻烦你了