Comment générer des documents Word avec Java/MySQL(Publipostage)

Fermé
cool--spirit Messages postés 9 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 6 mai 2013 - Modifié par cool--spirit le 2/05/2013 à 11:38
 Angelo - 22 nov. 2013 à 14:39
Bonjour,

Bonjour,

Je suis nouveau dans la communauté, j'espère avoir posté dans le bon endroit.

Pour entrer dans le vif du sujet, j'effectue un stage dont ma mission et de concevoir et réaliser une application local en JAVA qui assure la gestion des formateurs vacataires.

Je vous détail une partie de l'application : On a un formateur qui assure une ou plusieurs Action (formation) en s'engageant par une Lettre d'engagement (contrat).

Mon application doit permettre à son utilisateur de créer des lettres d'engagement dynamiques, comme en Publipostage, il faut que le document générer soit en Word alimenter depuis une base de données(MySQL).

J'ai beau cherché dans le net je n'ai pas trouvé ce qui pourra m'aider.
Y a-t-il une possibilité ? Je vous serais très reconnaissant pour votre aide

P.S : Si je n'étais pas assez clair, je peux vous donner plus de détails, Merci bien

Bien cordialement



3 réponses

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
3 mai 2013 à 15:48
Il y a la librairie Apache POI pour Word qui permet de générer des documents Microsoft :

http://poi.apache.org/components/document/index.html

Avec deux/trois exemples d'utilisations ici :

http://tkgospodinov.com/writing-microsoft-word-documents-in-java-with-apache-poi/

Il n'y a pas vraiment d'exemple sur le site Apache comme il y en a pour XLS, il va donc falloir chercher un tout petit peu sauf si le site indiqué avec les exemples convient ;-)
0
cool--spirit Messages postés 9 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 6 mai 2013
3 mai 2013 à 23:34
Salut, merci pour ta réponse, je suis bien sur cet API, il répond plus au moins à mon besoin, cependant, j'en ai aucune idée si on peut insérer des images ?
Ce qui aurait été parfait c'est de créer un nouveau document à partir d'un templète déjà fait, avec les images et tout, et remplir que ce qu'on a besoin(Comme le Publipostage), Une idée ??
Merci bien ;-)
0
cool--spirit Messages postés 9 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 6 mai 2013
6 mai 2013 à 14:57
Comment modifier un fichier Microsoft Word avec Java ?
0
Bonjour,

si le format docx est possible pour créer le template, XDocReport (http://code.google.com/p/xdocreport/) est prévue pour cela. Pour démarrer avec XDocReport et docx, je conseille de lire http://code.google.com/p/xdocreport/wiki/DocxReportingQuickStart

Angelo
0
Salut,

Pour avoir déjà cherché des infos sur ce sujet je peux te dire que les API qui manipulent des documents Word sont très rares et très compliqués.
L'idéal pour lequel j'ai opté est de faire ton programme en VB, par exemple avec visual studio qui permet très facilement de manipuler des fichiers word ainsi que leur contenu. Tu peux même générer ton code automatiquement en générant ton programme grâce aux macros (VBA) directement dans Word.
-1
cool--spirit Messages postés 9 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 6 mai 2013
2 mai 2013 à 13:30
Merci pour ta réponse :)

Cependant l'entreprise ou je Stage ne souhaite pas dépenser de l'argent, ils veulent un quelque chose de gratuit sans avoir à acheter de licence, c'est la raison pour laquelle j'ai opté pour Java/MySQL.

J'ai trouvé un API d' Apache "POI", il est pas mal, mais je ne sais pas si je peux ajouter des images dans mon document(logo).

Pour l'utilisation de .NET ça ne sera pas possible :'-(
0
J'avais essayé cette api (notamment la classe de test TestHWPFPictures), ainsi que docx4j ou encore RTFTemplate mais j'ai pas réussi.
Le VB est un langage donc pas de soucis, visual studio est payant mais il existe des logiciels gratuit si tu cherche, comme MonoDevelop 3.0, SharpDevelop.
Moi je voulais juste ouvrir un doc word, insérer une image, enregistrer le fichier, ce qui donne :
Imports Microsoft.Office.Interop 
Imports Microsoft.Office.Interop.Word 

Module InsertOleObject 

    Sub Main() 
        Dim WordApp As Word.Application 
        Dim WordDoc As Word.Document 

  WordApp = CreateObject("Word.Application") 
  WordDoc = WordApp.Documents.Add 
  WordApp.Selection.InlineShapes.AddPicture("C:/path/img.jpg", False, True) 
  WordDoc.SaveAs("C:/path/docu.doc") 
  WordDoc.Close() 
  WordApp.Quit() 

    End Sub 

End Module 
0
cool--spirit Messages postés 9 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 6 mai 2013
2 mai 2013 à 19:17
Merci Flog78 :-)
Effectivement c'est plus simple avec le VB, Hélas je ne peux plus faire marche arrière maintenant, une grande partie du projet à déjà été réaliser, il me reste que la génération de document :-/
Tu n'a pas idée si il y a une possibilité de travailler avec des templates ".doc", et remplir des champs spécifique (Toujours en Java) ??
Grand merci !
0
Insérer du texte dans un vrai doc word existant je ne sais pas faire.
Sinon tu peux générér un fichier texte normal et lui mettre l'extension Word mais je suppose qu'il n'y aura pas le mise en forme voulu.
try 
{ 
 FileWriter fstream = new FileWriter("D:/Desktop/out.doc"); 
 BufferedWriter out = new BufferedWriter(fstream); 
 out.write("Hello Java"); 
 out.close(); 
} 
catch (Exception e) 
{ 
 System.err.println("Error: " + e.getMessage()); 
} 


Tu peux également insérer du code HTML dans un fichier texte et lui mettre une extension Word, ce qui permet en HTML de faire la mise en forme souhaitée :
try 
{ 
FileWriter fstream = new FileWriter("D:/Desktop/out.doc"); 
BufferedWriter out = new BufferedWriter(fstream); 
String str = "<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1' />" + 
"<center>" + 
"<br/>" + 
"<table border='0' width='800' cellpadding='3' style='border-collapse:collapse;' bgcolor='D4D5CF'>" + 
 "<tr>" + 
  "<td align='center' style='border:1px solid black'><b>FICHE DE TEST : </b>test</td>" + 
 "</tr>" + 
"</table>" + 
"<br/>" + 
"<table border='0' width='800' cellpadding='3' style='border-collapse:collapse;'>" + 
 "<tr bgcolor='#F4FB91' align='center'>" + 
  "<td style='border:1px solid black'><b>Domaine</b></td>" + 
  "<td style='border:1px solid black'><b>Paragraphe</b></td>" + 
 "</tr>" + 
 "<tr>" + 
  "<td style='border:1px solid black'> Blabla</td>" + 
  "<td style='border:1px solid black'> Blabla</td>" + 
 "</tr>" + 
"</table>" + 
"<br/>" + 
"<table border='0' width='800' cellpadding='3' style='border-collapse:collapse;'>" + 
 "<tr>" + 
  "<td align='left'><input type='submit' value='Previous' id='modifPrevious'/></td>" + 
  "<td align='right'><input type='submit' value='  Next  ' id='modifNext'/></td>" + 
 "</tr>" + 
"</table>" + 
"<br/>" + 
"</center>"; 
out.write(str); 
out.close(); 
} 
catch (Exception e) 
{ 
 System.err.println("Error: " + e.getMessage()); 
} 
0
cool--spirit Messages postés 9 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 6 mai 2013
3 mai 2013 à 23:30
J'avais pas pensé à utiliser HTML, merci pour ce tuyau ;-)
0