问题标签 [font-linking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3225 浏览

winapi - 是否可以确定 Windows 为字体链接选择的字体?

假设您有一个包含两个或多个脚本中的文本的字符串。当您使用 GDI 函数TextOut时,(现代版本的)Windows 将执行“字体链接”。也就是说,GDI 将使用您选择的字体绘制它可以绘制的内容,并以它自动选择的适当字体绘制其余部分。例如,如果您的文本一部分是英文(使用罗马字母),一部分是中文(使用 CJK 字符),并且您选择了 Arial,则英文部分将使用 Arial 绘制,而中文部分将用另一种具有 CJK 字形的字体绘制。

我的问题是,有没有办法确定TextOut为字体链接选择(或确实选择了)哪些字体?

我必须使用不执行自动字体链接的低级 Uniscribe API 绘制一些文本。TextOut我已经实现了自己的字体链接,但有时我的算法会选择与相同文本不同的字体。我试图更好地理解 Windows 算法,但我并不擅长识别字体(尤其是在不熟悉的脚本中)。

0 投票
1 回答
145 浏览

css - 特定浏览器如何阻止下载的字体对其他应用程序可用

由于这是Web 字体规范的规定要求,有人可以向我解释各个浏览器如何处理这个问题吗?我了解 IE 仅在需要字体期间临时安装字体,但找不到关于如何处理 Firefox、Safari、Chrome、Opera 等的信息。
谢谢,

0 投票
1 回答
432 浏览

c# - 在 Win XP 中使用 Myriad Pro 的 FontLink

我有一个在 WinXP 上运行的 C# 应用程序,它需要显示一些符号,但我得到的只是正方形。我做了一些挖掘,发现了字体链接。

我成功地将它与 Arial 和 Calibri 一起使用,但我无法让它与 Myriad Pro 一起使用。

我在注册表中设置了以下内容HKEY_LOCAL_MACHINE–\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink(遵循http://msdn.microsoft.com/en-us/goglobal/bb688134

等等 MyriadPro 粗体,粗体浓缩,粗体浓缩斜体,粗斜体,浓缩,浓缩斜体,常规,半斜体,半粗斜体,但我仍然得到正方形而不是字符......我也尝试使用 Myriad作为键,也不工作...

在我添加 Arial 和 Calibri 的条目之前,我有正方形而不是字符,但在我添加条目后它们开始工作。

我究竟做错了什么?我可以不链接 Myriad Pro 吗?

提前致谢!

0 投票
2 回答
1515 浏览

c - 检查是否显示Unicode字符或豆腐

我的问题与类似,但向前迈出了一步。

在我的 Win32 程序中,我有一些带有 BMP 上方的 Unicode 字符的菜单按钮,例如 U+1F5A4(UTF-16 代理对 0xD83D 0xDDA4)。
在 Windows 10 中,系统字体Segoe UI没有此字形:它会自动替换为Segoe UI Symbol字体中的字形并在按钮中正确显示,这要归功于称为字体链接(或字体回退,仍不清楚大部头书)。
但在 Windows 7 中,字体链接带来的字体也没有此字形,并且代理对显示为两个空框▯▯。在带有 Tahoma 字体的 Windows XP 中也是如此。

我想避免这些替换框,方法是在分配给按钮之前或之后解析文本,并用一些常见的 ASCII 字符替换丢失的字形。

我试过GetGlyphOutline, ScriptGetCMapGetFontUnicodeRangesGetGlyphIndices它们不支持代理对。
我也尝试过支持代理对的GetCharacterPlacementUniscribe ScriptItemize+ ScriptShape,但是所有这些功能只搜索 HDC 的基本字体(Segoe UI),它们不搜索最终的后备字体(Segoe UI Symbol),这是提供字形。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink这是我看过的地方,但我真的认为系统不在那里将字体链接到。

问题是:我怎么知道系统字体链接是否产生了正确的字形或豆腐框?


编辑

我找到了某种解决方案,可以复制此代码并添加最后一个GetCharacterPlacement

你可以调用它checkGlyphExist( hWnd, L"", L"<3" );

我在 Windows 10 和两个虚拟机上进行了测试:Windows 7 Professional、Windows XP SP2。
它工作得很好,但是当基本字体中缺少字形时,EnumEnhMetaFile检索的后备字体仍然存在两个问题:

  • 在 Windows 7 中始终是Microsoft Sans Serif,但真正的后备字体应该是Segoe UI Symbol
  • 在 Windows XP 中是Tahoma而不是Microsoft Sans Serif,但仅适用于代理对字符(我猜 BMP 字符是Microsoft Sans Serif是正确的)。

有人可以帮我解决这个问题吗?

0 投票
1 回答
46 浏览

javascript - 由于字体链接,滚动到底部不起作用

有人可以解释一下这里发生了什么吗?

正如您在示例中看到的那样,滚动不会一直向下到底部

这当然是一个问题,因为它不按照说明操作,即:
scrollIntoView() 或 target.scroll (0, target.scrollHeight - target.clientHeight);

奇怪的是,它与“<head>”中的“字体链接”有关,因为如果我使用已下载字体(Poppins)以外的任何字体,它就可以工作