2

これが私の(切り捨てられた)SVG画像の例です(Highchartsで作成されたhttp://www.highcharts.com/)-それをキャンバスにレンダリングすると(canvgを使用して(https://github.com/gabelerner/canvgおよびコードが適応されます)ここから: https://stackoverflow.com/a/8997520/2067690 ) 結果の PNG のすべてのテキストが複製されます。 1回だけ登場?

<svg height="400" width="1170" version="1.1" xmlns="http://www.w3.org/1999/svg">
<text zIndex="8" text-anchor="end" style="font-family:&quot;Lucida Grande&quot;, &quot;Lucida Sans Unicode&quot;, Verdana, Arial, Helvetica, sans-serif;font-size:9px;cursor:pointer;color:#909090;fill:#909090;" y="22" x="220">
  <tspan x="220">Highcharts.com</tspan>
</text>
</svg>
4

4 に答える 4

4

この質問は少し古いですが、グラフにこの二重テキストのバグがあるのはかなり面倒だと思いました。コードを見て、tspan で動作するように修正しました。私はそれを深く掘り下げていないので、ライブラリで行われているすべてのメカニズムを理解しているわけではありませんが、「tspan」の場合、ある時点で、作成されたオブジェクトが次のようになっていることに気付きました。

  • さて、タイプ「tspan」とテキスト属性を持つオブジェクトです。
  • また、そのオブジェクトには、tspan のテキスト値である別のオブジェクトも含まれていました (これは、前のテキスト属性と同じです)。

だから私がしたことは、ライブラリのソースコードを変更することです. 検索すると

// tspan 
svg.Element.tspan = function(node) {

次に、これを関数内に追加するだけです(古いコンテンツを置き換えます):

if ( node.nodeName == "tspan")
    this.text = '' ;
else
    this.text = node.value || node.text || node.textContent || '';

そして、それは私の問題を解決しました。それが誰かを助けることを願っています。

于 2015-04-13T16:28:08.760 に答える
1

サンプルの SVG 画像の一部を削除した後、いつエラーが解消されるかを調べたところ、タグであることがわかりました。tspanタグを除外すると、canvg は意図したとおりにテキストを 1 回だけ表示します。

于 2015-02-17T13:55:22.193 に答える