如果您使用滤镜、渐变或遮罩,则可能无法将此 1:1 转换为 PDF。在这些情况下,转换器通常会光栅化矢量数据以实现相似的视觉外观,而不是保留矢量数据并获得非常不同的外观。
编辑:在您的示例情况下,我们可以确保在以下 XSLT 转换的帮助下使用填充属性而不是过滤器:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@fill[ancestor::svg:symbol]" priority="1">
<xsl:attribute name="fill">currentColor</xsl:attribute>
</xsl:template>
<xsl:template match="@filter[starts-with(.,'url(#colorFilter-')]">
<xsl:attribute name="color">
<xsl:value-of select="concat('#',substring(.,18,6))"/>
</xsl:attribute>
</xsl:template>
<xsl:template match="svg:use[not(@filter)]">
<xsl:copy>
<xsl:attribute name="color">#fff</xsl:attribute>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这完全依赖于在这个特定的 SVG 中过滤器是如何命名的,因此它不适用于其他任何东西。不过颜色不太对。我很想知道为什么这个颜色矩阵:
0.4 0 0 0 0
0 0.6 0 0 0
0 0 0.8 0 0
0 0 0 1 0
应用于白色显然不会导致rgba(40%,60%,80%,1)
.