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

Langage PHP Discussion :

Modification d'un PDF existant


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut Modification d'un PDF existant
    Bonjour,

    suite à cette discussion...

    Citation Envoyé par jreaux62 Voir le message

    Ça semble être un jeu d'enfant
    Ca ne fait que sembler...
    Je suis intéressé car la solution que j'avais avant (un logiciel Adobe) ne fonctionne plus depuis un changement de PC.
    Créer un pdf de 0,no pb. Les tutos font ça bien, mais modifier un pdf existant, là je coince.

    Code php : 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
    <?php
    use setasign\Fpdi\Fpdi;
     
    require_once('../fpdf.php');                     //j'ai modifié le chemin
    require_once('../src_fpdfi/autoload.php');    //j'ai aussi modifié le chemin après avoir récupéré les fichiers à https://www.setasign.com/products/fpdi/downloads/
     
    // initiate FPDI
    $pdf = new Fpdi();
    // add a page
    $pdf->AddPage();
    // set the source file
    $pdf->setSourceFile('un_pdf_a_moi.pdf');
    // import page 1
    $tplIdx = $pdf->importPage(1);
    // use the imported page and place it at position 10,10 with a width of 100 mm
    $pdf->useTemplate($tplIdx, 10, 10, 100);
     
    // now write some text above the imported page
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(255, 0, 0);
    $pdf->SetXY(30, 30);
    $pdf->Write(0, 'This is just a simple text');
     
    $pdf->Output();

    Fatal error: Uncaught Exception: FPDF error: Some data has already been output, can't send PDF file in C:\wamp64\www\pdf\fpdf.php on line 271
    Exception: FPDF error: Some data has already been output, can't send PDF file in C:\wamp64\www\pdf\fpdf.php on line 271
    et ligne 271 : throw new Exception('FPDF error: '.$msg);

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour Laurent,

    si déjà tu n'arrives pas à faire fonctionner l'exemple de base...

    L'erreur indique qu'il y a déjà eu un affichage à l'écran.

    1- Vérifie :
    • si les chemins vers tes fichiers inclus est correct (sinon, il y a message d'erreur, et donc affichage...) *
    • le contenu de tes fichiers inclus, pour qu'il n'y ait ni echo, ni passage à la ligne ni rien.

    * ET/OU commente la ligne :
    Tu devrais voir apparaitre un affichage ou message d'erreur.

    2- Pour l'enregistrement, voir :
    • FPDF -> menu "Manuel" -> "output"

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    J'avais bien rajouté un echo avant, cherchant mon problème. L'ayant retiré, je n'ai plus l'erreur, mais le fichier produit est parfaitement vide et pdf reader ne peut pas le lire...

    Code php : 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
    <?php
    use setasign\Fpdi\Fpdi;
    require_once('../fpdf.php');
    require_once('../src_fpdfi/autoload.php');
     
    // initiate FPDI
    $pdf = new Fpdi();
    // add a page
    $pdf->AddPage();
     
    // PDF A IMPORTER
    // set the source file
    $pdf->setSourceFile('un_pdf_a_moi.pdf');
    // import page 1
    $tplIdx = $pdf->importPage(1);
    // use the imported page and place it at position 0 0 with a width of 210 mm
    $pdf->useTemplate($tplIdx, 0, 0, 210); // position : 0, 0, largeur 210 mm (format A4)
     
    // SIGNATURE A IMPORTER (PDF)
    /*$pdf->setSourceFile('un_pdf_a_moi.pdf');
    // import page 2
    $tplIdx = $pdf->importPage(1);
    $pdf->useTemplate($tplIdx, 150, 210, 50); // position : 150, 210, largeur 50 mm (A ADAPTER)
     */
    // TEXTE
    // now write some text above the imported page
     
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(255, 0, 0);
    $pdf->SetXY(150, 260);
    $pdf->Write(0, 'This is just a simple text');
     
    $pdf->Output();
     
     
    ?>

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Le fichier produit n'est un pdf (d'ailleurs parfaitement vide). Pourtant, je pense avoir repris exactement le code exemple. Saurais-tu où est l'erreur ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Dans ton code, Laurent, dans ton code..................

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Là, tu ne me surprends pas...mais où dans mon code ?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Mais je n'en sait rien !

    MOI, avec le MEME code * ** , ça fonctionne !!

    * "basique" : puisque c'est l'EXEMPLE du github de la doc !
    ** En dehors des chemins des fichiers, et des fichiers eux-même, que J'AI vérifiés....
    Dernière modification par Invité ; 27/08/2019 à 20h16.

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Tu dis que l'exemple vient du github. Néanmoins, ton code est légèrement différent de celui qui est là : https://www.setasign.com/products/fpdi/about/. Et par contre, si je veux exécuter celui-là, il bloque sur la ligne $pageId = $pdf->importPage(1, PdfReader\PageBoundaries::MEDIA_BOX); car il ne trouve pas une classe :
    Fatal error: Uncaught Error: Class 'PdfReader\PageBoundaries' not found in C:\wamp64\www\pdf\tutorial\tutomodpdf.php on line 15
    . Donc d'où vient ton code ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Tu as des exemples ici :


    Dont le 1er :

    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
    <?php
    use setasign\Fpdi\Fpdi;
     
    require_once('fpdf/fpdf.php');
    require_once('fpdi2/src/autoload.php');
     
    // initiate FPDI
    $pdf = new Fpdi();
    // add a page
    $pdf->AddPage();
    // set the source file
    $pdf->setSourceFile('PdfDocument.pdf');
    // import page 1
    $tplIdx = $pdf->importPage(1);
    // use the imported page and place it at position 10,10 with a width of 100 mm
    $pdf->useTemplate($tplIdx, 10, 10, 100);
     
    // now write some text above the imported page
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(255, 0, 0);
    $pdf->SetXY(30, 30);
    $pdf->Write(0, 'This is just a simple text');
     
    $pdf->Output();
    J'ai juste remplacé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // use the imported page and place it at position 10,10 with a width of 100 mm
    $pdf->useTemplate($tplIdx, 10, 10, 100);
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // use the imported page and place it at position :
    $pdf->useTemplate($tplIdx, 0, 0, 210); // position : 0, 0, largeur 210 mm (format A4)

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Peux tu m'indiquer l'endroit où tu as récupéré les fichiers pour les 2 require (dans l'exemple simple_demo) car mon problème vient probablement de là...

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour Laurent,

    FPDI 2.2.0 :

    (perso, j'ai téléchargé l'archive ZIP).

    Non, ton problème vient certainement du fait que tu ne sais pas ranger tes affaires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    require_once('../fpdf.php');
    require_once('../src_fpdfi/autoload.php');
    ...
    $pdf->setSourceFile('PdfDocument.pdf');
    Vérifie que les librairies ET le document PDF sont aux BONS endroits.

    Ou crée une arborescence SIMPLE !

    Perso, j'ai crée un dossier "test-pdf", dans lequel j'ai mis :
    • le dossier "fpdf"
    • le dossier "fpdi2"
    • le fichier "pdf-1.pdf" (PDF à inclure)
    • le fichier "test.php" (contenant le code)


    Ça fait déjà PLUSIEURS jours (TROP !) que tu es sur ce problème....
    Dernière modification par Invité ; 30/08/2019 à 11h12.

  12. #12
    Invité
    Invité(e)
    Par défaut
    IMPORTANT pour les include() ou require() :

    Quand tu dois "descendre" d'un dossier, au lieu de '../', '../../', utilise plutôt les constantes magiques
    • __DIR__ : même dossier
    • dirname(__DIR__) : on descend d'1 niveau
    • dirname(dirname(__DIR__)) : on descend de 2 niveaux
    • ...

    Mais tu devrais déjà le savoir.....

  13. #13
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Merci.

    Oui, ça fait plusieurs jours que ça traine mais je passe pas 100% de mon temps dessus ! (par exemple, hier, rien).

    dirname(__DIR__) plutôt que ../ , oui tu me l'as déjà dit, mais visiblement, c'est pas encore un réflexe...

    Bonne idée, de créer des répertoires fpdf et fpdfi2.
    Le contenu de fpdfi2, c'est clair , tu me l'indiques dans le post #11, mais dans fpdf ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Laurent....................

    FDPFI fonctionne AVEC FPDF !

  15. #15
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    C'est magique ; ça marche enfin !

    J'ai opté pour une arborescence simple que tu me proposais post #11.

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

Discussions similaires

  1. [FPDF] Afficher un fichier pdf existant
    Par zetta dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 16/07/2015, 14h57
  2. [phpToPdf] Texte sur un pdf existant en php
    Par Alain15 dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 12/07/2006, 15h36
  3. [FPDF] ouvrir un fichier pdf existant
    Par norkius dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 12/06/2006, 16h15
  4. [Pdf][itext] Données d'un pdf existant
    Par Sfeabg dans le forum Documents
    Réponses: 4
    Dernier message: 27/02/2006, 15h39
  5. TDBlookupcombo et modification d'un enregistrement existant
    Par delphim dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/04/2005, 13h11

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