【问题标题】:Anyone know of a good algorithm for rendering an HTML table to an image?任何人都知道将 HTML 表格呈现为图像的好算法吗?
【发布时间】:2010-09-16 20:02:33
【问题描述】:

RFC 1942 中提到了一个标准的两遍算法:http://www.ietf.org/rfc/rfc1942.txt 但是我还没有看到任何好的实际实现。有人知道吗?我无法在 Mozilla 或 WebKit 代码库中找到任何有用的东西,但我不完全确定在哪里寻找。

我想这实际上可能是一个更深层次的问题,因为必须实际呈现 HTML(表格单元格的内容),但只是为了保持简单 - 将纯文本 HTML 表格作为图像。即使是忽略“作为图像”部分的 HTML 表格渲染算法...

【问题讨论】:

  • 你要算法,人家推荐工具。我不喜欢这个。

标签: html algorithm image-processing


【解决方案1】:

看看Prince XML - 它是一种将 CSS 样式的 XML(包括 XHTML)文档呈现为 PDF 的商业工具。该工具符合主要的 W3C 标准,例如 XHTML 和 CSS2.1。您可以从他们的主页试用免费的演示版!

既然你想要一张图片:以编程方式将生成的 PDF 转换为图片应该不是什么大问题。

【讨论】:

  • 感谢克里斯托夫!这看起来是一个有趣的工具——我想知道他们是如何捕获 HTML 的……嗯。可惜是商业的!我想从头开始实现它,或者至少使用一个我可以从中学习的开源库。
  • 查看此线程以了解具有类似工作的开源项目 - stackoverflow.com/questions/597348/…
【解决方案2】:

一个接近的工具是:http://www.terrainformatica.com/htmlayout/main.whtm

这个库提供了一种将渲染的 HTML 捕获到图像的方法,但是它不是开源的(但是免费的!)。希望对大家有用!

不幸的是,我的应用是跨平台的 C/C++,没有 MFC 或平台依赖性(噩梦!)。我希望找到一种用于表格渲染的通用算法。我认为 RFC 中的 2-pass 选项非常接近,所以我可能会深入研究并反对它。如果可以的话,我一定会在博客上发布我的最终解决方案!

【讨论】:

    【解决方案3】:

    如果您有 XHTML,而不是纯 HTML,您应该能够检索这些单元格的内容以及有关表格结构的信息:colspan、rowspan 等。使用这些信息,您可以使用自己的边框呈现表格, padding 和 margin 值。

    当您还想呈现用户定义的尺寸时,事情会变得复杂。但是为了检索表数据并绘制它,您可以使用 XML 解析器。 PHP的解析器在这里:http://ca3.php.net/xml

    【讨论】:

    • 谢谢,但获取实际的表信息不是问题——实际执行渲染操作是为了获取信息!再次感谢您的建议!
    【解决方案4】:

    如果可以选择商业工具,请查看:

    HtmlCapture ActiveX Control V2.0 (originally named HtmlSnap)

    他们声称的一些功能:

    • 通过调用 SnapHtmlString(),您可以为 html 字符串拍摄快照。
    • 获取由 Microsoft IE 或 Mozilla Firefox 呈现的快照图像。
    • 只需调用 SnapUrl() 和 SaveImage(),您就可以将网页快照转换为各种图像,例如 BMP、JPG、JPEG、GIF、PNG、TIF、TGA 和 PCX。
    • 将 html 转换为 EMF 和 WMF 等矢量图像格式。
    • 自包含 ActiveX 控件,没有第三方依赖项。
    • 支持生成图像的自定义 gdi 输出。
    • 支持将生成的图像保存到文件和内存中。
    • 支持保存全尺寸网页和缩略图。
    • 将整个网页的快照制作成一张不带滚动条的图像。
    • 使用高效算法制作灰度或黑白图像以保持质量。
    • 支持JPEG压缩级别,TIFF和GIF压缩方式选择。
    • 支持在图像中设置颜色深度,同时尽可能保持图像质量。
    • 根据需要在网页上选择性地保存 activeX、图像、Java 小程序、脚本和视频。
    • 在快照请求中发送自定义 cookie、http 标头、凭据。
    • 通过代理服务器拍摄网页快照。
    • 提供了 30 多个用 VC、C-、Delphi、VB、C++ Builder、Java、JScript、Perl、VBScript、ASP、ASP.net 和 PHP 编写的示例。

    【讨论】:

    • 谢谢!这很有帮助而且很接近。我发现有一个免费的库可以做类似的事情:terrainformatica.com/htmlayout/main.whtm 唯一的问题是我想在没有任何外部库的情况下在低级别执行此操作,尤其是不是商业的。不过谢谢!
    • @christopher-lang 很好的发现; HTML 布局看起来很有趣。
    【解决方案5】:

    我不确定这是否符合您的限制,但您可以尝试使用 IE 或带有 MSHTML 和 IHTMLElementRender 接口的 IE 控件将表格呈现到设备上下文。

    【讨论】:

    • 感谢您的建议 - 不幸的是,这个解决方案将是跨平台的(和移动的!)所以我试图获得一个没有第三方库的通用算法。再次感谢!
    【解决方案6】:

    由于可以指定单元格大小、表格嵌套在表格中等的各种方式,html 表格呈现非常重要。

    如果你想要的只是图像,一个简单的解决方案是 .NET 浏览器控件(基本上是 IE 的 COM 组件)和屏幕捕获功能

    如果你想获取一些源来操作,Mozilla 源应该仍然可用

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-10
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多