IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Documents Java Discussion :

POI créer OUI, lire NON


Sujet :

Documents Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut POI créer OUI, lire NON
    Bonjour, je suis un peu dubitatif avec ceci :

    Sous Eclipse je crée un fichier Word et tout se passe bien

    Je le lis avec WORD --> OK

    Mais si je veux le lire dans la console --> rien

    Je ne comprends pas , Merci pour votre aide

    Voici les 2 codes écriture et lecture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    package jeter;
     
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
     
    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.usermodel.CharacterRun;
    import org.apache.poi.hwpf.usermodel.Range;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
     
    public class CreerFichierWord {
     
    	public static void main(String[] args)throws IOException{
     
    		File file = new File("Exemple.doc");
    		POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));
     
    		HWPFDocument doc = new HWPFDocument(fs);
     
    		Range range = doc.getRange();
     
    		CharacterRun run = range.insertAfter("Hello World!");
    		run.setFontSize(2 * 18);
    		run.setBold(true);
    		run.setItalic(true);
    		run.setCapitalized(true);
    		OutputStream out = new FileOutputStream(new File("Exemple.doc"));
    		doc.write(out);
    		out.flush();
    		out.close();
     }
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    package jeter;
     
     
    import java.io.File;
    import java.io.FileInputStream;
     
    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.extractor.WordExtractor;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
     
    public class LireFichierWord {
     
    	public void readDocFile() {
     
    		File docFile = null;
    		WordExtractor docExtractor = null ;
    		try {
    		docFile = new File("Exemple.doc");
    		FileInputStream fis = new FileInputStream(docFile.getAbsolutePath());
    		POIFSFileSystem fs = new POIFSFileSystem(fis);
     
    		HWPFDocument doc = new HWPFDocument(fs);
     
    		docExtractor = new WordExtractor(doc);
    		}
    		catch(Exception exep)
    		{
    		System.out.println(exep.getMessage());
    		}
     
    		System.out.println(docExtractor.getText());
    	}
     
    	public static void main(String[] args) {
    		LireFichierWord reader = new LireFichierWord();
    		reader.readDocFile();
    	}
    }

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Après avoir ajouté le texte, que vaut

    range.numParagraphs()?

    Parce que le WordExtractor, il itère sur tous les paragraphes. Je crois que tu a créé un fichier mal formé sans paragraphe.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut création revue
    Bonjour, j'ai revu la création de mon fichier Word avec des paragraphes

    tout se passe comme prévu . Lecture correcte avec Word mais pas de résultat

    en lecture console. Pourtant le code de lecture est identique à ceux trouvés sur le net

    Voici le code de création revu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    package jeter;
     
    import java.io.*;
     
    import org.apache.poi.hpsf.CustomProperties;
    import org.apache.poi.hpsf.DocumentSummaryInformation;
    import org.apache.poi.hwpf.HWPFDocument;
    import org.apache.poi.hwpf.usermodel.*;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
     
    public class CreerFichierWord3 {
     
         public static void main (String[] args) throws Exception {
             POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("empty.doc"));
             HWPFDocument doc = new HWPFDocument(fs);
     
             Range range = doc.getRange();
             Paragraph par1 = range.insertAfter(new ParagraphProperties(), 0);
             par1.setSpacingAfter(200);
             par1.setJustification((byte) 1);
     
             CharacterRun run1 = par1.insertAfter("one");
             run1.setFontSize(2 * 18);
             // font size: twice the point size
     
             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 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(new File("Exemple.doc"));
     		doc.write(out);
     		out.flush();
     		out.close();
     
         }
     }

  4. #4
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    J'arrive a lire le document écrit en faisant comme ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    	public void readDocFile() {
    		File docFile = null;
    		try {
    		docFile = new File("Exemple.doc");
    		FileInputStream fis = new FileInputStream(docFile.getAbsolutePath());
    		POIFSFileSystem fs = new POIFSFileSystem(fis);
     
    		HWPFDocument doc = new HWPFDocument(fs);
     
    		StringBuilder text = doc.getText();
    		System.out.println(text);
     
    		}
    		catch(Exception exep)
    		{
    		System.out.println(exep.getMessage());
    		}
     
    	}
    Sortie console :
    Hello World!
    Je n'ai jamais utiliser de WordExtractor donc je ne saurais pas dire pourquoi tu ne peux pas lire avec.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut
    Merci l'ami .

    Meme si je n'en ai pas un besoin immédiat (je teste , c'est tout)

    je te suis reconnaissant pour ta solution

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Il y a quelque chose de foireux dans POI avec le insertAfter je pense. Je viens de faire un test, avec un document qui contient:

    TEST
    TEST

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		Range range = doc.getRange();
    		range.insertBefore("Hohoho!");
    		range.insertAfter("Hello World!");
    		System.out.println("-----"+range.text()+"-----");
    		range = doc.getRange();
    		System.out.println("-----"+range.text()+"-----");
    Ca me sort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    -----Hohoho!TEST
    TEST
    Hello World!-----
    -----Hohoho!TEST
    TEST
    -----
    Hohoho!TEST
    TEST
    On vois clairement que ce qui est en insertAfter est perdu :/

    Quand on regarde le code de POI, on constate que insertBefore appelle


    adjustFIB( text.length() );

    ce que ne fait pas insertAfter() :/

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut Merci pur réponse
    Mais finalement POI n'est-il pas un peu secondaire par rapport BIRT ou Jasper

    Reports dont je viens de prendre connaissance

    Vos avis sur les Birt et Jasper , Merci

  8. #8
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Selon moi, POI c'est bien pour gérer des fichiers excel, mais c'est vraiment pas top au niveau du support des .doc

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    315
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 315
    Points : 114
    Points
    114
    Par défaut Passons à autre chose
    Merci pour les différentes contributions, je laisse là la discussion actuelle

    A+

  10. #10
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    Je suis assez d'accord avec tchize_ j'ai jamais eu de soucis pour manipuler des excels, mais par contre manipuler du word ça devient vite très complexe. Genre créer un tableau dans un fichier word c'était très complexe mais j'avais réussi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PPT-2007] Créer un PPT depuis Excel possible oui ou non
    Par jeff1494 dans le forum VBA PowerPoint
    Réponses: 7
    Dernier message: 19/04/2012, 09h33
  2. Créer un message d'alerte avec comme solution oui ou non
    Par La_Bande_A_Zozo dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/05/2006, 14h43
  3. Réponses: 7
    Dernier message: 21/05/2004, 17h13
  4. Conception de Base de données (AutoIncrément oui ou non)
    Par matgel dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 16/04/2004, 08h47
  5. Réponses: 5
    Dernier message: 11/01/2004, 20h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo