1

我需要以多种不同的文件格式创建任意数量的报告。我可以使用 Smarty 模板输出的大多数格式。但是,输出到 Excel 和 PDF 会使事情变得复杂,需要使用 FPDF 或 TCPDF 和 PHPExcel。

我正在尝试找出通过一种或多种设计模式(如果可能)来组织课程的最佳方式。

输出格式:

  • 文字-Smarty
  • 文本(带 PCL 格式) - Smarty
  • CSV - 聪明的
  • HTML - 聪明的
  • Excel - PHPExcel
  • PDF - FPDF / TCPDF

这些格式需要能够在内存中进行流式传输或写入文件以供以后使用。

所有报告唯一一致的是它们需要数据,直到添加 PDF 和 Excel 支持,一个模板。目前我有一个 Report 类,它有一个名为 getData() 的抽象方法。每个子类(例如 SpecificReport)获取它需要的数据并将其存储在类属性中以绑定到模板等。

每个报告都需要以所有格式提供。

Report 类目前处理输出,但添加对 Excel 和 PDF 的支持使这成为不可能。除了像 Smarty 那样将数据绑定到模板之外,还有很多其他功能。每个报告都需要特定的代码。我想我可以在每个报告子类中重载这些方法。

有没有人遇到过类似的任务?

4

1 回答 1

1

听起来您可以使用两步视图模式

本质上,您的报告会分两次呈现。第一遍针对您的模型执行报告逻辑以生成一种原型报告对象。第一遍原始报告包含报告中的所有信息,根据报告需要进行组织和分组。

完成后,原始报告将被输入模板,该模板将其呈现为特定格式(pdf、xls、csv 等)。第二遍生成报告的字节,可以将其存储到文件中或通过网络发送出去。

于 2009-10-05T03:07:27.663 回答