是否可以捕获或打印html画布中显示的图像或pdf?
我希望通过画布生成图像,并能够从该图像生成png。
是否可以捕获或打印html画布中显示的图像或pdf?
我希望通过画布生成图像,并能够从该图像生成png。
当前回答
另一个有趣的解决方案是PhantomJS。这是一个可以用JavaScript或CoffeeScript编写脚本的无头WebKit。
其中一个用例是屏幕捕获:您可以通过编程方式捕获web内容,包括SVG和画布,和/或使用缩略图预览创建网站屏幕截图。
最好的切入点是屏幕捕获wiki页面。
这是一个很好的极地时钟示例(来自RaphaelJS):
>phantomjs rasterize.js http://raphaeljs.com/polar-clock.html clock.png
是否要将页面呈现为PDF?
> phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
其他回答
如果你想让画布消失,你可以使用这个片段
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<canvas id=canvas width=200 height=200></canvas>
<iframe id='img' width=200 height=200></iframe>
<script>
window.onload = function() {
var canvas = document.getElementById("canvas");
var context = canvas.getContext("2d");
context.fillStyle = "green";
context.fillRect(50, 50, 100, 100);
document.getElementById('img').src = canvas.toDataURL("image/jpeg");
console.log(canvas.toDataURL("image/jpeg"));
}
</script>
</body>
</html>
如果您正在使用jQuery(很多人都这么做),那么您可以这样实现接受的答案:
var canvas = $("#mycanvas")[0];
var img = canvas.toDataURL("image/png");
$("#elememt-to-write-to").html('<img src="'+img+'"/>');
这是另一种方式,没有字符串,尽管我不知道它是否更快。而不是toDataURL(正如这里所有问题所建议的那样)。在我的情况下,我希望阻止dataUrl/base64,因为我需要一个数组缓冲区或视图。所以HTMLCanvasElement中的另一个方法是toBlob。(TypeScript函数):
export function canvasToArrayBuffer(canvas: HTMLCanvasElement, mime: string): Promise<ArrayBuffer> {
return new Promise((resolve, reject) => canvas.toBlob(async (d) => {
if (d) {
const r = new FileReader();
r.addEventListener('loadend', e => {
const ab = r.result;
if (ab) {
resolve(ab as ArrayBuffer);
}
else {
reject(new Error('Expected FileReader result'));
}
}); r.addEventListener('error', e => {
reject(e)
});
r.readAsArrayBuffer(d);
}
else {
reject(new Error('Expected toBlob() to be defined'));
}
}, mime));
}
blobs的另一个优点是可以创建ObjectUrl来将数据表示为文件,类似于HTMLInputFile的“文件”成员。更多信息:
https://developer.mozilla.org/en/docs/Web/API/HTMLCanvasElement/toBlob
最初的答案是针对一个类似的问题。已修订如下:
const canvas = document.getElementById('mycanvas')
const img = canvas.toDataURL('image/png')
使用IMG中的值,您可以将其写入新图像,如下所示:
document.getElementById('existing-image-id').src = img
or
document.write('<img src="'+img+'"/>');
我会使用“wkhtmltopdf”。它工作得很好。它使用webkit引擎(在Chrome、Safari等中使用),并且非常容易使用:
wkhtmltopdf stackoverflow.com/questions/923885/ this_question.pdf
就是这样!
试试看