提问者:小点点

SVG到保留文本的PDF转换器


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

我按照这里的说明(注意,你不必编译FOP——你可以从这里下载PDF转码器)。现在我看到,如果我放大PDF,清晰度得到了保留,我假设这意味着文本得到了保留。然而,我不能搜索或选择文本。

此外,我比较了从FOP使用PDF转码器的输出与蜡染中的输出,我看不出有什么区别。


共3个答案

匿名用户

如果您使用过滤器、渐变或掩蔽,可能无法将此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)

匿名用户

看看rsvg-转换,它是一个程序库,我用它把SVG文档转换成PDF它保留了文本,这样它就可以在PDF浏览器中选择和搜索。

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

匿名用户

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