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

Java Discussion :

[Encodage] Modifier (lire /écrire) un fichier .doc


Sujet :

Java

  1. #1
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut [Encodage] Modifier (lire /écrire) un fichier .doc
    Bonjour,

    Je cherche un moyen de modifier un fichier word afin d'en remplacer des balises par des valeurs que je définit dans un programme.

    Je lit un document de base (.doc déja mis en forme) contenant des balises et lorsque j'en croise une, je la remplace par la valeur correspondante, puis écrit dans un nouveau document.

    Le problème c'est vraisemblablement l'encodage. Exemple:

    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ��ࡱ�
    Du coup le document crée est illisible par Word.

    J'utilise un code tout simple, à savoir:

    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
    try{
    			BufferedReader buff = new BufferedReader(new FileReader("C:/Test/Rapport de base.doc"));
    			PrintWriter out  = new PrintWriter(new FileWriter("C:/Test/Rapport.doc"));
    			try {
    				String line;
     
    				while ((line = buff.readLine()) != null) {
    					if (line.contains("#nom")) {
    						System.out.println("Avant = " + line);
     
    						line = line.replace("#nom", doc.getAuteur());
     
    						System.out.println("Apres =" + line);
    					}
    					out.println(line);
    				}
    			} finally {
    				buff.close();
    				out.close();
    			}
    		} catch (IOException ioe) {
    			System.out.println("Erreur --" + ioe.toString());
    		}
    Si quelqu'un sait comment résoudre ce soucis d'encodage, merci d'avance.

    PS: J'ai essayé de créer un doc à partir de rien à l'aide des API POI ou JavaToWord, mais c'est très long et compliqué de faire de la mise en page "funky". C'est pourquoi il est beaucoup plus simple de partir du document fait et remplacer les champs qui m'intéressent.

    Au passage, JavaToWord est sympathique mais peu complet, tandis que POI (pour les fichiers word, je précise) semble complet mais est repoussant à l'utilisation, sans doc et sans exemples.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu ne peux pas lire un fichier doc comme cela. Les .doc ne sont pas des fichiers "texte" mais des fichiers binaires...


    a++

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    À la limite, puisque le but avoué est de faire un truc de goret, il peut toujours le lire comme ça.
    Mais l'écrire, c'est pas trop possible. Les textes n'ont pas la même taille ; c'est du binaire => il faut une API capable de faire les changements ad hoc.

    Au passage, JavaToWord est sympathique mais peu complet, tandis que POI (pour les fichiers word, je précise) semble complet mais est repoussant à l'utilisation, sans doc et sans exemples.
    Certes, mais bon, en même temps, les .doc ça a jamais été prévu pour être modifiable par autre chose que Word. Même en améliorant les choses, ça sera jamais top.
    Note : avec du docx ce serait bien plus facile. C'est du xml et pas vraiment du binaire. Accessoirement, l'encodage serait auto-détecté.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Citation Envoyé par thelvin Voir le message
    À la limite, puisque le but avoué est de faire un truc de goret, il peut toujours le lire comme ça.
    En fait, à la base j'ai commençais par essayer de générer le document à l'aide des API dispos, mais vu qu'il est un peu 'funky' ça passe vraiment pas.
    Donc remplacer les champs me paraissait plus simple même si la méthode laisse à désirer je te l 'accorde, je cherche comment faire ...

    Citation Envoyé par thelvin Voir le message
    Mais l'écrire, c'est pas trop possible. Les textes n'ont pas la même taille ; c'est du binaire => il faut une API capable de faire les changements ad hoc.
    Ok merci à toi et adiGuba de la précision.

    Citation Envoyé par thelvin Voir le message
    Note : avec du docx ce serait bien plus facile. C'est du xml et pas vraiment du binaire. Accessoirement, l'encodage serait auto-détecté.
    Intéressant, je vais creuser par la.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2011
    Messages : 100
    Points : 89
    Points
    89
    Par défaut
    Salut Génoce,

    Tu peux regarder l'API apache POI qui est conçue pour les documents microsoft

    http://poi.apache.org/

  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
    y aller comme un bourrin passera pas, a moins d'être sur de remplacer les tag par du texte ayant exactement la même taille. Et encore, je parierais pas un programme là dessus....

    Il faut utiliser les api dédiée capables de lire ce format et le modifier.

  7. #7
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Citation Envoyé par biljava Voir le message
    Salut Génoce,

    Tu peux regarder l'API apache POI qui est conçue pour les documents microsoft

    http://poi.apache.org/
    Salut,

    J'ai déjà testé POI et la doc pour Word est inexistante, pas de tutos, pas d'exemple, j'ai vite laissé tomber, d'autant qu'un commentaire sur le site signal qu'il n ont personne pour développer les éléments côté word...

    PS: petite remarque, je savais pas mais le .docx c'est une archive en fait, avec dedans des xml qui décrivent les éléments du document (header / footer / content). J'aurais au moins appris quelquechose.

    @Tchize: Effectivement faire le bourrin ça passe pas .

    J'ai fait beaucoup plus simple, je l'ai fait en c#.

Discussions similaires

  1. lire écrire un fichier de donnée
    Par Ladgalen dans le forum Calcul scientifique
    Réponses: 13
    Dernier message: 05/10/2009, 21h13
  2. TWordApplication : lire/écrire contenu fichier
    Par /* jerome */ dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 19/05/2009, 18h51
  3. Lire, écrire un fichier Word (.DOC)
    Par haaa11 dans le forum Documents
    Réponses: 3
    Dernier message: 23/11/2008, 19h07
  4. Ouvrir, lire, écrire, ferme fichier .txt
    Par greg26 dans le forum VB.NET
    Réponses: 13
    Dernier message: 19/09/2007, 17h12
  5. lire/écrire un fichier stocké dans le JAR ?
    Par SheikYerbouti dans le forum Entrée/Sortie
    Réponses: 11
    Dernier message: 24/03/2006, 10h37

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