2011-05-01 3 views
1

nous devons créer un document pdf ou doc ​​contenant une partie des données du modèle. Chaque objet de modèle contient des valeurs uniques, plus quelques collections de données connexes, elles sont de longueur variable. Maintenant, certaines parties des données du modèle peuvent être désactivées, de sorte qu'elles ne doivent pas être incluses dans le document final. Je besoin d'un moyen intelligent de créer un document en utilisant des pièces sélectionnées uniquement de données de modèle, et je ne le ferai pas de ne pas courir dans pagaille comme:Créer un document doc/pdf (complexe?) Avec java - quel est le meilleur moyen?

if (DATA_TITLE is selected) 
    add DATA_TITLE to document 
if (DATA_AUTHOR is selected) 
    add DATA_TITLE to document 
etc.. 

Comment puis-je éviter cela d'une manière élégante?

Et l'autre chose: à l'heure actuelle je voulais créer le document "par programmation", en utilisant par exemple Apache POI lib. Mais, peut-être existe-t-il un autre moyen, où je peux utiliser des modèles de document et remplir les données avec des expressions EL, donc en utilisant les champs $ {data.author} avec le modèle. Mais alors, comment gérer le fait, que tous les éléments de données ne peuvent pas être sélectionnés pour l'exportation de documents, et que les collections de données connexes peuvent être de différentes longueurs.

J'ai besoin de votre précieux savoir :)

Répondre

2

Vous pouvez utiliser des transformations XSL-FO si vous ne voulez pas le faire par programme.

Je recommande encore iText.

1

Pour répondre à votre première question, j'utiliserais le modèle de conception Observer pour mettre à jour un modèle de document uniquement lorsque les champs affectés sont modifiés par programmation. Pour votre deuxième question, si vous utilisiez un modèle de document avec un observateur, vous pourriez simplement créer une implémentation par défaut pour vos champs qui ne serait modifiée que par les événements que vous codez dans votre observateur.

Vérifiez le motif: Observer Pattern

+0

Je ne suis pas vraiment sûr où dois-je tenir le crépitement à. Je ne suis pas sûr si nous nous comprenons correctement. Au niveau des données de modèle est une collection de livres. Ces livres ont diverses données les décrivant, comme l'auteur, le titre, etc. L'utilisateur sélectionne par l'intermédiaire de l'interface Web quelles parties de la description des livres doivent être incluses dans le document exporté. Pour l'instant, j'ai une liste triée de tous les livres et je peux vérifier avec 'book.hasPart (PART_NAME)' si la partie description du livre a été sélectionnée. Maintenant, j'ai besoin de mettre toutes ces données dans un document pdf ou doc ​​:) Alors, votre TIP avec le motif Observateur est-il toujours valide? – user1293910asd

+0

Je voudrais ajouter un observateur à votre code qui écoute pour l'utilisateur de sélectionner ce qui doit être inclus. Lorsqu'il est sélectionné/désélectionné, l'observateur peut trouver le livre en question (une collection d'implémentation de Map peut être la meilleure ici) et mettre à jour les variables en conséquence. – Zach

Questions connexes