Ale*_*lds 6 pdf fonts svg types imagemagick
我有一个简单的测试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>
Run Code Online (Sandbox Code Playgroud)
如果我使用ImageMagick(在CentOS Linux 7(Core)上运行的ImageMagick 7.0.2-0 Q16 x86_64)将其转换为PDF文件,则结果不会使用已安装的字体.
例如:
$ convert -density 600 test.svg test.pdf
Run Code Online (Sandbox Code Playgroud)
产量:
看起来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
Run Code Online (Sandbox Code Playgroud)
第一个<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
Run Code Online (Sandbox Code Playgroud)
ImageMagick使用Helvetica-Narrow两个元素的字体,出于同样的原因这是不正确的.
有没有办法说服ImageMagick使用<text>输入SVG中元素中指定的正确字体?
看看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
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
我研究了一下是否可以直接使用类型名称(Helvetica-Bold, Helvetica-Narrow),但无济于事,这是我能找到的唯一解决方案,这是 ImageMagickconvert工具所尊重的。希望能帮助到你。