是否可以捕获或打印html画布中显示的图像或pdf?
我希望通过画布生成图像,并能够从该图像生成png。
是否可以捕获或打印html画布中显示的图像或pdf?
我希望通过画布生成图像,并能够从该图像生成png。
当前回答
这是另一种方式,没有字符串,尽管我不知道它是否更快。而不是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
其他回答
function exportCanvasAsPNG(id, fileName) {
var canvasElement = document.getElementById(id);
var MIME_TYPE = "image/png";
var imgURL = canvasElement.toDataURL(MIME_TYPE);
var dlLink = document.createElement('a');
dlLink.download = fileName;
dlLink.href = imgURL;
dlLink.dataset.downloadurl = [MIME_TYPE, dlLink.download, dlLink.href].join(':');
document.body.appendChild(dlLink);
dlLink.click();
document.body.removeChild(dlLink);
}
我会使用“wkhtmltopdf”。它工作得很好。它使用webkit引擎(在Chrome、Safari等中使用),并且非常容易使用:
wkhtmltopdf stackoverflow.com/questions/923885/ this_question.pdf
就是这样!
试试看
如果您通过服务器进行下载(这样您可以命名/转换/后处理等文件),这里有一些帮助:
-使用toDataURL发布数据
-设置标题
$filename = "test.jpg"; //or png
header('Content-Description: File Transfer');
if($msie = !strstr($_SERVER["HTTP_USER_AGENT"],"MSIE")==false)
header("Content-type: application/force-download");else
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");
header("Expires: 0"); header("Cache-Control: must-revalidate");
header("Pragma: public");
-创建图像
$data = $_POST['data'];
$img = imagecreatefromstring(base64_decode(substr($data,strpos($data,',')+1)));
-将图像导出为JPEG
$width = imagesx($img);
$height = imagesy($img);
$output = imagecreatetruecolor($width, $height);
$white = imagecolorallocate($output, 255, 255, 255);
imagefilledrectangle($output, 0, 0, $width, $height, $white);
imagecopy($output, $img, 0, 0, 0, 0, $width, $height);
imagejpeg($output);
exit();
-或透明PNG
imagesavealpha($img, true);
imagepng($img);
die($img);
您可以使用jspdf将画布捕获为图像或pdf,如下所示:
var imgData = canvas.toDataURL('image/png');
var doc = new jsPDF('p', 'mm');
doc.addImage(imgData, 'PNG', 10, 10);
doc.save('sample-file.pdf');
更多信息:https://github.com/MrRio/jsPDF
在某些版本的Chrome上,您可以:
使用绘制图像函数ctx.drawImage(image1,0,0,w,h);在画布上单击鼠标右键