juanmf/neat-reports

报告引擎,以 MS Word 设计,渲染为 PDF|HTML|等

dev-master 2013-01-25 00:08 UTC

This package is not auto-updated.

Last update: 2024-09-28 12:46:36 UTC


README

注意:该项目最初构想为一个 symfony 1.4 插件。原始插件仓库: https://github.com/juanmf/sfPlugins/tree/master/reportPlugin

neatReports 是一个使用 PHP 生成报告的工具,尽管它提供了一个 PHP API,但它集成了多种技术来实现这一目标。报告生成分为三个阶段(三个在线阶段,加上模板设计时间)

  • 数据生成
  • 数据和模板合并。
  • 渲染

数据生成包括任何生成包含报告数据的原始 XML 的东西。当然,这种 XML 结构必须在同一报告的多次渲染中保持一致。由于您在创建模板时会考虑这种结构,因为模板必须消费这种数据 XML。报告引擎提供了一个占位符类来放置这种逻辑,但您也可以在其他方法中生成它,因此您要么提供生成它的回调,要么提供 XML 本身。为了简化,捆绑了一个 Doctrine XML Hydrator,这样您就可以从 Doctrine 查询中获得 XML,如果您使用 Doctrine,这非常方便。如果不使用 Doctrine,utils 中有一个 arrayToXML 方法,它也会有所帮助。

模板必须是一个 XSLT 转换样式表,它将由 PHP XSLT 处理器处理,不要害怕,我提供了一个从 MS WordML 2003 文档自动生成它的方法。这个样式表消费您的数据 XML,并渲染一个 XSL-FO 文档,它代表了渲染的报告,但以 FO 格式。如果想要不同的 XSL-FO,报告仍然需要通过渲染阶段。

在渲染阶段将 XSL-FO 表示转换为 PDF、HTML 或简单的同一 FO。可以轻松添加更多转换。

生成的 PDF 的外观和感觉非常好,归功于 XSL-FO 和 ApacheFOP。它们看起来几乎与您创建的 Word 模板相同(归功于 Word2FO)。当您觉得需要调整自动生成的模板时(如果这种情况发生),您已经制作了一些漂亮的报告,并更熟悉 XSLT 和 XSL-FO。顺便说一下,调整它比从头开始编写要容易得多。

查看 HowToReport 了解可以做什么: https://github.com/juanmf/neatReports/blob/master/doc/HowToReport.pdf?raw=true

依赖项

neatReports 有以下依赖项,其中一些(Word2FO 和 fo2html)我不能打包在一起。

  • Word2FO 是 RenderX 公司的一个强大工具,您可以在这里找到它:http://www.renderx.com/tools/word2fo.html。我创建了一个样式表(Word2XSLTRenderingFO.xsl),它依赖于这个工具,这样您就可以创建消费 XML 数据而不是最终 XSLFO 文档的 XSLT 样式表。虽然我没有打包 Word2FO,但您只需要下载并解压缩到 /doc 目录即可。RenderX.com 将要求您提供邮箱以便下载包含完整许可的样式表(来自 RenderX 页面的文字:"这些样式表由 RenderX 开发团队和 Microsoft 为通用目的准备。")。这用于模板制作,而不是在渲染过程中,但它使生活更加方便。如何编辑 Word 文档以利用我的更改的详细说明在 \doc\HowToReport.pdf
  • ApacheFOP 是一个开源的 FO 处理器,用 Java 编写,我为它创建了一个包装器和一些类,以便将其作为 Web 服务使用(您必须将其部署在应用程序服务器上,例如 Glassfish)或从命令行使用。这个工具是捆绑的。
  • fo2html.xsl 也来自 RendeX(http://services.renderx.com/Content/tools/fo2html.html),我对它进行了一些修改,尚未完成或测试,以生成 Excel 可以理解的 HTML,并修改默认表格宽度。这用于在 HTML 中渲染报告。您应将此样式表放在 \lib\RenderStep3\xsl\fo2html.xsl 中,以匹配 sfExportGlobals.yml 配置。注意:您可以在 http://www.renderx.com/download/shop.html 的免费工具部分找到这两个样式表。

用户手册位于 /doc/HowToReport.pdf // TODO:更新以下步骤,因为安装过程更改为组件安装过程。

  1. 您需要启用 php_soap.dll & php_xsl.dll 扩展

  2. 在 ProjectConfiguration.php 中注册插件 // TODO:更新步骤

  3. 在 setting.yml 中启用_module "export" // TODO:更新步骤

  4. 将 /config/sfExportConfig.yml 复制到 app/config // TODO:更新步骤

  5. 在 sfExportConfig.yml 中,您定义报告 XSLT 样式表的存放位置

  6. 要查看一些示例报告,请将 /modules/export/templates/reports 目录复制到 app/templates

  7. 您可以通过打开 /export 来查看已定义的报告,并测试它们。

  8. 请参见 /modules/export/actions/actions.class.php(渲染动作)以获取如何使用 LayoutManager::render() 的示例

  9. 安装 Glassfish,从 Netbeans(可选,因为您还有来自 CLI 的 FOP 渲染器)

9.1) 打开项目 WebFopWrapper2

9.2) 右键单击 => 清理和构建

9.3) 右键单击 => 部署

9.3.1) 在输出中找到以下 URL

|  INFO: WS00019: EJB Endpoint deployed

|   WebFOPWrapper2  listening at address at http://juanmf-PC:8080/DecretoRenderService/DecretoRender

这应该与 RenderPDFConsummer::$_wsLocation 的值相匹配(我将很快将此值放入配置 yml 中)