2010-10-04 5 views
3

Mon application génère des fichiers PDF en utilisant des images stockées dans le fichier EAR. Les images sont changées sur une base mensuelle, et je voudrais les déplacer dans la base de données pour éviter le déploiement par chaque changement de fichier d'image.Lecture d'images FOP à partir de la base de données

Unforunately il y a un problème:

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

Le FOP peut simplement accepter URL comme paramètre. Je pourrais créer une servlet qui lit la base de données et qui peut donner une image, puis je pourrais me référer à l'URL du servlet depuis le contexte FOP, mais je pense que ce n'est pas la meilleure solution. Une autre solution serait de stocker les images dans le système de fichiers et d'enregistrer les noms de fichiers dans la base de données, mais je n'aime aucune de ces options. Que pensez-vous de ces solutions? Y en a-t-il un troisième? Merci Zoltan

Répondre

2

Je pense que votre option de servlet est probablement la meilleure.

Voici une autre option, je ne sais pas si c'est un bon choix. Stockez les images dans la base de données avec le nom de fichier en tant que clé primaire. Lors du démarrage de l'application, sortez toutes les images de la base de données et écrivez-les dans les noms de fichiers donnés dans l'emplacement approprié afin que la logique FOP puisse les localiser. L'application doit être redémarrée chaque fois qu'une image est modifiée dans la base de données ou vous devez ajouter une méthode pour la forcer à actualiser les fichiers d'image sur le disque.

2

En supposant que vous intégrez FOP dans votre application et exécutez par programme la transformation, vous devriez pouvoir utiliser un résolveur d'URI personnalisé pour accomplir ceci.

Ensuite, votre exemple deviendrait quelque chose comme ça (vous pouvez utiliser tout système au lieu de « db »):

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

Vous devez enregistrer « db: » gestionnaire de schéma d'URI avec FOP User Agent (ou Usine de FOP) avant le traitement. Vérifiez le FOP embedding guide pour plus de détails (recherchez "URIResolver").

En outre, FOP est livré avec ServletContextURIResolver que vous pouvez utiliser comme exemple, voir How to use Apache FOP in a Servlet pour plus de détails.

Questions connexes