Aspose.Word字体样式问题

我们使用贵公司产品把Word转换为Html
因为交付给客户时不能带商业字体,所以我们内嵌了思源系列的开源字体,并配置了字体替换规则
Test.zip (3.1 MB)

附件中的文件有三个问题
1、A005文件的绿色字错位
2、A005表格中的文字显示不全
3、A008的文字显示不全,线条错乱
复制Simsun字体有改善,但仍存在问题

我们的转换代码为
Document document = new Document(sourceFileName);

HtmlFixedSaveOptions options = new HtmlFixedSaveOptions();

options.setUseTargetMachineFonts( false );

options.setUseHighQualityRendering( true );

options.setEncoding(Charset. forName (“UTF-8”));

options.setExportEmbeddedFonts( true );

document.save(targetFileName, options);

字体替换规则为
String defaultSong = “思源宋体 CN”;//Source Han Sans CN
String defaultHei = “思源黑体 CN”;//Source Han Serif CN
String defaultFont = defaultSong;

	Map<String,String> fontMapping = new HashMap<String,String>();
	fontMapping.put("微软雅黑", defaultHei);
	fontMapping.put("微软雅黑 Bold", defaultHei);
	fontMapping.put("华文西黑", defaultHei);
	fontMapping.put("STXihei", defaultHei);
	fontMapping.put("仿宋", defaultSong);
	fontMapping.put("宋体", defaultSong);	
	fontMapping.put("Arial", defaultSong);
	fontMapping.put("幼圆", defaultSong);
	fontMapping.put("MS Mincho", defaultHei);

// word

FontSettings fontSettings = FontSettings. getDefaultInstance ();

fontSettings.setDefaultFontName(defaultFont);

fontSettings.setFontsFolder(fontFolder, false );

fontSettings.setEnableFontSubstitution( true );

for (Map.Entry<String, String> e :fontMapping.entrySet()) {

fontSettings.addFontSubstitutes(e.getKey(), e.getValue());

}

@wangwenyou

请压缩并附上用于测试此案例的字体。 我们将调查此问题并为您提供有关查询的更多信息。

请在linux环境下验证,以排除Simsun字体的干扰
太大了,上传不上来,我把用到的部分上传上来吧SourceHanSerifCN-Regular.zip (9.0 MB)

@wangwenyou

不幸的是,我们没有思源系列的开源字体。 我们需要这些字体来测试你的情况。 您可以通过Dropbox共享字体。

还请分享您的工作环境,例如 操作系统,Java版本等

谢谢你的合作。

字体见上一条回复SourceHanSerifCN-Regular.zip (9.0 MB)
操作系统为
CentOS Linux release 7.4.1708 (Core)
Java™ SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot™ 64-Bit Server VM (build 25.131-b11, mixed mode)

@wangwenyou

我们已将Simsun字体复制到fonts文件夹中,并使用共享代码和字体测试了该场景。 我们没有发现文档A005.doc的任何问题。 请检查附带的输出文件。Docs.zip (43.8 KB)

与FontSettings相关的API已更改。 请检查下面的修改代码。

String defaultSong = "思源宋体 CN";//Source Han Sans CN
String defaultHei = "思源黑体 CN";//Source Han Serif CN
String defaultFont = defaultSong;

Map<String,String> fontMapping = new HashMap<String,String>();
fontMapping.put("微软雅黑", defaultHei);
fontMapping.put("微软雅黑 Bold", defaultHei);
fontMapping.put("华文西黑", defaultHei);
fontMapping.put("STXihei", defaultHei);
fontMapping.put("仿宋", defaultSong);
fontMapping.put("宋体", defaultSong);
fontMapping.put("Arial", defaultSong);
fontMapping.put("幼圆", defaultSong);
fontMapping.put("MS Mincho", defaultHei);

FontSettings fontSettings = FontSettings. getDefaultInstance();
fontSettings.getSubstitutionSettings().getDefaultFontSubstitution().setDefaultFontName(defaultFont);
fontSettings.setFontsFolder(MyDir + "SourceHanSerifCN-Regular(1)", false );

FontSettings.getDefaultInstance().getSubstitutionSettings().getFontInfoSubstitution().setEnabled(true);

for (Map.Entry<String, String> e :fontMapping.entrySet()) {
    fontSettings.getSubstitutionSettings().getTableSubstitution().addSubstitutes(e.getKey(), e.getValue());
}

Document document = new Document(MyDir + "A005.doc");
HtmlFixedSaveOptions options = new HtmlFixedSaveOptions();
options.setUseTargetMachineFonts( false );
options.setUseHighQualityRendering( true );
options.setEncoding(Charset. forName ("UTF-8"));
options.setExportEmbeddedFonts( true );

document.setWarningCallback(new IWarningCallback() {
    @Override
    public void warning(WarningInfo warningInfo) {
        System.out.println(warningInfo.getDescription());
    }
});
document.save(MyDir + "out\\19.3.html", options);

关于A008.doc,我们很快就会回来。

@wangwenyou

关于A008.doc,由于’Times New Roman’字体,您将面临此问题。 请使用此字体获取所需的输出。

非常感谢,我修改代码试试

@wangwenyou

如果您对Aspose.Words有任何疑问,请随时询问,我们将竭诚为您服务。

您好,修改了代码,问题仍然存在
我期望的效果是没有Simsun字体时能够尽可能不走样
复制Simsun或系统本身有Simsun时显示是正常的,我替换了思源和文泉驿等开源字体,都会存在这样的问题
我们产品会有很多私有化部署的客户,这些客户的操作系统差异很大,Simsun和微软雅黑字体都属于不可商用的,我们无法嵌入到产品中发布。因此,我们希望在客户原生操作系统中,通过我们的产品转换出来的效果起码能看,不丢失信息。这个表格里的有效文字都被截断看不到了。

@wangwenyou

请分享所有开源字体,例如 思源和温泉在这里进行进一步测试。 谢谢你的合作。

字体已上传到onedrive
https://onedrive.live.com/redir?resid=4057B7B1083C786F!3430&authkey=!ABkb-QnwnA4Vmfk&ithint=folder%2c

@wangwenyou

我们正在处理您的查询,并会尽快回复您。

@wangwenyou

我们在您的共享链接中没有找到思源的Siyuan和Wenquan等开源字体。 请分享’Times New Roman’的开源字体。

您好!Times New Roman不影响结果,只有思源和文泉驿影响结果
SourceHanSansCN为思源黑体,SourceHanSerifCN为思源宋体
wqy-*为文泉驿字体

@wangwenyou

对于文档(A005.doc),我们在问题跟踪系统中将此问题记录为 WORDSNET-18323. 解决此问题后,您将通过此论坛主题通知您。

对由您带来的不便,我们深表歉意。

@wangwenyou

通知您,您遇到的问题实际上不是Aspose.Words中的错误。 所以,我们已将此问题(WORDSNET-18323)关闭为“非错误”。

请注意,Aspose.Words模仿MS Word的行为。 如果将文本的字体名称设置为“Source Han Serif CN”,您将获得相同的输出。