添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
直爽的熊猫  ·  java.lang.noclassdeffo ...·  3 天前    · 
儒雅的菠萝  ·  保存 SVG 文档 - C#·  1 周前    · 
腼腆的牛肉面  ·  Aspose.Words 教程 | ...·  1 月前    · 
爱热闹的梨子  ·  Customise the Event ...·  1 月前    · 
多情的大象  ·  @supermap/iclient3d-we ...·  3 月前    · 
个性的领带  ·  MUZIK AIR·  5 月前    · 

最近在业务中用到了Html转PDF的功能,使用到了Aspose(21.11),在转换时由于中文默认使用 Arial ,字母和数字使用 TimesNewRoman ,导致生成的PDF文字位置错误。

<p>我是中文ABC</p>  
<p>我是中文123</p>

图 - 1

1.设置font-family(无效)

尝试在Html中设置文字font-family

<style>  
  p { font-family: "SimHei"; }  
</style>

重新生成PDF后发现并未生效,还是和图 - 1一样文字错位,猜测可能是Aspose无法找到到Html中指定的字体。

2.设置TextState(无效)

通过查阅Aspose的文档找到可以通过HtmlLoadOptions > PageInfo > setDefaultTextState()设置默认字体。

HtmlLoadOptions htmlOptions = new HtmlLoadOptions();  
PageInfo pageInfo = new PageInfo();  
TextState textState = new TextState();  
// 加载字体
textState.setFont(FontRepository.openFont("/font/SIMHEI.ttf"));  
// 设置默认字体
pageInfo.setDefaultTextState(textState);  
htmlOptions.setPageInfo(pageInfo);  
// 生成PDF  
Document doc = new Document("/test.html", htmlOptions);  
doc.save("/test.pdf");

重新生成PDF后发现并未生效,还是和图 - 1一样文字错位。调试发现这里设置的DefaultTextState并未生效,通过doc.getPageInfo().getDefaultTextState().getFont()获取的字体依然是null

3.addLocalFontPath

继续查阅文档看到FontRepository中有个addLocalFontPath方法可以添加字体目录

FontRepository.addLocalFontPath("/font");  
Document doc = new Document("/test.html", new HtmlLoadOptions());  
doc.save("/test.pdf");

重新生成PDF后看到字体已经生效了

  • css中使用的字体名称是字体名称非字体文件名称;
  • 可以使用FontRepository.openFont("/font/SIMHEI.ttf").getFontName();来获取字体名称;
  • 测试发现如果字体名称中包含空格会导致字体不生效,也可能是我找的字体文件有问题;
  • 粉丝