API POI HWPFdocument

lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 - 11 mai 2011 à 14:39
lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 - 11 mai 2011 à 14:51
Bonjour,

Aujourd'hui j'ai essayé d'utiliser la partie HWPF de l'API POI qui permet de travailler sur des fichiers microsoft office.
J'avais déjà créé des fichiers excel grâce à cette API néanmoins avec les fichiers word j'ai eu un problème assez incompréhensible.
Tout d'abord je suis un exemple de création de fichier word :

File f = new File(user.getRept()+"/rapport/empty.doc");
File fout = new File(user.getRept()+"/rapport/"+mdl.getCurrent().getPatient().getNom()+"_"+new SimpleDateFormat("ddMMyyyy_hhmmss").format(new Date())+".doc");
fout.createNewFile();
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(f));
        HWPFDocument doc = new HWPFDocument(new FileInputStream(f));

        // centered paragraph with large font size
        Range range = doc.getRange();
        Paragraph par1 = range.insertAfter(new ParagraphProperties(), 0);
        par1.setSpacingAfter(200);
        par1.setJustification((byte) 1);
        // justification: 0=left, 1=center, 2=right, 3=left and right

        CharacterRun run1 = par1.insertAfter("one");
        run1.setFontSize(2 * 18);
        // font size: twice the point size

        // paragraph with bold typeface
        Paragraph par2 = run1.insertAfter(new ParagraphProperties(), 0);
        par2.setSpacingAfter(200);
        CharacterRun run2 = par2.insertAfter("two two two two two two two two two two two two two");
        run2.setBold(true);

        // paragraph with italic typeface and a line indent in the first line
        Paragraph par3 = run2.insertAfter(new ParagraphProperties(), 0);
        par3.setFirstLineIndent(200);
        par3.setSpacingAfter(200);
        CharacterRun run3 = par3.insertAfter("three three three three three three three three three "
            + "three three three three three three three three three three three three three three "
            + "three three three three three three three three three three three three three three");
        run3.setItalic(true);

        // add a custom document property (needs POI 3.5; POI 3.2 doesn't save custom properties)
        DocumentSummaryInformation dsi = doc.getDocumentSummaryInformation();
        CustomProperties cp = dsi.getCustomProperties();
        if (cp == null)
            cp = new CustomProperties();
        cp.put("myProperty", "foo bar baz");
        dsi.setCustomProperties(cp);

        OutputStream out = new FileOutputStream(fout);
        doc.write(out);
        
        out.flush();
        out.close();
return;


Le fichier en entrée est un fichier .doc vide en effet il n'y a apparemment pas de solution pour créer un fichier .doc à partir de rien à cause du header, mais étant donner que je ne suis pas sûr si vous avez une autre solution je suis preneur.
J'en viens à mon problème : Le fichier que je crée est bien un fichier .doc, si je l'ouvre avec word, je trouve le texte que je souhaite sur la première page mais pas seulement ! le fichier augmente de 3 pages toutes les secondes, en effet mon texte se répète pourtant le fichier n'augmente pas de taille. Si je ferme le fichier et que je le re-ouvre, le nombre de pages à diminuer par rapport au moment de la fermeture mais l'augmentation reprend sans s'arrêter. Mon programme est bel et bien fermer et je ne trouve pas de processus utilisant mon proc or word donc c'est bien word qui continue à écrire.
De plus quand j'ouvre le fichier avec openoffice le fichier est vide alors qu'il s'agit bien d'un format compatible. J'avoue ne rien comprendre à ce qui se passe.

Si vous avez une idée n'hésitez pas.

Merci.

1 réponse

lac981 Messages postés 14 Date d'inscription jeudi 14 avril 2011 Statut Membre Dernière intervention 31 mai 2011 1
11 mai 2011 à 14:51
HWPFDocument doc = new HWPFDocument(new FileInputStream(f));
à remplacer par
HWPFDocument doc = new HWPFDocument(fs);
0
Rejoignez-nous