2010-10-04 2 views
3

Мое приложение создает PDF-файлы, используя изображения, хранящиеся в EAR. Изображения меняются примерно ежемесячно, и я хотел бы переместить их в базу данных, чтобы избежать развертывания при каждом изменении файла изображения.Чтение FOP изображений из базы данных

Unforunately есть проблема:

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

ФОП может просто принять URL в качестве параметра. Я мог бы создать сервлет, который читает базу данных и может дать изображение, а затем я мог бы ссылаться на url сервлета из контекста FOP, но я думаю, что это не лучшее решение. Другое решение будет хранить изображения в файловой системе и записывать имена файлов в базе данных, но мне не нравится ни один из этих параметров. Что вы думаете об этих решениях? Есть ли третий? Спасибо Zoltan

ответ

2

Я думаю, что ваш вариант сервлета, вероятно, лучший.

Вот еще один вариант, не уверен, что он хороший. Храните изображения в базе данных с именем файла в качестве первичного ключа. Во время запуска приложения вытащите все изображения из базы данных и напишите их в указанные имена файлов в соответствующем месте, чтобы логика FOP могла их найти.

Либо приложение необходимо перезапустить, когда изображение будет изменено в базе данных, либо вам нужно будет добавить метод принудительного обновления файлов изображений на диске.

2

Предполагая, что вы внедряете FOP в свое приложение и программно выполняете преобразование, вы должны иметь возможность использовать настраиваемый URI-резольвер, чтобы выполнить это.

Тогда ваш пример станет чем-то вроде этого (вы можете использовать любую схему вместо «дб»):

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

Вы должны зарегистрировать «дб:» URI схема обработчика с ФОП User Agent (или FOP) перед обработкой. Проверьте FOP embedding guide для получения более подробной информации (поиск по «URIResolver»).

Кроме того, FOP поставляется с ServletContextURIResolver, который вы можете использовать в качестве примера, см. How to use Apache FOP in a Servlet.

Смежные вопросы