(申し訳ありませんが、私は英語が苦手です)
こんにちは、
この素晴らしいスクリプトを使用してSVGタグをレンダリングしています
SVGのテキストタグをキャンバスにレンダリングすると、テキストが重なっています
テキストタグはテキストノードおよびSVGとして処理されます
あなたはそれをtransformプロパティで簡単に見ることができます
これがサンプルコードです(html2canvas 0.5.0-alpha2を使用)
<html>
<head>
<script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
<script type="text/javascript" src="js/html2canvas.js"></script>
</head>
<body>
<svg width="100" height="100">
<g transform="translate(20,20)">
<text dy=".45em" y="10" x="0" dx="-.8em" transform="translate(0,0) rotate(-70)" style="font-size:12px;">Text</text>
</g>
</svg>
<script>
$(document).ready(function() {
html2canvas(document.body, {
onrendered: function(canvas) {
document.body.appendChild(canvas);
}
});
})
</script>
</body>
</html
そして、これが私のクイックチェンジです
NodeParser.prototype.getChildren = function(parentContainer) {
return flatten([].filter.call(parentContainer.node.childNodes, renderableNode).map(function(node) {
var container = [node.nodeType === Node.TEXT_NODE && node.parentElement.tagName !== "text" ? new TextContainer(node, parentContainer) : new NodeContainer(node, parentContainer)].filter(nonIgnoredElement);
return node.nodeType === Node.ELEMENT_NODE && container.length && node.tagName !== "TEXTAREA" ? (container[0].isElementVisible() ? container.concat(this.getChildren(container[0])) : []) : container;
}, this));
};
これがお役に立てば幸いです
ありがとう#ひょうじん。 それは私を助けます。
ありがとう、私をたくさん助けてください!
修正していただきありがとうございます。
tspantagNameを確認することもできます。
node.nodeType === Node.TEXT_NODE && node.parentElement.tagName!== "text" && node.parentElement.tagName!== "tspan"
@ncoqueletコードを更新しました。 ありがとう!
@ヒョジン
IEでテストした後、 parentElement
プロパティが現在のノードに入力されていないため、修正は機能しません。 代わりにparentNode
使用してください! いずれにせよ、 NodeParser
に入ってノードについて話しているので、より明確になります。
それ以外の場合は、代わりにタグ名でテストし、コードを変更してparentNode
のインスタンスをテストし、parentNodeがSVGElement
ない場合にのみ、現在のノードにTextContainer
があることを処理します。
chromeとie11で動作します。 Firefoxでは、空白のキャンバスのバグのためにテストできません!
私のコード
NodeParser.prototype.getChildren = function(parentContainer) {
return flatten([].filter.call(parentContainer.node.childNodes, renderableNode).map(function(node) {
var container = [node.nodeType === Node.TEXT_NODE && !(node.parentNode instanceof SVGElement) ? new TextContainer(node, parentContainer) : new NodeContainer(node, parentContainer)].filter(nonIgnoredElement);
return node.nodeType === Node.ELEMENT_NODE && container.length && node.tagName !== "TEXTAREA" ? (container[0].isElementVisible() ? container.concat(this.getChildren(container[0])) : []) : container;
}, this));
};
これがお役に立てば幸いです。
私のFirefoxの問題を修正し、ffでも動作します:-)
より明確に!
また、ffでうまく機能することも確認しました。
修正をマージし、プルリクエストが更新されました。 ありがとう :)
@ hyojin @ ncoqueletこれと修正の調査に感謝します。 先日、まったく同じ問題が発生しましたが、何が原因なのか完全にはわかりませんでした。
ここで混乱している場所がわかりませんが、「Uncaught ReferenceError:NodeParserisnotdefined」という例外が発生します。
@ Suchetana10いつ例外が発生しましたか? スクリプトの読み込み中?
@hyojinありがとう..私のために働いた
@ひょうじんありがとう! 私にとっても完璧に機能します
happyvishwasvadavi ugnugenそれを聞いてうれしいです! :)
まだテキスト要素の問題を抱えている人もいます。この問題を開いて変更し、PRを再度送信します。
誰かが私がテストできるこの修正を含むライブラリのビルドを持っていますか? ハイチャートページで同じ問題が発生しています。
このビルドは修正で利用できますか? 私はまだhighchartsでこの問題に直面しています。
この修正はビルドで利用できますか、それともオーバーライドを作成する必要がありますか?
この問題は、元の作成者からの詳細情報の要求に対する応答がなかったため、自動的にクローズされました。 現在問題になっている情報だけでは、行動を起こすのに十分な情報がありません。 さらに調査できるように、必要な回答がある場合はご連絡ください。
親愛なる@niklasvh 、
この素晴らしいライブラリをありがとう。 この問題を最新バージョン(v1.0.0-rc.3)で再現できます。
ここでここでは、(グラフタイトルの)テキストノードの一部が複製されていることがわかります。
再現する手順 -
グラフのタイトルはLine#193に追加されています
@hyojin 、もう一度問題を開いて
よろしく、
カラン
こんにちは@hyojin
ご使用のバージョンのライブラリ(v0.5.0-alpha2)では機能しません。 ここで私のペンでライブラリをテストできます
また、最新バージョンのhtml2canvasを使用したいと思います。 また、html2canvas.svgを使用する必要はありません。
よろしく、
カラン
Unicodeフォントの問題であることが判明しました
最も参考になるコメント
@ヒョジン
IEでテストした後、
parentElement
プロパティが現在のノードに入力されていないため、修正は機能しません。 代わりにparentNode
使用してください! いずれにせよ、NodeParser
に入ってノードについて話しているので、より明確になります。それ以外の場合は、代わりにタグ名でテストし、コードを変更して
parentNode
のインスタンスをテストし、parentNodeがSVGElement
ない場合にのみ、現在のノードにTextContainer
があることを処理します。chromeとie11で動作します。 Firefoxでは、空白のキャンバスのバグのためにテストできません!
私のコード
これがお役に立てば幸いです。