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

 C++ Discussion :

inclure odf ou pdf dans executable


Sujet :

C++

  1. #1
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut inclure odf ou pdf dans executable
    bonjour,

    y a t il un moyen d'inclure un fichier openoffice ou pdf dans un executable (sous qt, gnu/linux) ?

    j'ai vu les fichiers ressources, mais on dirait que ce n'est que pour des images non ?

    ce sont des fichiers que je devrais afficher dans mon prog.

    merci d'avance,

  2. #2
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Décembre 2010
    Messages : 80
    Par défaut
    y a t il un moyen d'inclure un fichier openoffice ou pdf dans un executable
    Non, un executable, c'est du code machine, donc ça ne risque pas de pouvoir inclure un pdf

    j'ai vu les fichiers ressources, mais on dirait que ce n'est que pour des images non ?
    Et bien oui, c'est pareil. Il faut que ton executable lise et affiche ce fichier. Pour cela, il doit se trouver qq part où ton exe saura le trouver.

    Par exemple, quand tu installes une application graphique, l'installer crée un répertoire dans ton système, avec des sous-dossiers qui contiennent ton exe, tes dlls, tes libs, et tes fichiers ressources si nécessaire.
    Il faut que tu reproduise ce comportement.

    Pour tester en cours de développement,
    tu mets tes fichiers ressources dans un dossier à côté de ton source.

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Avant tout, les ressources Windows peuvent stocker absolument n'importe quel type de fichier ; la ressource de type DATA est utilisée pour stocker les fichiers binaires. Renseigne toit sur le sujet.

    Après, tu ne peux pas linker un fichier quelconque avec ton programme, certes, mais il y a quand même moyen de feinter : tu peux transformer un fichier quelconque en tableau de char, qui lui pourra être compilé et linké avec ton exécutable ou ta librairie.

    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
     
    #include <fstream>
    #include <iostream>
    #include <iomanip>
     
    int main(int ac, const char* av[])
    {
      if (ac < 2)
      {
        std::cerr << "erreur : doit être appelé avec un nom de fichier en argument" << std::endl;
        return 2;
      }
      std::ifstream filein(av[1]);
      if (!filein)
      {
        std::cerr << "erreur : impossible d'ouvrir le fichier " << av[1] << std::endl;
        return 3;
      }
     
      filein.seekg(0, std::end);
      std::size_t len = filein.tellg();
      filein.seekg(0, std::beg);
      std::vector<char> file_content(len);
      filein.read(&file_content.front(), file_content.size());
     
      std::cout << "const unsigned long file_contant_length = " << len << std::endl;
      std::cout << "const char file_content[] = { " << std::endl;
      std::size_t per_line = 16;
      for (std::size_t =0; i < file_content.size(); ++i)
      {
        int c = file_content[i];
        if (per_line-- == 0)
        {
          std::cout << ", " << std::endl;
          std::cout << "\t";
        }
        std::cout << "0x" << std::hex << std::setw(2) << std::setfill('0') << c << ",";
      }
      // le dernier caractère écrit était un ","
      std::cout << "0 };
    }
    Ce programme écrit sur la sortie standard un tableau C contenant l'intégralité du fichier. Si tu le compile sous le nom carray, alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    > carray fichier.pdf > fichier.tableau.c
    Va tout simplement écrire le fichier PDF sous la forme d'un tableau C, dont le nom est file_content et dont la longueur est file_content_length.

    Une fois que tu as ce fichier complètement présent en mémoire tu peux tout à fait récupérer le contenu du tableau, et le traiter comme tu l'entends (si tu dispose d'une visionneuse PDF intégrée à ton application, elle propose certainement de lire un fichier PDF à partir de la mémoire ; sinon, il faudra extraire le fichier (c'est à dire l'écrire sur disque) avant d'appeler une visionneuse PDF externe.

    Le code ci-dessus contient quelques erreurs de compilation (elles sont simples à corriger). Toutefois, histoire de gagner du temps, voici carray-0.1.0, qui fait tout ce que fait le code ci-dessus mais en mieux. Utilise CMake comme système de build, histoire de compiler aussi bien sous Linux et sous Windows.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $ tar zxvf carray-0.1.0.tar.gz 
    $ cd carray-0.1.0
    $ mkdir build && cd build
    $ cmake ..
    $ make && sudo make install
    Un exemple de sortie :

    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
     
    $ carray carray-0.1.0/src/config.h.in -c++ -ns=files -var=config_h_in
    #include <cstdio>
     
    namespace files {
     
    	const unsigned long config_h_in_length = 1207UL;
    	const char config_h_in[] = { 
    		0x2f, 0x2a, 0x20, 0x63, 0x61, 0x72, 0x72, 0x61, 0x79, 0x20, 0x2d, 0x20, 0x61, 0x20, 0x43, 0x2f, 
    		0x43, 0x2b, 0x2b, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 
    		0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x6d, 0x62, 0x65, 0x64, 0x20, 0x66, 0x69, 0x6c, 0x65, 
    		0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x6f, 0x20, 0x61, 0x20, 
    		0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x0a, 0x0a, 0x20, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x72, 0x69, 
    		// ... (j'omets quelques lignes)
    		0x53, 0x49, 0x4f, 0x4e, 0x5f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x40, 0x0a, 0x0a, 0x23, 0x65, 0x6e, 
    		0x64, 0x69, 0x66, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x61, 0x72, 0x72, 0x61, 0x79, 0x5f, 0x63, 0x6f, 
    		0x6e, 0x66, 0x69, 0x67, 0x5f, 0x68, 0x0a, EOF
    	};
     
    }
    Ne reste qu'à rediriger la sortie standard sur un fichier.
    Fichiers attachés Fichiers attachés
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    merci pour toutes ces precisions.
    les ressources, ça ne marche qu'avec windobe ?
    parce que mon prog doit tourner pareil sous tux egalement.

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par lostsoul Voir le message
    merci pour toutes ces precisions.
    les ressources, ça ne marche qu'avec windobe ?
    parce que mon prog doit tourner pareil sous tux egalement.
    Si tu n'aimes pas Windows, ne l'utilise pas. Sinon, tu cesse de l'appeler windobe, étant donné que ça doit faire 10 ans qu'il ne mérite plus ce surnom pour le moins ridicule. Histoire d'être crédible, je tiens à signaler que je travaille sous Linux, et que je n'ai strictement aucun problème à travailler sous Windows. Je suis informaticien, et si tu l'es aussi, alors tu comprendras de quoi je parle.

    Ceci dit, les ressources sont effectivement une fonctionnalité de Windows. Linux ne propose aucune fonctionnalité équivalente. Ceci dit, il faut voir dans quelle mesure Qt n'implémente pas quelque chose de multiplateforme pour ce cas précis (ça ne devrait pas être difficile, à cout de dlsym dans le module en cours).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  6. #6
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    desole, je ne voulais vexer personne...

  7. #7
    Invité
    Invité(e)
    Par défaut
    Qt a les fichier .qrc. Ce sont des fichier Xml(si je ne me trompe pas, en tout cas c'est un langage avec plein de balises), mais il y une gui intégré dans QtCreator pour les manipuler(pour en creer un nouveau avec QtCreator, va dans Creer un nouveau fichier/Fichier et Classe/Qt/Fichier de ressource Qt). Il y a des tutoriels inclus dans la documentation de Qt.

  8. #8
    Membre éclairé Avatar de lostsoul
    Homme Profil pro
    Rédacteur web, blogueur, développeur web junior
    Inscrit en
    Novembre 2003
    Messages
    762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Rédacteur web, blogueur, développeur web junior
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2003
    Messages : 762
    Par défaut
    j'ai vu ces fichiers (oui, ç'est derive du xml je crois), mais il me semblait que ce n'etait que sous windows. faut que je regarde ça.
    merci bien ;-)

Discussions similaires

  1. Inclure un fichier PDF dans une page PHP
    Par Regis0122 dans le forum Langage
    Réponses: 3
    Dernier message: 05/04/2009, 23h45
  2. [VB6] inclure un pdf dans un pdf
    Par 6ril25 dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 25/03/2009, 18h03
  3. inclure un pdf dans mon fichier d'installation
    Par rvdth dans le forum Windows Forms
    Réponses: 6
    Dernier message: 17/04/2008, 14h35
  4. Inclure un .pdf dans latex (encore)
    Par elteor dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 21/08/2006, 14h57
  5. Inclure un DLL dans executable
    Par nico33410 dans le forum Langage
    Réponses: 9
    Dernier message: 01/09/2005, 15h17

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