我的目标:在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字体问题有所了解,或者您有关于打印的任何提示吗?
答案 0 :(得分:0)
好的,我找到了解决方案。
事实证明,出于安全原因,IMG元素中引用的文件不能包含任何外部文件。这就是为什么在SVG中引用CSS时将其显示为IMG的原因并不起作用。
Chrome也放弃了对SVG字体的支持。因此,即使您在SVG图像中复制/粘贴SVG字形数据,它仍然无法正常工作(非常愚蠢)。在Safari中,这可以工作。
所以你需要在css中引用WOFF字体作为dataURL(base64)。我之前尝试过,但显然我做错了。我再试一次,它的确有效:)。
我使用FontSquirrel来生成这个,我也将字体子集化为仅包含我实际需要节省空间的字符。
当然不一定要复制字体而不是引用它不是很有效,但我可以忍受它。
答案 1 :(得分:0)
最简单的解决方案是通过将文本转换为 SVG 路径,使 SVG 中没有任何“文本”。
您可以在 Inkscape 中通过选择文本然后转到路径->对象到路径来执行此操作。然后将所有内容保存或导出到一个新文件中,清除浏览器缓存,刷新,现在您应该可以看到您的文本了。