小编Jer*_*rry的帖子

在 SVG 元素的ForeignObject 的 HTML 中渲染自定义外部字体时遇到问题

这是一个复杂的问题。我创建了一个 Chrome 扩展,它将通过 WebSocket 从客户端接收 JSON-RPC 请求,使用 HTML 修饰渲染文本,并使用 PNG 图像响应客户端。我使用 Canvas 和 SVG 元素来使用包含我正在渲染的 HTML 的foreignObject 标签来渲染文本。除了当我需要使用外部字体时,这一切都非常有效。这里发生了三个间接级别,所以也许我对浏览器的要求太多了;但我希望不会。

您可能认为将文本直接渲染到 SVG 是一种选择,但这意味着我将失去 HTML 提供的一些丰富功能,例如自动换行。有一些针对 SVG 自动换行的技巧,但我不想走这条路。这可能只是我遇到的许多问题中的第一个。

我需要的是 SVG 标签内部的 HTML 能够识别我希望它使用的外部字体。这只需要在 Chromium 中工作,因此特定于 Chromium 的解决方案对我来说是一个可行的选择。

<link rel='preload' href='https://fonts.gstatic.com/s/roboto/v27/KFOkCnqEu92Fr1MmgVxIIzI.woff2' as='font' crossorigin='anonymous' />
<style>@font-face { font-family: Roboto; src: url('https://fonts.gstatic.com/s/roboto/v27/KFOkCnqEu92Fr1MmgVxIIzI.woff2'); } body { font-family: Roboto; font-size: 28px; }</style>
<canvas style='position:absolute; top:90px; left:394px;' id='canvas'></canvas>
<div><span style="font-family:courier; font-size:20px">External straight-HTML (works): </span>Hello World!</div><br/>
<span style='font-family:courier; font-size:20px'>HTML within SVG (doesn't work): </span><br/><br/>
<span style='font-family:courier; font-size:20px'>&nbsp;&nbsp;Text directly to SVG …
Run Code Online (Sandbox Code Playgroud)

html fonts svg text foreignobject

3
推荐指数
1
解决办法
1552
查看次数

标签 统计

fonts ×1

foreignobject ×1

html ×1

svg ×1

text ×1