SVG文件自定义字体未在html中显示

时间:2015-10-29 11:26:27

标签: google-chrome svg printing fonts

我的目标:在Chrome(电子)的html页面中将SVG打印到单页(任何纸张尺寸)的全尺寸。

我努力实现这一目标,这就是我的故事:

我已经生成了一个SVG,其中包含应该使用特定字体显示的文本。这是我用css(使用Font Squirrel)包含的自定义字体,也用于网站中的文本。当我在我的网站内联显示SVG时,字体呈现正常。

内联意味着它是您可以检查的dom的一部分。问题在于,您无法在不重新渲染svg的情况下真正更改宽度样式。因为我想要打印它,所以能够做到宽度= 100%'。

为此,我将SVG序列化为dataURL并使用a并将其src设置为dataURL。现在我可以设置我想要的宽度。但是:自定义字体不再起作用了!

所以我将SVG img保存到文件中进行编辑。显然你可以在SVG中加入css以便我做的事情。然后,当您直接在浏览器中打开文件时,它再次正常工作。但是,当您在网页中的IMG中打开它时,字体将不再起作用。

接下来我尝试将svg字体直接复制到文件中(字形...)。是的,这有效!哦,不,它不是,只是在Safari中,而不是在Chrome中,不知道。

现在我考虑光栅化它,但当然没有那么简洁的解决方案。

你可以理解我在这里感到有点沮丧。任何人都可以让我对SVG字体问题有所了解,或者您有关于打印的任何提示吗?

2 个答案:

答案 0 :(得分:0)

好的,我找到了解决方案。

事实证明,出于安全原因,IMG元素中引用的文件不能包含任何外部文件。这就是为什么在SVG中引用CSS时将其显示为IMG的原因并不起作用。

Chrome也放弃了对SVG字体的支持。因此,即使您在SVG图像中复制/粘贴SVG字形数据,它仍然无法正常工作(非常愚蠢)。在Safari中,这可以工作。

所以你需要在css中引用WOFF字体作为dataURL(base64)。我之前尝试过,但显然我做错了。我再试一次,它的确有效:)。

我使用FontSquirrel来生成这个,我也将字体子集化为仅包含我实际需要节省空间的字符。

当然不一定要复制字体而不是引用它不是很有效,但我可以忍受它。

答案 1 :(得分:0)

最简单的解决方案是通过将文本转换为 SVG 路径,使 SVG 中没有任何“文本”。

您可以在 Inkscape 中通过选择文本然后转到路径->对象到路径来执行此操作。然后将所有内容保存或导出到一个新文件中,清除浏览器缓存,刷新,现在您应该可以看到您的文本了。