Я понимаю, что холст не может напрямую визуализировать HTML. Однако, похоже, есть возможные способы обхода. Мне не нужен HTML-код для рендеринга, но я бы хотел, по крайней мере, изображение визуализированного HTML.Как я могу сделать HTML5 canvas display HTML?
С этой целью я попытался преобразовать HTML в SVG. Это работает с очень простым HTML, но ломает многие случаи использования (например, включая изображение в HTML):
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img = new Image();
var data = '<svg xmlns="http://www.w3.org/2000/svg" width="' + screen.width + '" height="' + screen.height + '">' +
'<foreignObject width="100%" height="100%">' +
'<div xmlns="http://www.w3.org/1999/xhtml">' +
document.body.innerHTML +
'</div></foreignObject></svg>'
var svg = new Blob([data], {type: 'image/svg+xml;charset=utf-8'});
var url = DOMURL.createObjectURL(svg);
img.onload = function() {
ctx.drawImage(img,0,0,c.width,c.height);
DOMURL.revokeObjectURL(url);
}
img.src = url;
Есть более простой способ получения HTML отображения правильно на холсте?
«SVG изображения не разрешено загружать любые внешние ресурсы, например, даже те, которые кажутся из того же домена.» https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Drawing_DOM_objects_into_a_canvas Попробуйте http://cburgmer.github.io/rasterizeHTML.js/ –
http://html2canvas.hertzen.com/ – dandavis
Взгляните на ссылку dandavis - она работает для html с простым стилем. Если вам нужно что-то работать на страницах с большим количеством стилей, вы можете загрузить безгласный браузер на свой сервер и передать html + css в сервер-браузер для создания изображения. Я могу порекомендовать PhantomJS: http://phantomjs.org/ – markE