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 :

[C++] Lecture/écriture à la fin d'un fichier PDF


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Par défaut [C++] Lecture/écriture à la fin d'un fichier PDF
    Bonjour,
    je souhaiterais pouvoir écrire à la fin d'un fichier PDF après la ligne
    %%EOF quand on ouvre le PDF dans un éditeur texte
    afin de pouvoir y rajouter des informations. Je souhaiterais aussi pouvoir accéder de nouveau à ces informations et les relire.
    Je ne pense pas qu'il soit nécessaire d'utiliser une quelconque bibliothèque gérant le PDF pour faire ça, mais si quelqu'un a une idée, je suis preneur.
    Merci

  2. #2
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Bonjour,

    Si tu connais les spécifications du format PDF, y a pas besoin de bibliothèque, ce n'est qu'un simple fichier texte.
    Dans ce cas : Comment écrire à la suite d'un fichier existant ? et Comment faire pour lire un fichier ligne par ligne ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Par défaut
    Merci pour la réponse:
    #include <fstream>

    void AjouterUneLigne()
    {
    // std::ios_base::out est automatiquement ajouté par le
    // constructeur de std::ofstream
    std::ofstream file( "fichier.pdf", std::ios_base::app );
    file << "Une ligne\n";
    }

    int main()
    {
    // création du fichier et écriture d'une ligne
    AjouterUneLigne();
    // ouverture du fichier existant et rajout d'une nouvelle ligne
    AjouterUneLigne();
    // "fichier.txt" contient 2 lignes
    }
    cette portion de code fonctionne effectivement très bien pour l'écriture en fin de fichier, je l'avais d'ailleurs essayé, et elle convient parfaitement.
    Mais il y a un mais, il vient de la seconde portion de code:
    #include <string>
    #include <fstream>
    #include <iostream>

    int main()
    {
    // le constructeur de ifstream permet d'ouvrir un fichier en lecture
    std::ifstream fichier( "fichier.pdf" );

    if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
    {
    std::string ligne; // variable contenant chaque ligne lue

    // cette boucle s'arrête dès qu'une erreur de lecture survient
    while ( std::getline( fichier, ligne ) )
    {
    // afficher la ligne à l'écran
    std::cout << ligne << std::endl;
    }
    }
    system("pause");
    }
    Si on ouvre un fichier pdf, il ne le lira apparement pas jusqu'au bout, puisque chez moi je ne retrouve pas les 2 lignes rajoutées à la fin, sur la sortie standard. Y-aurait il un autre moyen de récupérer ces 2 lignes?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( fichier ) // ce test échoue si le fichier n'est pas ouvert
    En es-tu vraiment sûr ?

    Ce ne serait pas plutôt ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( fichier.is_open() ) // ce test échoue si le fichier n'est pas ouvert
    ?

    Ensuite je pense que ta méthode (textuelle) pour relire le fichier n'est pas bonne, les PDF n'étant à mon humble avis certainement pas des fichiers textes...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 10
    Par défaut
    pour le coup du
    std::ifstream fichier( "fichier.pdf" );
    'std::ifstream' renvoit '0' si le fichier n'est pas trouvé, donc ça ne pose pas de problème pour le test. Mais si l'utilisation du '.is_open()' est mieux ... (j'ai recopié directement l'exemple donné).

    Pour l'ouverture du fichier en mode 'text', ce n'est peut-être pas la meilleure, j'ai l'impression qu'il y a des séquences d'échappement, car il sonne 2 ou 3 fois lorsque j'exécute le programme de lecture, c'est peut-être ça qui coince, il suffirait d'une mauvaise séquence pour empêcher la lecture complête du fichier.

    Faudrait peut-être que je regarde du côté d'un accès à partir de la fin du fichier?

    Je me place en fin de fichier, je remonte dans celui-ci en stockant les lignes jusqu'au %%EOF, je m'arrête et je remet les lignes dans le bon ordre.
    Comment verrais-tu ça ?

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par JµL!eN
    pour le coup du
    std::ifstream fichier( "fichier.pdf" );
    'std::ifstream' renvoit '0' si le fichier n'est pas trouvé, donc ça ne pose pas de problème pour le test
    Ca m'étonnerait, c'est un constructeur : aucune valeur ne peut être retournée.

    Citation Envoyé par rigobert
    Ensuite je pense que ta méthode (textuelle) pour relire le fichier n'est pas bonne
    En d'autres termes, il faut le faire en binaire.

    Mais que cherches-tu à faire au juste avec les PDFs ?

    Es-tu sûr d'avoir consacré suffisamment de temps à l'étape de conception avant de te lancer dans le codage ?

  7. #7
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par rigobert
    Ensuite je pense que ta méthode (textuelle) pour relire le fichier n'est pas bonne, les PDF n'étant à mon humble avis certainement pas des fichiers textes...
    Si, bon y a quelques portions sous forme binaire (surement pour les images) mais la grande majorité c'est du texte, et dans le cas présent ce n'est pas génant (au pire y a des tags, obj et endobj je crois, qui précise ce genre de bloque, suffit de réouvrir le fichier en mode binaire à ce momment et de le refermer après mais ça me parrait un peu lourd si c'est juste pour atteindre la fin du fichier !)

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Par défaut
    Citation Envoyé par gege2061
    Si, bon y a quelques portions sous forme binaire (surement pour les images) mais la grande majorité c'est du texte, et dans le cas présent ce n'est pas génant
    Voici les 256 premiers octets d'un PDF ne contenant aucune image :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %PDF-1.4
    %âãÏÓ
    5 0 obj <</Filter/FlateDecode/Length 672>>stream
    xœ*UËnÚ@½ÊÆÝ´J¢&éfUJ*dìñkPv1¥óRÙUe)
    tÓkÕßË™;—,*Ë–g®Ï¹ç¾Æ+g%|ááòEyn€§øþ(šÓ…í'9Yéý4Fß¿äN3õ…ùÂY$=‘žÈ:}&E
    jâúH>V5¼ÝÑ=eÔ¥þUþàÜä•~Ëpø4¯Ó5ÓHP4è41#j ð”¡8¡÷t
    Ôˆ¦p\£?/©1=ˆiãN
    Je suis un peu sceptique sur le fait que "la grande majorité c'est du texte" ...

Discussions similaires

  1. Problème lecture écriture par bloc dans un fichier
    Par scary dans le forum Débuter
    Réponses: 5
    Dernier message: 22/04/2009, 19h28
  2. J2ME et écriture à la fin d'un fichier texte
    Par mattthieu dans le forum Java ME
    Réponses: 3
    Dernier message: 08/06/2007, 13h14
  3. Lecture de la fin d'un fichier
    Par choubiroute dans le forum Langage
    Réponses: 11
    Dernier message: 21/06/2006, 21h49
  4. [Fortran] Lecture de la fin d'un fichier
    Par sebduth dans le forum Fortran
    Réponses: 1
    Dernier message: 02/09/2005, 16h27
  5. Entête et fin d'un fichier PDF
    Par Oluha dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 18/04/2005, 15h13

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