使用最新版本20.12.0的Aspose.Words 在 linux上面的渲染出来的图片跟源文档是不一样的,如下图所示
image.png (61.0 KB)
在Windows10上面渲染出来的就是正常的,如下图所示
image.png (22.9 KB)
贴上源文档
2020数学试卷92.zip (603.3 KB)
使用最新版本20.12.0的Aspose.Words 在 linux上面的渲染出来的图片跟源文档是不一样的,如下图所示
image.png (61.0 KB)
在Windows10上面渲染出来的就是正常的,如下图所示
image.png (22.9 KB)
贴上源文档
2020数学试卷92.zip (603.3 KB)
应该是字体原因,但是我在linux上安装了相应的字体【 MT Extra】,还是转换的有问题,请问要怎么设置呢?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" fill-rule="evenodd" height="0.20833333333333334in" preserveAspectRatio="none" stroke-linecap="round" viewBox="0 0 1248 480" width="0.5416666666666666in">
<style type="text/css">
.brush0 { fill: rgb(255,255,255); }
.pen0 { stroke: rgb(0,0,0); stroke-width: 1; stroke-linejoin: round; }
.font0 { font-size: 303px; font-family: "Times New Roman", serif; }
.font1 { font-style: italic; font-size: 303px; font-family: "Times New Roman", serif; }
.font2 { font-size: 274px; font-family: Symbol, serif; }
.font3 { font-size: 336px; font-family: "MT Extra", serif; }
.font4 { font-weight: bold; font-size: 16px; font-family: System, sans-serif; }
</style>
<g>
<text class="font0" fill="rgb(0,0,0)" stroke="none" style="dominant-baseline: alphabetic;" x="846 1014" xml:lang="en" xml:space="preserve" y="384">10</text>
<text class="font1" fill="rgb(0,0,0)" stroke="none" style="dominant-baseline: alphabetic;" x="59 345" xml:lang="en" xml:space="preserve" y="384">ab</text>
<text class="font2" fill="rgb(0,0,0)" stroke="none" style="dominant-baseline: alphabetic;" x="619" xml:space="preserve" y="384">=</text>
<text class="font3" fill="rgb(0,0,0)" stroke="none" style="dominant-baseline: alphabetic;" x="392" xml:space="preserve" y="91">r</text>
<text class="font3" fill="rgb(0,0,0)" stroke="none" style="dominant-baseline: alphabetic;" x="93" xml:space="preserve" y="175">r</text>
<text class="font3" fill="rgb(0,0,0)" stroke="none" style="dominant-baseline: alphabetic;" x="245" xml:space="preserve" y="384">g</text>
</g>
</svg>
现在我又安装了一些需要的字体,比如Symbol ,sans-serif等,图片可以正常渲染出来,但是还是跟Windows有差距。需要设置些什么吗?
下面这些是linux上面渲染的图片
image.png (531 Bytes)
image.png (711 Bytes)
下面这些是Windows上面渲染的图片
image.png (564 Bytes)
image.png (735 Bytes)
上面有差异的图片只是一部分,还有很多。
您需要在将文档转换为HTML的计算机上安装文档中使用的字体。请在最后尝试以下代码示例,并检查是否缺少任何字体警告消息。
Document doc = new Document(MyDir + "input.docx");
doc.setWarningCallback(new com.aspose.words.IWarningCallback() {
@Override
public void warning(com.aspose.words.WarningInfo warningInfo) {
if(warningInfo.getWarningType() == WarningType.FONT_SUBSTITUTION)
System.out.println(warningInfo.getDescription());
}
});
doc.save(MyDir + "output.html");
如果仍然遇到问题,请共享Java版本并在此处附加有问题的输出HTML,以供我们参考。 我们将调查此问题,并为您提供更多信息。
我使用上述代码,的确会提示有一些字体不存在,但是我有以下疑惑:
是的,您可以在MS Word文档中嵌入字体,然后将文档转换为PDF。
我们建议您阅读以下有关使用真型字体的文章。
在Linux上安装TrueType字体
指定TrueType字体位置
处理和替代TrueType字体
我是需要转成HTML,不是PDF。
我看过关于字体的文章,然后还是有以上的问题。好像不能解决Windows和Linux不一致的情况。
您那边能使用源文档转一份HTML格式的文件让我对比一下看看吗?
由于缺少字体,您遇到了这个问题。 Aspose.Words在字体转换为HTML时需要字体。
数学方程式将保存到输出文档中的图像中,并且为了渲染图像,Aspose.Words需要字体。 请在Windows操作系统的MS Word中打开您的文档,然后将字体嵌入字体中。 之后,在Linux上使用此代码将DOC转换为HTML。 您将获得正确的输出。
Word文档是用户上传的,不受控制的,所以您说的方案是无法实施的。
有其他可行的替代方案吗?
已经安装了对应的字体还是不行。
字体名称:Cambria Math
Windows上面有,而且渲染的正常,但是linux安装了【Cambria Math】这款字体后就不行。
而且Linux我也在 /usr/share/fonts/下面安装的字体
我们已经通过使用最新版本的Aspose.Words for Java 21.1从Windows将Font文件夹复制到Linux操作系统来测试该方案。 我们找不到共享的问题。 因此,请使用 Aspose.Words for Java 21.1。 我们在这篇文章中随附了输出HTML,以供您参考。
out.zip (390.5 KB)
您可以将字体从Windows计算机复制到Linux并设置字体资源,如下所示。
Document doc = new Document(MyDir + "input.docx");
ArrayList fontSources = new ArrayList(Arrays.asList(FontSettings.getDefaultInstance().getFontsSources()));
// Add a new folder source which will instruct Aspose.Words to search the following folder for fonts
FolderFontSource folderFontSource = new FolderFontSource("... path to fonts folder...", true);
// Add the custom folder which contains our fonts to the list of existing font sources
fontSources.add(folderFontSource);
// Convert the ArrayList of source back into a primitive array of FontSource objects
FontSourceBase[] updatedFontSources = (FontSourceBase[]) fontSources.toArray(new FontSourceBase[fontSources.size()]);
// Apply the new set of font sources to use
FontSettings.getDefaultInstance().setFontsSources(updatedFontSources);
doc.save(MyDir + "output.html");