我有以下svg:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="600" height="450" viewBox="0 0 600 450" xml:space="preserve">
<g transform="translate(300 77)">
<text xml:space="preserve" font-family="Slabo-Regular" font-size="40" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;"><tspan x="-44.44" y="12.57">Slabo</tspan></text>
</g>
<g transform="translate(300 230)">
<text xml:space="preserve" font-family="Slabo-Regular" font-size="40" font-style="normal" font-weight="bold" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;"><tspan x="-44.44" y="12.57">Slabo</tspan></text>
</g>
<g transform="translate(300 389)">
<text xml:space="preserve" font-family="Slabo-Regular" font-size="40" font-style="italic" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1; white-space: pre;"><tspan x="-44.44" y="12.57">Slabo</tspan></text>
</g>
</svg>
其中第一行以常规“ Slabo”书写,第二行以粗体显示“ bold”,第三行以字体显示“ italic”。
但是,当我使用名为ImageSVG()的TCPDF方法将此svg转换为pdf时,我得到的所有行均以常规“ Slabo”编写。这是一个带有单个文件的字体的测试用例(如果每种字体的变体都有不同的文件,我知道该怎么做)。
TCPDF似乎忽略了嵌入式字体重量和字体样式。
这是预期的行为还是我做错了什么?
答案 0 :(得分:0)
据我所知,TCPDF不会近似字体粗体或斜体样式。也就是说,它不会尝试近似浏览器所没有的字体样式/粗细。
如果您不想修改SVG或使用ImageMagick对其进行栅格化,那么我知道两个选项:
1)提供其他字体作为您没有的Slabo样式的填充
此选项可能是最简单的。由于Slabo仅提供常规的粗细/样式,因此您可以选择非常相似的替代字体,然后重命名它们的文件,以便它们与TCPDF的Slabo其他样式的命名规则匹配。
$slabo = TCPDF_FONTS::addTTFfont(realpath('./slabo/Slabo-Regular.ttf'), 'TrueTypeUnicode', '', 32);
//Regular
$slaboi = TCPDF_FONTS::addTTFfont(realpath('Slabo-Italic.ttf'), 'TrueTypeUnicode', '', 32);
//Italic
$slabob = TCPDF_FONTS::addTTFfont(realpath('Slabo-bold.ttf'), 'TrueTypeUnicode', '', 32);
//Bold
$slabobi = TCPDF_FONTS::addTTFfont(realpath('slabobi.ttf'), 'TrueTypeUnicode', '', 32);
//Bold and Italic (file could have also been named something like Slabo-Bold-Italic.ttf)
当SVG解析器处理文本元素时,TCPDF将找到其他字体。 (对于粗体示例:在内部,Slabo-Regular将被更改为slabo,然后因为您想要粗体,它将查找slabob,该文本存在并且随后将使用该字体。)< / p>
下面是一个带有替代字体的示例。 (未仔细选择。)
2)生成近似的粗体/斜体样式。
您可以创建自己的Slabo样式。例如,使用诸如 FontForge
之类的工具http://designwithfontforge.com/en-US/Bold_and_Other_Weights.html
创建粗体字体可以通过以下方式快速估算 运行名为更改权重的过滤器(您可以在 元素>样式菜单)来增加字形的权重。