I want to capture my webpage, In order to this I find html2canvas, when I use as shown below ,my UTF-8 (persian) characters get in trouble and this direction destroyed as you see.
HTML:
<div id="wrapper">
<span>این کاراکتر ها بهم میریزند</span>
</div>
JavaScript:
$(document).ready(function() {
html2canvas($("#wrapper"), {
onrendered: function (canvas) {
theCanvas = canvas;
document.body.appendChild(canvas);
canvas.toBlob(function (blob) {
saveAs(blob, "Dashboard.png");
});
}
});
});
WebPage:
Captured WebPage via html2canvas:
you can see full example here
What is wrong with my implementation?
I want to capture my webpage, In order to this I find html2canvas, when I use as shown below ,my UTF-8 (persian) characters get in trouble and this direction destroyed as you see.
HTML:
<div id="wrapper">
<span>این کاراکتر ها بهم میریزند</span>
</div>
JavaScript:
$(document).ready(function() {
html2canvas($("#wrapper"), {
onrendered: function (canvas) {
theCanvas = canvas;
document.body.appendChild(canvas);
canvas.toBlob(function (blob) {
saveAs(blob, "Dashboard.png");
});
}
});
});
WebPage:
Captured WebPage via html2canvas:
you can see full example here
What is wrong with my implementation?
Share Improve this question asked May 31, 2015 at 8:27 vahid kargarvahid kargar 7942 gold badges9 silver badges23 bronze badges 08 Answers
Reset to default 6This is a bug with html2canvas (Arabic Encoding with html2canvas) and can be fixed by setting text-align: left
on your wrapper element.
Here's an updated fiddle http://jsfiddle.net/ydeL72m8/1/
Set the box css that have trouble to :
text-align: left; //or right or justify
that work for me.
Just replace this line to new edited line
return styles.letterSpacing !== 0 ? toCodePoints(value).map(function (i) { return fromCodePoint(i); }) : breakWords(value, styles);
new line instead
return [value];
Instead of the sentence in the html2canvas.js file
textList = (!options.letterRendering && /^(left|right|justify|auto)$/.test(textAlign) && noLetterSpacing(getCSS(el, "letterSpacing"))) ? textNode.nodeValue.split(/(\b| )/) : textNode.nodeValue.split("");
use:
textList = (!options.letterRendering && /^(left|right|justify|auto|center)$/.test(textAlign) && noLetterSpacing(getCSS(el, "letterSpacing"))) ? textNode.nodeValue.split(/(\b| )/) : textNode.nodeValue.split("");
you must to use last version library html2canvas this reslove your problem;
Add this styling to the wrapper object:
letter-spacing: normal !important;
source : Arabic font rendering
I faced the same messy Arabic letters with only <h1.. h6> elements, I solved it by using styled p [Paragraph] elements instead.
I faced the same issue in version 1.4.1 and fixed it by adding
letter-spacing: normal;
to the wrapping element