Чтение изображений FOP из базы данных - PullRequest
3 голосов
/ 04 октября 2010

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

К сожалению, есть проблема:

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

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

Ответы [ 2 ]

2 голосов
/ 04 октября 2010

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

Тогда ваш пример станет примерно таким (вы можетеиспользуйте любую схему вместо "db"):

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

Вам необходимо зарегистрировать обработчик схемы URI "db:" в агенте пользователя FOP (или фабрике FOP) перед обработкой.Обратитесь к руководству по встраиванию FOP для получения подробной информации (поиск "URIResolver").

Кроме того, FOP поставляется с ServletContextURIResolver, который можно использовать в качестве примера, см. Как использовать Apache FOPв сервлете для деталей.

2 голосов
/ 04 октября 2010

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

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

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

...