适当的报告合并技术,用于从两个格式化的源创建页面

时间:2012-11-02 02:23:44

标签: java report xsl-fo docx apache-fop

考虑一个由标题,详细信息顶部,详细信息底部和页脚组成的报告页面。我有一个运行“App”的服务。此应用程序将生成最终将出现在报告的详细信息底部的内容。它会将其输出存储在文件系统中。在App生成其输出(和关闭)之后,单独的“服务”将生成最终报告“合并”应用程序生成的内容(该服务提供页眉,页脚和详细信息顶部区域的内容)。如果我在Word中手动生成这个,我会在最后的报告文档中插入word文档作为对象。

我正在尝试确定一种合适的技术来实现这一目标。

要求包括:

  1. 生成最终报告的服务将是Java服务运行 在Linux机器上。我将开发此代码。
  2. 制作详细内容的应用程序可能是Windows (例如,C#)或Linux(例如,Java)应用程序。其他任何数量 开发人员将开发此代码并与我的接口连接 通过我将提供的SDK服务。他们被认为是 熟练的开发人员,但我不知道他们有什么经验 任何报告生成技术
  3. 该服务使用的模板将提供相同的外观和感觉 无论运行的应用程序是什么,到完成的报告 应用程序将完全控制细节底部的内容 完成报告的部分。换句话说,如果是模板 在完成的报告中分配一个7Wx5H的“框架” 细节底部,应用程序本质上会有一个7x5W的空白 要使用的页面。
  4. 完成的报告可以是多个页面,第一页可以 与其余页面不同。如果应用程序产生多个 (例如,7Hx5W页面),该服务将每个App页面合并到 因此,完成报告的每页的详细信息 - 底部部分 离开应用程序以处理分页,如果它是 制作整个报告本身。
  5. 在某些时候,我想为最终用户提供一个用于管理的UI 完成报告(模板)的布局。
  6. 我真的不关心App开发者如何制作内容 被插入细节底部框架,因为他正在为我提供 一个完成的可执行文件供我运行,我不会向他提供任何 用于管理其报告布局/内容的UI
  7. 交付给最终用户的完成报告将以PDF格式显示。
  8. 因为我不确定App开发人员的技能组合 可能有很多应用程序和开发人员,我希望他们生产 输出我可以接受合并到dertail-bottom框架中 被广泛接受,支持并且不会过于繁琐。
  9. 到目前为止向我提出的各种技术是:

    1. Apache FOP(XML-FO)
    2. DOCX
    3. iText的

2 个答案:

答案 0 :(得分:1)

以下是使用FOP的解决方案:

  • 让应用程序将相应的数据保存到两个具有固定名称的XML文件中。因此,您的API将是数据生产者必须遵守的XML文档架构。

  • 提供一个XSL文件,其中包含完整PDF的布局,并使用document()xsl函数读回这两个文件。

  • 为了同时处理多个报告,请为每个报告使用一个目录。

  • FOP会照顾分页。

如果您希望最终用户可以配置布局,您可以让他们以应用程序定义的方式更改xsl。您还可以将XSL拆分为多个部分(对于第一个报表,对于第二个报表,对于整个布局),并将它们全部导入到一个主模板中。

答案 1 :(得分:0)

如果最终输出是PDF,可以精确控制外观,为什么不允许生成底部框架的应用程序也生成可以精确控制外观的PDF?

PDF支持的一个功能是“Form XObject”,它允许将一个PDF中的内容包含到另一个PDF中。您甚至可以从页面中删除特定的矩形,这样您就可以允许应用创建所需的任何大小的PDF,并指定包含内容的矩形。

必须有支持Form XObjects的Java库,因为它并不难。我编写了一个Python库名pdfrw,它允许您以这种方式很容易地合并页面。我还没有把它记录得那么好,但是该网站上有几个例子,一个非常相关的例子here