【发布时间】:2019-12-16 15:18:29
【问题描述】:
我已从数据库中提取数据以创建一个 HTML 表,我希望能够将其保存为服务器上的 PNG。
当我使用 PHP 将 PNG 保存到服务器时,它是空白的。
我创建了静态代码(即不是来自数据库)来说明我的示例。
如果我手动右键单击图像,然后另存为然后图像被正确保存,只有当我尝试自动化它时图像是空白的。我在 Chrome 和 Firefox 中都试过了,结果都一样。
如果有人可以帮助我纠正我做错的任何事情,我将不胜感激。谢谢。
我正在使用:
- PHP 7.3.4
- jQuery 3.4.1
- 铬 76.0.3809.100
- 火狐 68.01
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script src="jquery-3.4.1.min.js" type="text/javascript"></script>
</head>
<body>
<div id="invoicetable">
<div xmlns="http://www.w3.org/1999/xhtml">
<style>
body {font-family: courier new; font-size: 13px; }
td {padding: 2px 5px 2px 5px; }
.headerTD {font-weight: bold; }
.w60 {width: 60px; }
.w80 {width: 80px; }
.w100 {width: 100px; }
.w120 {width: 120px; }
.w160 {width: 160px; }
</style>
<table class='' border='01' style='border-collapse: collapse; font-size: 14px; font-family: trebuchet ms; '><tr><td class='headerTD w100'>Date</td><td class='headerTD w60'>Type</td><td class='headerTD w160'>Detail</td><td class='headerTD w120'>Username</td><td class='headerTD w100'>Line</td><td class='headerTD w100'>Start Date</td><td class='headerTD w100'>End Date</td><td class='headerTD w80'>Subtotal</td></tr><tr><td>23/07/2019</td><td>Credit</td><td>Business Fibre 1</td><td>abc@def.com</td><td>011122223333</td><td>23/07/2019</td><td>21/08/2019</td><td>£ <div style='float: right'>-7.74</div></td></tr><tr><td>04/08/2019</td><td>Charge</td><td>Business Fibre 1</td><td>ghi@jkl.com</td><td>01234567890</td><td>04/08/2019</td><td>03/09/2019</td><td>£ <div style='float: right'>22.50</div></td></tr><tr><td>04/08/2019</td><td>Charge</td><td>Line Rental</td><td></td><td>01234567890</td><td>04/08/2019</td><td>03/09/2019</td><td>£ <div style='float: right'>15.66</div></td></tr><tr><td>04/08/2019</td><td>Charge</td><td>Line Rental</td><td></td><td>01234567890</td><td>04/07/2019</td><td>03/08/2019</td><td>£ <div style='float: right'>0.00</div></td></tr><tr><td colspan='7'></td><td>£ <div style='float: right'>30.42</div></td></tr></table>
</div>
</div>
<br>
<br>
<canvas id="canvas" width="930" height="150"></canvas>
<script>
$(function() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var imgW = 930;
var imgH = 150;
ctx.fillStyle = "white";
ctx.fillRect(0, 0, imgW, imgH);
var data = "<svg xmlns='http://www.w3.org/2000/svg' width='" + imgW + "' height='" + imgH + "'>" + "<foreignObject width='100%' height='100%'>" + $("#invoicetable").html() + "</foreignObject>" + "</svg>";
var DOMURL = self.URL || self.webkitURL || self;
var img = new Image();
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);
DOMURL.revokeObjectURL(url);
};
img.src = url;
var canvas = document.getElementById("canvas");
var pngData = canvas.toDataURL("image/png");
$.post("savepng.php", {
pngData: pngData
}, function(data) {});
});
</script>
</body>
</html>
savepng.php
<?php
$aaa = explode(",", $_POST['pngData']);
file_put_contents("invoicedata.png", base64_decode($aaa[1]));
?>
【问题讨论】:
-
toDataURL预先添加以下data:image/png;base64,。在服务器上解码之前,您需要将其删除。 -
@LeeTaylor 他正在删除它。
标签: php jquery html html5-canvas