(Maaf, saya tidak pandai bahasa Inggris)
Halo,
Saya menggunakan skrip yang luar biasa ini untuk membuat tag SVG
Ada beberapa teks yang tumpang tindih ketika saya merender tag teks di SVG ke kanvas
Tag teks diproses sebagai simpul Teks dan juga SVG
Anda dapat melihatnya dengan mudah dengan mengubah properti
Berikut adalah contoh kode (dengan 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
Dan inilah perubahan cepat saya
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));
};
Saya harap ini akan membantu
Terima kasih #Hyojin. Itu membantu saya.
Terima kasih, banyak membantu saya!
Terima kasih atas perbaikan Anda!
anda juga dapat memeriksa tspan tagName :
node.nodeType === Node.TEXT_NODE && node.parentElement.tagName !== "text" && node.parentElement.tagName !== "tspan"
@ncoquelet saya memperbarui kode saya. Terima kasih!
@hyojin
Setelah mengujinya di IE, perbaikan Anda tidak berfungsi karena properti parentElement
tidak terisi pada simpul saat ini. Gunakan parentNode
sebagai gantinya! Bagaimanapun, itu akan lebih jelas karena kita masuk ke NodeParser
dan berbicara tentang node.js.
Jika tidak, alih-alih menguji nama tag, saya mengubah kode saya untuk menguji instance parentNode
dan memproses node saat ini memiliki TextContainer
hanya jika parentNode bukan SVGElement
.
Ini berfungsi pada chrome dan ie11. di firefox saya tidak dapat mengujinya karena bug kanvas kosong!
kode saya
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));
};
Saya harap ini membantu.
perbaiki masalah firefox saya, berfungsi juga di ff :-)
Lebih jelas!
Saya juga memeriksa apakah itu berfungsi dengan baik di ff.
Saya menggabungkan perbaikan Anda dan permintaan tarik telah diperbarui. Terima kasih :)
@hyojin @ncoquelet terima kasih atas penyelidikannya dan perbaikannya. Saya mengalami masalah yang sama beberapa hari yang lalu dan saya tidak sepenuhnya yakin apa yang menyebabkannya.
Saya tidak yakin di mana saya menjadi bingung di sini, tetapi saya mendapatkan pengecualian karena "Error Referensi Tidak Tertangkap: NodeParser tidak ditentukan"
@Suchetana10 Kapan Anda mendapatkan pengecualian? dalam memuat skrip?
@hyojin terima kasih.. bekerja untuk saya
@hyojin terima kasih! bekerja dengan sempurna untuk saya juga
happyvishwasvadavi ugnugen Saya senang mendengarnya! :)
Beberapa orang masih memiliki masalah dengan elemen teks, saya mengubah masalah ini dibuka dan saya akan mengirim PR lagi.
Adakah yang punya build perpustakaan dengan perbaikan ini di dalamnya yang bisa saya uji? Melihat masalah yang sama di halaman grafik tinggi..
Apakah build ini tersedia dengan perbaikan? Saya masih menghadapi masalah ini dengan grafik tinggi.
Apakah perbaikan ini tersedia di build atau kita harus membuat override ?
Masalah ini telah ditutup secara otomatis karena belum ada tanggapan atas permintaan kami untuk informasi lebih lanjut dari penulis asli. Dengan hanya informasi yang sedang dalam masalah, kami tidak memiliki cukup informasi untuk mengambil tindakan. Harap hubungi jika Anda memiliki atau menemukan jawaban yang kami butuhkan sehingga kami dapat menyelidiki lebih lanjut.
Dear @niklasvh ,
Terima kasih untuk perpustakaan yang luar biasa ini. Saya dapat mereproduksi masalah ini dengan versi terbaru - v1.0.0-rc.3
Saya telah membuat contoh pada CodePen di sini (khusus Chrome) di mana Anda akan melihat bahwa beberapa simpul teks (dalam judul Grafik) diduplikasi.
Langkah-langkah untuk mereproduksi -
Judul grafik ditambahkan pada Baris #193
@hyojin , maukah Anda membuka masalah ini lagi?
Salam,
Karan
Hai @karannagupta
Bisakah Anda mencoba cabang saya untuk memeriksa apakah itu berasal dari alasan yang sama?
Hai @hyojin
Dengan versi perpustakaan Anda (v0.5.0-alpha2) itu tidak berfungsi. Anda dapat menguji perpustakaan Anda
Juga, saya ingin menggunakan html2canvas versi terbaru. Saya juga tidak perlu menggunakan html2canvas.svg.
Salam,
Karan
Ternyata ini adalah masalah dengan font Unicode
Komentar yang paling membantu
@hyojin
Setelah mengujinya di IE, perbaikan Anda tidak berfungsi karena properti
parentElement
tidak terisi pada simpul saat ini. GunakanparentNode
sebagai gantinya! Bagaimanapun, itu akan lebih jelas karena kita masuk keNodeParser
dan berbicara tentang node.js.Jika tidak, alih-alih menguji nama tag, saya mengubah kode saya untuk menguji instance
parentNode
dan memproses node saat ini memilikiTextContainer
hanya jika parentNode bukanSVGElement
.Ini berfungsi pada chrome dan ie11. di firefox saya tidak dapat mengujinya karena bug kanvas kosong!
kode saya
Saya harap ini membantu.