2010-10-04 132 views
3

我的應用程序使用存儲在EAR中的圖像生成PDF。這些圖像每月都會更改一次,我想將它們移到數據庫中,以避免每次更改圖像文件時進行部署。從數據庫中讀取FOP圖像

Unforunately有一個問題:

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

的FOP可以只接受URL作爲參數。 我可以創建一個讀取數據庫的servlet,並可以給出一個圖像,然後我可以從FOP上下文中引用servlet url,但我認爲這不是最好的解決方案。 另一種解決方案是將圖像存儲在文件系統中並將文件名記錄在數據庫中,但我確實不喜歡這些選項。 您如何看待這些解決方案?有第三個嗎? 謝謝 Zoltan

回答

2

我認爲你的servlet選項可能是最好的。

這是另一個選項,不知道它是否是一個好選擇。將圖像以文件名作爲主鍵存儲在數據庫中。在應用程序啓動過程中,將所有圖像從數據庫中提取出來,並將它們寫入給定文件名的適當位置,以便FOP邏輯可以找到它們。

無論何時在數據庫中更改映像時都需要重新啓動應用程序,或者需要添加一種方法強制它刷新磁盤上的映像文件。

2

假設您在應用程序中嵌入FOP並以編程方式運行轉換,您應該能夠使用自定義URI解析器來完成此操作。

然後你的例子會變成這樣的事情(你可以用它代替「DB」的任何方案):

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

您需要註冊「分貝:」有FOP用戶代理URI方案處理程序(或FOP工廠)在處理之前。詳細信息請查詢FOP embedding guide(搜索「URIResolver」)。

此外,FOP附帶ServletContextURIResolver,您可以使用它作爲示例,有關詳細信息,請參閱How to use Apache FOP in a Servlet