(Désolé, je ne suis pas bon en anglais)
Bonjour,
J'utilise ce script génial pour rendre les balises SVG
Il y a du texte qui se chevauche lorsque je rends la balise de texte dans SVG sur canvas
La balise de texte doit être traitée en tant que nœud de texte et également en SVG
Vous pouvez le voir facilement avec la propriété transform
Voici un exemple de code (avec 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
Et voici mon changement rapide
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));
};
j'espère que cela aidera
Merci #Hyojin. Cela m'aide.
Merci, aidez-moi beaucoup!
Merci pour votre correction !
vous pouvez également vérifier sur tspan tagName :
node.nodeType === Node.TEXT_NODE && node.parentElement.tagName !== "text" && node.parentElement.tagName !== "tspan"
@ncoquelet j'ai mis à jour mon code . Merci!
@hyojin
Après l'avoir testé sur IE, votre correctif ne fonctionne pas car la propriété parentElement
n'est pas renseignée sur le nœud actuel. Utilisez parentNode
place ! En tout cas, ce sera plus clair car on est dans le NodeParser
et on parle de node.
Sinon, au lieu de tester sur le nom de la balise, je modifie mon code pour tester l'instance de parentNode
et traiter le nœud actuel a un TextContainer
uniquement si le parentNode n'est pas un SVGElement
.
Il fonctionne sur chrome et ie11. sur firefox je ne peux pas le tester à cause d'un bug de la toile vierge !
mon 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));
};
J'espère que ça aide.
résoudre mon problème de firefox, fonctionne aussi sur ff :-)
Plus clair!
J'ai aussi vérifié qu'il fonctionnait bien sur ff.
J'ai fusionné votre correctif et la demande d'extraction a été mise à jour. Merci :)
@hyojin @ncoquelet merci pour l'enquête à ce sujet et le correctif. J'ai rencontré exactement le même problème l'autre jour et je n'étais pas tout à fait sûr de la cause.
Je ne sais pas où je suis confus ici, mais j'obtiens l'exception "Uncaught ReferenceError: NodeParser n'est pas défini"
@Suchetana10 Quand avez-vous obtenu l'exception ? en chargeant le script ?
@hyojin merci .. travaillé pour moi
@hyojin merci ! fonctionne parfaitement pour moi aussi
happyvishwasvadavi ugnugen Je suis content d'entendre ça ! :)
Certaines personnes ont toujours le problème avec l'élément de texte, je change ce problème ouvert et j'enverrai à nouveau PR.
Est-ce que quelqu'un a une version de la bibliothèque avec ce correctif que je peux tester ? Voir le même problème sur la page highcharts ..
Cette version est-elle disponible avec le correctif ? Je suis toujours confronté à ce problème avec highcharts.
Ce correctif est-il disponible dans la construction ou devons-nous créer un remplacement ?
Ce problème a été automatiquement fermé car il n'y a pas eu de réponse à notre demande d'informations supplémentaires de la part de l'auteur d'origine. Avec seulement les informations qui sont actuellement dans le problème, nous n'avons pas assez d'informations pour prendre des mesures. Veuillez nous contacter si vous avez ou trouvez les réponses dont nous avons besoin afin que nous puissions approfondir nos recherches.
Cher @niklasvh ,
Merci pour cette magnifique bibliothèque. Je suis capable de reproduire ce problème avec la dernière version - v1.0.0-rc.3
J'ai créé un exemple sur CodePen ici (Chrome uniquement) où vous verrez que certains des nœuds de texte (dans le titre du graphique) sont dupliqués.
Étapes à reproduire -
Les titres des graphiques sont ajoutés sur la ligne 193
@hyojin , pouvez-vous rouvrir le problème s'il vous plaît ?
Salutations,
Karan
Salut @karannagupta
Pourriez-vous essayer ma branche pour vérifier si elle vient de la même raison ?
Salut @hyojin
Avec votre version de la bibliothèque (v0.5.0-alpha2) cela ne fonctionne pas. Vous pouvez tester votre bibliothèque sur mon Pen ici
Aussi, j'aimerais utiliser la dernière version de html2canvas. Je n'ai pas non plus besoin d'utiliser html2canvas.svg alors.
Salutations,
Karan
Il s'avère que c'est un problème avec les polices Unicode
Commentaire le plus utile
@hyojin
Après l'avoir testé sur IE, votre correctif ne fonctionne pas car la propriété
parentElement
n'est pas renseignée sur le nœud actuel. UtilisezparentNode
place ! En tout cas, ce sera plus clair car on est dans leNodeParser
et on parle de node.Sinon, au lieu de tester sur le nom de la balise, je modifie mon code pour tester l'instance de
parentNode
et traiter le nœud actuel a unTextContainer
uniquement si le parentNode n'est pas unSVGElement
.Il fonctionne sur chrome et ie11. sur firefox je ne peux pas le tester à cause d'un bug de la toile vierge !
mon code
J'espère que ça aide.