【问题标题】:how mature is HTML+CSS now in relation to generating reports for printing?HTML+CSS 现在在生成打印报告方面有多成熟?
【发布时间】:2023-03-23 13:41:01
【问题描述】:

我正在考虑将一系列桌面业务应用程序的所有报告直接创建为 html。大多数报告是表格(可能是复合报告)、页眉、页脚等(没有图像、矢量图形等)。

在 SO 中搜索后,我阅读了很多关于分页符问题和类似问题的帖子(我根本不需要像素定位,但是可以控制分页符)。

例如,假设我有一个带有货币值的大表,我需要每页表的最后一行来显示当时的运行总计。这是很容易做到的事情,或者我会遇到很多麻烦?

什么技术可以帮助我?

  • HTML5
  • Javascript
  • CSS
  • PHP 库
  • jQuery

一些注意事项:

  • html 将显示嵌入 chrome 或 firefox 引擎,因此浏览器之间的差异对我来说不是问题。
  • 如果这有助于更轻松地生成报告,我可以嵌入 php 预处理器,我只是在寻找手头最好的技术来使工作顺利进行..
  • 我厌倦了带有“所见即所得”设计器(Crystal Report、FastReport、ReportBuilder 等)的报告生成器

谢谢!

【问题讨论】:

  • 我会说你的主要问题是 HTML+CSS 作为无页面媒体,意识到页面类型/高度可以正确中断,等等......
  • 如果您问的是关于 HTML 成熟度的问题,此时您可能希望避免谈论 HTML5... :)
  • 是的,请注意,我承认我在 HTML 和 Web 技术(Javascript、HTML5、CSS 等)方面没有太多经验,但是在桌面应用程序、数据库、业务逻辑方面是的,会计等

标签: php javascript html printing


【解决方案1】:

浏览器对打印的支持通常很糟糕。但是,还有其他工具,特别是 Prince(不是免费的)和 Flying Saucer免费)可以从 XML/HTML 和 CSS 生成 PDF 输出。 Prince 甚至支持 JavaScript,虽然我没有任何经验。

我当前的应用程序中有一个 Java 后端,所以对我来说 Flying Saucer 可以很好地处理简单的报告。我使用 FreeMarker 预处理 HTML 模板,然后通过 Flying Saucer 运行结果。它有一个令人惊讶的智能渲染引擎。

CSS3 Paged Media 规范(好吧,提议的规范)中有各种很酷的东西,但它们几乎完全没有在浏览器中实现。即使是 CSS2 分页媒体的东西也只是半心半意地支持。

【讨论】:

  • 非常好的答案。 HTML 和 CSS 还不错。这都是关于具体实现的。
【解决方案2】:

说到王子,你可能会去看看 DocRaptor。 DocRaptor 是另一个HTML to PDF conversion 应用程序。它使用 Prince XML,并且比同类程序更好地处理 CSS。

它不是免费的,但为所有帐户提供了 30 天的免费试用期,因此至少尝试一下是没有坏处的。

DocRaptor

【讨论】:

    【解决方案3】:

    我们几乎在一年前就采取了您正在考虑的确切举措,并且没有回头。与我们客户的大部分沟通都是通过网络进行的,因此非常适合。他们可以在我们的网站上轻松查看 html 输出,并且可以在必要时生成页面(服务器端)的 pdf。我们用于 pdf 转换的程序是一个免费、易于使用的开源项目,名为wkhtmltopdf

    我们所处的位置很棒,但到达这里却很困难。

    决定使用哪个 pdf 引擎是一个漫长而痛苦的过程。简而言之,HTML 是用于查看 Internet 上的页面,而不是用于查看纸上的页面。分页符将是你在这个游戏中存在的祸根——你实际上必须测量每一页并为每一个报告创建自己干净的分页符(否则,所有的 html 到 pdf 转换器都会只需继续将文档呈现到下一页,因为它根本没有遇到分页符)。 更复杂的是,每个 html-to-pdf 引擎都以不同的方式处理这个 sh*t,你会必须编写一个量身定制的解决方案来测试每个解决方案,看看它是否满足您的个人需求。

    现在,好消息:

    您可以听取我的建议并使用wkhtmltopdf 为您的最终报告输出省去很多麻烦。这个小程序简直太棒了——它使用 webkit 引擎,准确呈现 CSS/javascript,具有页眉/页脚控制,可选地创建目录页面,并且(最重要的是)始终如一地生成精美的 pdf,而无需自定义你的代码库。它还有各种很棒的命令行开关,而且非常非常快。我再说一遍:非常非常快。

    最重要的是,它是一个可用于批处理的命令行工具。我有没有提到它真的非常快?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多