6

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

我按照此处的说明进行操作(请注意,您不必编译 FOP - 您可以从此处下载 PDF 转码器)。现在我看到,如果我放大 PDF,清晰度会被保留,我认为这意味着文本会被保留。但是,我无法搜索或选择文本。

此外,我比较了使用 FOP 中的 PDF 转码器与 Batik 中的输出,我发现没有区别。

4

3 回答 3

2

如果您使用滤镜、渐变或遮罩,则可能无法将此 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).

于 2013-04-07T18:46:36.203 回答
1

看看librsvgrsvg-convert的一部分。我用它来将 SVG 文档转换为 PDF 并保留文本,以便在 PDF 查看器中可以选择和搜索。

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

于 2018-02-07T22:12:26.673 回答
-1

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

于 2013-04-06T19:49:39.747 回答