6

SVG のテキストを保持する SVG から PDF へのコンバーターを探しています。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 に答える