(Entschuldigung, ich bin nicht gut in Englisch)
Hallo,
Ich verwende dieses tolle Skript, um SVG-Tags zu rendern
Es gibt einige Textüberlappungen, wenn ich das Text-Tag in SVG auf Leinwand rendere
Text-Tag wird als Text-Knoten und auch als SVG verarbeitet
Sie können das leicht mit der Eigenschaft transform sehen
Hier ist Beispielcode (mit 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
Und hier ist mein schnelles Wechselgeld
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));
};
Ich hoffe das wird helfen
Danke #Hyojin. Das hilft mir.
Danke, hilf mir sehr!
Danke für deine Korrektur!
Sie können auch tspan tagName überprüfen:
node.nodeType === Node.TEXT_NODE && node.parentElement.tagName !== "text" && node.parentElement.tagName !== "tspan"
@ncoquelet Ich habe meinen Code aktualisiert. Vielen Dank!
@hyojin
Nachdem Sie es im IE getestet haben, funktioniert Ihr Fix nicht, da die Eigenschaft parentElement
auf dem aktuellen Knoten nicht aufgefüllt ist. Verwenden Sie stattdessen parentNode
! Auf jeden Fall wird es klarer, weil wir uns mit NodeParser
und über Knoten sprechen.
Ansonsten teste ich stattdessen den Tag-Namen, ändere meinen Code, um die Instanz von parentNode
zu testen und zu verarbeiten, dass der aktuelle Knoten ein TextContainer
nur wenn der parentNode kein SVGElement
.
Es funktioniert auf Chrome und ie11. Auf Firefox kann ich es wegen eines Blank Canvas-Fehlers nicht testen!
Mein Code
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));
};
Ich hoffe das hilft.
Fix mein Firefox-Problem, funktioniert auch auf ff :-)
Klarer!
Ich habe auch überprüft, ob es auf ff gut funktioniert.
Ich habe Ihren Fix zusammengeführt und die Pull-Anfrage wurde aktualisiert. Vielen Dank :)
@hyojin @ncoquelet danke für die Untersuchung und den Fix. Ich bin neulich auf genau das gleiche Problem gestoßen und war mir nicht ganz sicher, was es verursacht hat.
Ich bin mir nicht sicher, wo ich hier verwirrt bin, aber ich erhalte die Ausnahme als "Uncaught ReferenceError: NodeParser ist nicht definiert"
@Suchetana10 Wann hast du die Ausnahme bekommen? im Ladeskript?
@hyojin danke .. hat für mich funktioniert
@hyojin danke! funktioniert bei mir auch einwandfrei
happyvishwasvadavi ugnugen Das freut mich zu hören! :)
Einige Leute haben immer noch das Problem mit dem Textelement, ich ändere dieses Problem geöffnet und werde erneut PR senden.
Hat jemand einen Build der Bibliothek mit diesem Fix darin, den ich testen kann? Das gleiche Problem wird auf der Highcharts-Seite angezeigt.
Ist dieser Build mit dem Fix verfügbar? Ich habe immer noch dieses Problem mit Highcharts.
Ist dieser Fix im Build verfügbar oder müssen wir eine Überschreibung erstellen?
Ist das immer noch ein Problem mit v1.0.0 ? Wenn ja, könnten Sie bitte ein Beispiel für jsfiddle teilen .
Dieses Problem wurde automatisch geschlossen, da unsere Anfrage nach weiteren Informationen vom ursprünglichen Autor nicht beantwortet wurde. Wir haben nur die Informationen, die derzeit in der Ausgabe enthalten sind, und wir haben nicht genügend Informationen, um Maßnahmen zu ergreifen. Bitte wenden Sie sich an uns, wenn Sie die benötigten Antworten haben oder finden, damit wir weitere Nachforschungen anstellen können.
Lieber @niklasvh ,
Vielen Dank für diese tolle Bibliothek. Ich kann dieses Problem mit der neuesten Version reproduzieren - v1.0.0-rc.3
Ich habe hier ein Beispiel für CodePen erstellt (nur Chrome), in dem Sie sehen, dass einige der
Schritte zum Reproduzieren -
Die Diagrammtitel werden in Zeile Nr. 193 hinzugefügt
@hyojin , würdest du das Problem bitte noch einmal öffnen?
Grüße,
Karan
Hallo @karannagupta
Könnten Sie es mit meiner Filiale versuchen, um zu überprüfen, ob es aus demselben Grund stammt?
Hallo @hyojin
Mit Ihrer Version der Bibliothek (v0.5.0-alpha2) funktioniert es nicht. Hier können Sie Ihre Bibliothek auf meinem Stift testen
Außerdem möchte ich die neueste Version von html2canvas verwenden. Ich brauche html2canvas.svg dann auch nicht.
Grüße,
Karan
Es stellt sich heraus, dass es sich um ein Problem mit Unicode-Schriftarten handelt
Hilfreichster Kommentar
@hyojin
Nachdem Sie es im IE getestet haben, funktioniert Ihr Fix nicht, da die Eigenschaft
parentElement
auf dem aktuellen Knoten nicht aufgefüllt ist. Verwenden Sie stattdessenparentNode
! Auf jeden Fall wird es klarer, weil wir uns mitNodeParser
und über Knoten sprechen.Ansonsten teste ich stattdessen den Tag-Namen, ändere meinen Code, um die Instanz von
parentNode
zu testen und zu verarbeiten, dass der aktuelle Knoten einTextContainer
nur wenn der parentNode keinSVGElement
.Es funktioniert auf Chrome und ie11. Auf Firefox kann ich es wegen eines Blank Canvas-Fehlers nicht testen!
Mein Code
Ich hoffe das hilft.