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

JDBC Java Discussion :

Récuperer un document riche (Ms Word) depuis MS Access en Java


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Récuperer un document riche (Ms Word) depuis MS Access en Java
    Bonjour,

    Depuis un bout de temps je cherche à extraire un fichier Document MS Word stocké dans une table sur MS Access.

    j'ai utilisé POI et UcanAccess mais ça ne marche pas , j'arrive à extraire le fichier mais quand je l'ouvre on me demande de choisir l'encodage ! ce n'est pas lisible.

    selectedBulletin = le bulletin sélectionné pour extraire le fichier correspondant.
    getBinaryStream(6) = la 6eme colonne de la table Bulletin_d'essaie-tab contient le fichier MS World .

    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
     
     
                try (Connection con = DriverManager.getConnection(BD_URL);
                   Statement stmt = con.createStatement();
                   ResultSet res = stmt.executeQuery("SELECT * FROM [Bulletin_d'essai-tab] "
                           + "WHERE [N° BE]='" +selectedBulletin.getNumBE() +"'");) {
                    while(res.next()){
                       if(res.getBinaryStream(6)!=null){      
     
                       InputStream inputStream;
                       Blob blob= res.getBlob(6);
                       inputStream=blob.getBinaryStream();
     
     
                       String desktopDirectory = "C:\\Users\\Nirspote\\Desktop\\Tiss" ;
                       File nv_fichier = new File(desktopDirectory +"\\" +selectedBulletin.getNumBE() +".txt");
     
                       FileOutputStream fos = new FileOutputStream(nv_fichier);
     
                       int b =0;
                       while ((b = inputStream.read()) != -1)
                        {
                           /* IOUtils.copy(inputStream, fos);
                            IOUtils.closeQuietly(inputStream);
                            IOUtils.closeQuietly(fos);
                            */
                            fos.write(b);
     
                        }
                       fos.close();
    j'ai essayé d'écrire via fos.Write(b) et aussi j'ai essayé via IOUtils , mais le même résultat.
    j'ai aussi essayer cette méthode d'écriture mais le même résultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Files.copy(
                                  inputStream, 
                                  nv_fichier.toPath(), 
                        java.nio.file.StandardCopyOption.REPLACE_EXISTING);
    --
    l'accès à la base de données Ms Access se fait via UcanAccess

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    private static final String VAR_BD_URL = "C:/Users/Nirspote/Desktop/Tiss/Base de données LHN.accdb";
    private static final String BD_URL ="jdbc:ucanaccess://" +VAR_BD_URL;
    Merci d'avance pour votre aide.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tout d'abord si le contenu du blob est un fichier Ms Word, tu devrais utiliser l'extension .doc (ou docx peut-être selon) et pas .txt pour le fichier : avec .txt, quand tu essayes de le lire, il va utiliser une application pour visualiser des textes (NotePad par exemple, ou NodePad++, TextEdit, PsPad...), et afficher le contenu du doc, qui n'est pas du texte.

    Ensuite, ne récupère pas 2 fois un inputStream sur le blob, mais une seule fois, et pense à le fermer. C'est d'ailleurs une bonne idée d'utiliser Files.copy() plutôt que de faire la boucle.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bonjour,

    merci pour votre prompt réponse.

    pour l'extension .doc oui je l'ai fais c'était un oublie suite au test d'un fichier plat.
    donc voila le code que j'ai essayé mais ça me donne le même résultat, corrigez moi si je n'ai pas suivi vos consignes.

    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
     
    Blob blob;
    InputStream inputStream;
    while(res.next()){
     
                        blob=res.getBlob(6);
                       if(blob!=null){  
     
                       inputStream=blob.getBinaryStream();
     
                       String desktopDirectory = "C:\\Users\\anask\\Desktop\\Tiss" ;
                       File nv_fichier = new File(desktopDirectory +"\\" +selectedBulletin.getNumBE() +".doc");
     
     
                        Files.copy(
                                  inputStream, 
                                  nv_fichier.toPath(), 
                        java.nio.file.StandardCopyOption.REPLACE_EXISTING);
     
                        }
                    }
    Merci d'avance.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Essaye, avec fermeture correct du inputStream, sans quoi rien ne garantie que le fichier doc soit complet.

    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
     
    while(res.next()){
     
       blob=res.getBlob(6); // tu devrais déclarer cette variable ici, vu qu'on en a pas besoin ailleurs
       if (blob!=null){  
     
          try(InputStream inputStream=blob.getBinaryStream()) { // try-with-resource pour fermeture automatique du flux
     
             File nv_fichier = new File("C:\\Users\\anask\\Desktop\\Tiss", selectedBulletin.getNumBE() +".doc");  // pas besoin de variable intermédiaire et de concaténer avec \
     
             Files.copy( inputStream, nv_fichier.toPath(), java.nio.file.StandardCopyOption.REPLACE_EXISTING);
     
          }
       }
    }
    Cependant, si le fichier n'est pas complet, tu ne devrais pas avoir le même résultat, tu devrais avoir Ms Word qui t'affiche un message du type "fichier corrompu" ou "fichier incomplet"... c'est bien Ms Word qui s'ouvre quand tu doubles-cliques sur le fichier ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Re Bonjour,

    J'ai essayé le morceau de code mais le même résultat !!
    le fichier résultant est .doc et s'ouvre avec Ms word mais

    Nom : xpr.png
Affichages : 263
Taille : 18,4 Ko

    un remarque : quand je l'ouvre et j'essaie de l'enregistrer ils me proposent "Plain Text"

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il est sauvegardé comment ce doc ? C'est ton code, ou tu hérites d'une base ? Est-ce bien un blob (et pas un clob) ? Sinon, je ne comprends pas trop pourquoi tu aurais un problème d'encodage (là, on dirait que word essaye d'importer un fichier texte...).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Re bonjour,

    Je ramène ce fichier Word depuis une table dans MS Access via mon code Java.

    le fichier word que je veux extraire ce trouve dans la colone "Fichier BE"
    Nom : xpr.png
Affichages : 267
Taille : 41,1 Ko

    quand je l'ouvre depuis Ms Access il est ouvert sans problème , mais en mode "compatilibilité Mode"

    -désolé je ne connais pas la difference entre blob et clob.

    - c'est mon code java qui essaye d'importer fichier texte à partir de Ms Access au lieu de Word.

    EDIT : je pense que c'est blob, vu que c'est un document word et contient des images et écritures.
    j'ai essayé d'exporter un PDF que j'ai mis dans la base MS Access, et j'ai réussi à l'importer via mon code java, mais pour Ms Word (.doc) ça ne marche toujours pas


    j'espere que j'ai éclairé le sujet.
    Merci d'avance.

  8. #8
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je ne sais rien à la cuisine interne de Access. En tout cas, un blob contient les octets du fichier (binary large object, tandis que le clob, character large object). Ecrire les octets du flux directement jusqu'au devrait fonctionner, mais apparement, à l'ouverture Ms Word ne reconnait pas le fichier et essaye de le convertir, parce que :

    • le fichier n'est pas un fichier MS Word de type doc (peut-être un docx, un dot, un xls...;
    • le fichier n'est pas reconnu comme un fichier word de type doc (soit il est corrompu, soit il est incomplet) ;
    • la version de ton word ne sait pas ouvrir la version de fichier word ;
    • à moins qu'un fichier word stocke son encodage, et que celui-ci ne soit pas reconnu par ton word (je ne connais pas assez la cuisine interne de MS Word pour le savoir).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2009
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

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

    Informations forums :
    Inscription : Juillet 2009
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Migration vers .pdf au lieu de .doc
    Re bonjour,

    Merci pour votre aide, apparemment ça ne fonctionne pas juste pour le .doc mais ça marche pour les autres extensions comme .pdf et .rar ...
    Je pense que je vai intégrer les .pdf à la place de .doc pour ça fonctionne.

    Problème résolu.
    merci beaucoup pour votre aide.
    bonne journée.

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

Discussions similaires

  1. Imprimer un document word depuis Excel
    Par vash641 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 27/05/2009, 09h53
  2. Générer un Document Word depuis un formulaire
    Par parab dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/09/2008, 21h09
  3. Réponses: 1
    Dernier message: 15/07/2008, 10h37
  4. Copie document Word depuis Webbrowser
    Par spitnolan dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/06/2008, 14h43
  5. Comment Imprimer un document Word depuis Delphi ?
    Par jwff_22 dans le forum Delphi
    Réponses: 1
    Dernier message: 28/03/2007, 20h24

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