保存文本的SVG到PDF转换器

时间:2013-04-06 19:00:02

标签: pdf svg pdf-generation

我正在寻找一个SVG to PDF转换器,它可以保留SVG中的文本。我试过Batik,Inkscape和CairoSVG。所有这些生成的PDF都是位图图像,包括文本;无法在PDF查看器中选择/搜索文本。他们所有人都做得不好,特别是CairoSVG。

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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