如何检测丢失的字体字符

Posted

技术标签:

【中文标题】如何检测丢失的字体字符【英文标题】:How to detect missing font characters 【发布时间】:2010-04-21 08:43:09 【问题描述】:

有没有办法检测到所有字符都以当前字体正确显示?在某些环境和字体中,某些字符被替换为方形符号。

我想自动验证当前字体是否支持 GUI 中使用的所有字符。

【问题讨论】:

【参考方案1】:

我找到了使用QFontMetrics 类的可能解决方案。下面是一个示例函数,用于查询 QLabel 的当前文本中是否所有字符都可用:

bool charactersMissing(const QLabel& label) 
    QFontMetrics metrics(label.font());
    for (int i = 0; i < label.text().size(); ++i) 
        if (!metrics.inFont(label.text().at(i))) 
            return true;
        
    
    return false;

当然,向用户显示缺少哪个字符会很好,但当然必须使用不同的字体来完成 :)

【讨论】:

【参考方案2】:

根据这个讨论,我认为 QFontMetrics 的示例代码不会很好地工作。 https://bugreports.qt-project.org/browse/QTBUG-1732

QFontMetrics inFont() 函数依赖于 QFont 类,似乎您必须将 StyleStrategy 设置为 QFont::NoFontMerging。但实际上,NoFontMerging 标志并没有按照你想象的那样工作,所以如果你系统中的其他字体有这个字形,inFont 函数仍然返回 true。

顺便说一句,我终于在python中做了一个验证工具。

https://github.com/diro/pyGlyphChecker

【讨论】:

虽然此链接可能会回答问题,但您应避免仅提供链接的答案。【参考方案3】:

一个可能的解决方案...


根据您的应用程序,以下可能是一种可能的解决方案 (或完全不适用):

弹出一个对话框,其中包含您打算使用的所有字符的示例段落。

使用您想到的字体呈现段落。

向用户显示一条消息

-- 选择确定(如果他/她可以阅读文本,即只有在没有“方块”可见的情况下)

-- 选择不同的字体(如果有任何“正方形”可见)

注意:如果您想知道,这对于应用程序来说并不少见。 MS-WORD 在检测到 doc 文件中的非标准编码时会执行此操作。

祝你好运!!

【讨论】:

以上是关于如何检测丢失的字体字符的主要内容,如果未能解决你的问题,请参考以下文章

在不丢失 Html 样式的情况下更改 NSAttributedString 中的字体大小 - Swift

Vue 构建时字体包文件丢失

如何修复 PDF 文件并嵌入丢失的字体

为啥WORD转换PDF时字体会丢失?

检测丢失的字符字形,以及 Firefox 的带有十六进制代码点的小盒子

帆软报表_导出图表中文图例丢失