【问题标题】:Creating tables within an HTML5 Canvas [closed]在 HTML5 画布中创建表格 [关闭]
【发布时间】:2013-01-26 20:22:10
【问题描述】:

我有一个项目,我需要将 html 表格元素保存为图像。似乎最好的方法是将表格中的数据转换为画布,然后调用 toDataURL 来获取图像。在搜索了here 提到的许多表格之后,看起来他们都只是在常规 html 表格周围添加了一个包装器,以使其看起来更漂亮。

  1. 是否有任何简单的方法或库(这不是花哨的)在画布元素中以表格格式绘制数据?
  2. 是否还有其他方法可以将表格元素的内容保存到图像中?

由于这是一个 Rails 项目,我希望 JS 库使用 JQuery。

编辑

我忘了提到表格中的一些条目是链接。显然这在普通的 html 表格中效果很好,但它也需要在画布版本中工作。

编辑 2

显然我在第一次编辑时并不清楚。向用户显示的版本(无论是表格还是画布)都需要有链接。显然,最终的图像不会。

【问题讨论】:

  • 乔恩,只是一个需要澄清的问题:您的服务器 (php/iis) 是否在生成创建 html 表的数据?如果是这样,您可能会考虑使用 php 或 iis 服务器插件将数据表示为 pdf。
  • 一个有趣的命题,如果canvas渲染不行那我试试。我正在使用 Rails,所以我实际上是使用 ERB 将数据直接插入到 DOM 中。

标签: javascript jquery html canvas html-table


【解决方案1】:

这是一个例子(修改自:https://developer.mozilla.org/en-US/docs/HTML/Canvas/Drawing_DOM_objects_into_a_canvas

http://jsfiddle.net/StEcW/1/

$(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>

这工作得很好,但请参阅小提琴,以了解可能无法正常工作的 CSS 的一些奇怪之处。至少,在 Chrome 中,对我来说,表格边框的显示方式不同。

编辑:当然,通过画布实际上并没有多大意义。画布只是绘制我们已经创建的图像。您需要做的就是在 DOM 中显示图像。

【讨论】:

  • 不幸的是,这在我的情况下不起作用,因为表中的某些条目需要是链接。我尝试向小提琴添加一个 href,但它没有在画布上正确呈现。我已经更新了我的问题以添加这个事实。
  • 嗯?你说,“...我需要将一个 html 表格元素保存为图像。”如果您将其保存为图像,您打算如何让超链接...与图像一起工作?
  • 对不起,我不够具体。显示时的表格需要有链接。图像没有。我假设我只会向用户显示画布,但我想我不必这样做。我可以转换为画布,然后转换为图像并保存,然后将原始表格显示给用户。你认为这会奏效吗?
  • 我认为你会这样做。我认为它会起作用。
  • 一个跨浏览器问题——我相信 Internet Explorer 不支持 svg 的
猜你喜欢
  • 1970-01-01
  • 2012-04-27
  • 2012-12-07
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 2011-05-19
相关资源
最近更新 更多