代码之家  ›  专栏  ›  技术社区  ›  HamoriZ

从数据库读取FOP图像

  •  3
  • HamoriZ  · 技术社区  · 14 年前

    我的应用程序使用存储在EAR中的图像生成PDF。这些图像每月都会进行一次更改,我想将它们移到数据库中,以避免每次更改图像文件时都进行部署。

    不幸的是,有一个问题:

    <fo:block>
               <fo:external-graphic src=”testImage.gif”/>
    </fo:block>
    

    FOP只能接受URL作为参数。 我可以创建一个servlet来读取数据库并给出一个图像,然后我可以从FOP上下文中引用servlet URL,但我认为这不是最好的解决方案。 另一种解决方案是将图像存储在文件系统中,并在数据库中记录文件名,但我不喜欢这些选项。 你觉得这些解决方案怎么样?有第三个吗? 谢谢 佐尔坦

    2 回复  |  直到 14 年前
        1
  •  2
  •   Dave Costa    14 年前

    我认为你的servlet选择可能是最好的。

    这是另一个选择,不确定它是否是一个好的选择。将图像以文件名作为主键存储在数据库中。在应用程序启动期间,将所有图像从数据库中拉出,并将它们写入到适当位置的给定文件名中,以便FOP逻辑可以找到它们。

    无论何时数据库中的映像发生更改,应用程序都需要重新启动,或者您需要添加一种方法来强制它刷新磁盘上的映像文件。

        2
  •  2
  •   Neeme Praks Tim Pote    14 年前

    假设您正在应用程序中嵌入FOP并以编程方式运行转换,那么您应该能够使用自定义的URI解析器来完成这一任务。

    然后您的示例将变成这样(您可以使用任何方案而不是“db”):

    <fo:block>
               <fo:external-graphic src=”db:testImage.gif”/>
    </fo:block>
    

    在处理之前,您需要向FOP用户代理(或FOP工厂)注册“db:”uri方案处理程序。检查 FOP embedding guide 有关详细信息(请搜索“uriresolver”)。

    另外,FOP附带了servletContexturiresolver,您可以将其用作示例,请参见 How to use Apache FOP in a Servlet 详情。