如何检测丢失的字体字符
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