如何处理PDF字体后退完美时,生成它?



我目前正在做一个可以将HTML画布转换为PDF的项目,用户可以选择字体并在画布中绘制文本并导出为PDF(矢量),但有一个问题,用户可以输入其他语言文本,字体并不真正支持它。它在画布中显示得很好,因为浏览器做了字体回退机制可能是为了获取系统字体作为回退,但在导出的PDF中,它都损坏了。我已经在PDF中嵌入了字体但是字体没有相应的字形,而且adobe这样的PDF阅读器没有字体回退机制所以它都变成了.nodef

我有两个想法,但都不太令人满意。

1。收集每个句子的所有字形并创建一个新字体

遍历每个字符并检查当前字体是否有相应的字形,如果有,将其添加到新的字体列表中,如果没有,使用字体堆栈#1中的替代字体作为回退来获取字形并将其添加到新的字体列表中,然后最后将其转换为新字体并将其嵌入到新的PDF中。

看起来不错,但实际上生成新字体的性能很差。

(我使用Opentype.js加载和编写新字体,当我们使用toArrayBuffer方法导出字体时,6000字需要10分钟)

#1,字体堆栈是一个像['Crimson Text', 'Pt Sans', 'Noto Sans']的堆栈,如果第一个字体找不到相应的字形,然后继续下去,直到最后我们放弃。

2。如果遇到任何缺失的字符,将该句子的font-family更改为Arial Unicode MSNoto

它非常简单,但是它将句子中的每个单词转换为Arial Unicode MSNoto,而且很难找到一个包含大部分语言字形的好字体,而且我们不能使用字体堆栈机制,因为我们只能在一个句子中使用一种字体。

我的目标是使导出的PDF与用户绘制的画布相似,希望有人能给我一些方向😥,非常感谢

通常的解决方案是在堆栈中嵌入所有四种字体加no(最好都适当地子集),并根据需要在它们之间切换。

从你建议的字体建立一个新的弗兰肯字体是不需要的,虽然我钦佩的野心!

相关内容

最新更新