保存文本的SVG到PDF转换器



我正在寻找一个SVG到PDF的转换器,它保留了SVG中的文本。我尝试过蜡染、Inkscape和CairoSVG。它们生成的PDF都是位图图像,包括文本;无法在PDF查看器中选择/搜索文本。它们也不是都做得很好,尤其是CairoSVG。

我遵循这里的说明(注意,您不必编译FOP -您可以从这里下载PDF转码器)。现在我看到,如果我放大PDF,清晰度被保留了下来,我假设这意味着文本被保留了下来。但是,我不能搜索或选择文本。

此外,我比较了使用FOP的PDF转码器与Batik中的输出,我没有看到任何差异。

如果您使用滤镜,渐变或遮罩,可能无法将此1:1转换为PDF。在这些情况下,转换器通常对矢量数据进行光栅化以获得类似的视觉外观,而不是保留矢量数据并获得非常不同的外观。

Edit:在您的示例中,我们可以通过以下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)

看一下librsvg的一部分rsvg-convert。我用它将SVG文档转换为PDF,它保留文本,使其在PDF查看器中可选择和可搜索。

这里是一篇博客文章,比较了它和其他一些选项,并展示了如何使用它:https://www.itsfullofstars.de/tag/rsvg-convert/

您是否尝试过将SVG打印到PDF打印机?

最新更新