我有一个简单的测试SVG,它使用两个已安装的字体(Helvetica-Narrow
和Helvetica-Bold
):
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="50">
<text x="0" y="24" fill="blue" font-family="Helvetica-Bold" font-size="24px">Bold</text>
<text x="0" y="48" fill="blue" font-family="Helvetica-Narrow" font-size="24px">Narrow</text>
</svg>
如果我使用ImageMagick(在CentOS Linux 7(Core)上运行的ImageMagick 7.0.2-0 Q16 x86_64)将其转换为PDF文件,则结果不会使用已安装的字体。
例如:
$ convert -density 600 test.svg test.pdf
收率:
看起来ImageMagick默认使用Helvetica
的正常权重,它与输入SVG中指定的任何字体系列都不匹配。
接下来,我尝试指定输入SVG中指定的其中一种字体的路径。这是Helvetica-Bold
字体的路径,由运行convert -list font
确定。
$ convert -density 600 -font /net/module/sw/ghostscript-fonts/5.50-32/n019004l.pfb test-helvetica-mix.svg test-helvetica-mix-bold.pdf
第一个<text>
元素是正确的 - 它使用Helvetica-Bold
。第二个<text>
元素不正确 - 它也使用Helvetica-Bold
,但应该使用Helvetica-Narrow
。
尽管如此,我越来越接近这种方法了,所以我尝试将路径添加到输入SVG中使用的第二个字体:
$ convert -density 600 -font /net/module/sw/ghostscript-fonts/5.50-32/n019004l.pfb -font /net/module/sw/ghostscript-fonts/5.50-32/n019043l.pfb test-helvetica-mix.svg test-helvetica-mix-both.pdf
ImageMagick对这两个元素使用Helvetica-Narrow
字体,出于同样的原因这是不正确的。
有没有办法说服ImageMagick使用输入SVG中<text>
元素中指定的正确字体?
答案 0 :(得分:2)
查看convert -list font
说的内容
Font: Helvetica-Bold
family: Helvetica
style: Normal
stretch: Normal
weight: 700
glyphs: /usr/share/fonts/type1/gsfonts/n019004l.pfb
Font: Helvetica-Narrow
family: Helvetica Narrow
style: Normal
stretch: Condensed
weight: 400
glyphs: /usr/share/fonts/type1/gsfonts/n019043l.pfb
Helvetica-Bold
和Helvetica-Narrow
的字体系列分别为Helvetica
和Helvetica Narrow
。您可以使用<text>
上的其他属性来实现预期效果(粗体/狭窄),如:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100" height="50">
<text x="0" y="24" fill="blue" font-family="Helvetica" font-size="24px" font-weight="700">Bold</text>
<text x="0" y="48" fill="blue" font-family="Helvetica Narrow" font-size="24px" font-stretch="Condensed">Narrow</text>
</svg>
我研究过是否可以直接使用类型名称(Helvetica-Bold
,Helvetica-Narrow
),但无济于事,这是我能找到的唯一解决方案,ImageMagick的{{{ 1}}工具。希望它有所帮助。
答案 1 :(得分:0)
尝试编辑位于〜/ .magick / type.xml
之类的ImageMagick字体文件您可以强制它使用特定字体并以您想要的任何名称识别它。 imagick_type_gen。
这是指向应该帮助您尝试做的事情的链接: Make ImageMagick recognize a font
使用ImageMagick附加工具进一步阅读: http://gothick.org.uk/2008/03/14/using-os-x-fonts-in-imagemagick/
答案 2 :(得分:0)
您需要澄清字体的安装位置:在SVG安装,操作系统或嵌入在PDF中。
SVG有自己的字体系统,不会导致任何问题。 SVG是在Web字体真正使用之前首次制作的,因此SVG制作了自己的便携式字体系统。现在你只有SVG字体的字体系统,它们可能没有转换为PDF文件。
您最好的选择是使用@font-face
规则,例如@font-face { font-family: Helvetica; src: url('/var/www/fonts/Helvetica.ttf'); }
。请参阅此(https://graphicdesign.stackexchange.com/questions/5162/how-do-i-embed-google-web-fonts-into-an-svg/5167#5167)以获取其他视图。
替代方法是完全放弃字体并让SVG渲染您想要的路径。也就是说,使用作为渲染字体的图形创建PDF。当使用Inkscape进行从PDF到SVG的另一个行程方向时,这会显示出来。 (请参阅Convert PDF to clean SVG?或https://www.magebay.com/forum/forums/topic/pdf-svg-doesnt-embed-the-fonts/)。
对不起,如果不了解更多关于细节的信息,就不能归结为“添加这一行”,但这应该会有所帮助。