Javascript 在HTML5画布中创建表
我有一个项目,需要将html表格元素保存为图像。这样做的最佳方法似乎是将表中的数据转换为画布,然后调用toDataURL以获取图像。在搜索了前面提到的许多表之后,看起来所有的表都只是在一个普通的html表周围放了一个包装器,使它看起来更漂亮Javascript 在HTML5画布中创建表,javascript,jquery,html,canvas,html-table,Javascript,Jquery,Html,Canvas,Html Table,我有一个项目,需要将html表格元素保存为图像。这样做的最佳方法似乎是将表中的数据转换为画布,然后调用toDataURL以获取图像。在搜索了前面提到的许多表之后,看起来所有的表都只是在一个普通的html表周围放了一个包装器,使它看起来更漂亮 是否有任何简单的方法或库(这并不奇怪)在画布元素中以表格格式绘制数据 是否有另一种我缺少的将表元素的内容保存到图像的方法 由于这是一个Rails项目,我更希望JS库使用JQuery 编辑 我忘了提到表中的一些条目是链接。显然,这在常规html表中工作得很好,
$(函数(){
var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var data=“”+
“”+$(“#mytable”).html()+
"" +
"";
var DOMURL=self.URL | | self.webkitURL | | self;
var img=新图像();
var svg=新的Blob([data]{
类型:“image/svg+xml;charset=utf-8”
});
var url=DOMURL.createObjectURL(svg);
img.onload=函数(){
ctx.drawImage(img,0,0);
revokeObjectURL(url);
};
img.src=url;
});
你好
那里
这工作得很好,但看到小提琴周围的一些奇怪的CSS可能不太正确的工作。至少,在Chrome中,对我来说,表格边框的显示方式不同
编辑:当然,浏览画布实际上没有多大意义。画布正在绘制我们已经创建的图像。您所需要做的就是在DOM中显示图像 不幸的是,这在我的情况下不起作用,因为表中的一些条目需要是链接。我尝试在小提琴上添加a href,但它在画布上的渲染不正确。我更新了我的问题来添加这个事实,嗯?你说,“…我需要将html表元素保存为图像。”如果你将其保存为图像,你打算如何让超链接与图像一起工作?抱歉,我说得不够具体。显示的表格需要有链接。图像没有显示。我假设我只向用户显示画布,但我想我不必这样做。我可以转换为画布,然后转换为图像并保存,然后向用户显示原始表。你觉得这样行吗?我想你会这么做的。一个跨浏览器的问题——我相信InternetExplorer不支持svg的.Jon,只是一个需要澄清的问题:您的服务器(php/iis)是否正在生成创建html表的数据?如果是这样,您可能会考虑使用PHP或IIS服务器插件来将数据表示为PDF。一个有趣的命题,如果画布绘制不起作用,那么我会尝试它。我使用的是Rails,所以我实际上使用ERB将数据直接插入DOM。
$(function() {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
var data = "<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'>" +
"<foreignObject width='100%' height='100%'>" + $("#mytable").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;
});
<div id="mytable">
<div xmlns="http://www.w3.org/1999/xhtml" style='font-size:12px'>
<table border=1 id="amytable">
<tr>
<td>Hello</td>
<td>There</td>
</tr>
</table>
</div>
</div>