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

JavaScript Discussion :

Imprimer un pdf généré via fpdf sans l'afficher


Sujet :

JavaScript

  1. #1
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut Imprimer un pdf généré via fpdf sans l'afficher
    Bonjour à tous,

    je développe actuellement un outil en php qui doit être compatible multi-navigateurs, et surtout "tablette-friendly" ! Donc je m'arrache les cheveux pour que mon appli soit utilisable sur les browser mobiles tel safari mobile par exemple, avec les complications que ça entraine au niveau des listes, de la gestion du tactile, etc... et les soucis autours des pdf.

    Ainsi je parviens à générer une facture pdf avec FPDF.

    Mais mon souci est que je veux ensuite ouvrir automatiquement une boite de dialogue d'impression du pdf.

    Je ne peux pas m'appuyer sur la couche adobe car pas forcément supportée par toutes les plateformes, je pense plutôt à une bibliothèque js ou jquery...

    Auriez vous une idée ?

    Merci
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 638
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    un iframe caché avec in .print() ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    bonjour

    j'ai testé ce bout de code, qui ne fonctionne que sous chrome :

    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
    printPdf = function (url) {
      var iframe = this._printIframe;
     
      if (!this._printIframe) {
        iframe = this._printIframe = document.createElement('iframe');
        document.body.appendChild(iframe);
     
        iframe.style.display = 'none';
     
        iframe.onload = function() {
          setTimeout(function() {
            iframe.focus();
            iframe.contentWindow.print();
          }, 1);
        };
      }
     
      iframe.src = url;
    }
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  4. #4
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Bonjour,

    Pourquoi tu ne te contente pas de modifier la valeur de ton output dans fpdf. Je crois qu'il faut mettre D pour forcer le téléchargement, après si la personne n'a pas ce qu'il faut pour ouvrir le pdf c'est un autre problème.

  5. #5
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    @Sebastien14, c'est une piste. Que je prendrai si vraiment je n'arrive pas à imprimer directement. Sur ios quand je force le download avec l'option D, ça me redirige carrément toute mon interface vers le lien du fichier, au lieu de se faire dans un onglet séparé. Et immanquablement, à chaque fois tu referme l'onglet et en même temps l'appli.... donc je préfère encore déclencher l'impression directement. J'aurai de toute façon une fonctionnalité pour se faire envoyer la facture par mail.

    En ce qui concerne l'impression, j'ai testé dans une iframe cachée, ça fonctionne sous Chrome (avec impression ok), Safari déclenche l'impression mais sort une page blanche, IE et Firefox ne montrent jamais la boite de dialogue d'impression...

    avec simplement ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <body onLoad="document.getElementById('monpdf').contentWindow.print();">
     
    <iframe id="monpdf" src="./temp/<?php echo $filename; ?>" width="100%" height="100%"></iframe>
     
    </body>
    Je vais lorgner du côté de jquery
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 638
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    met le onload sur l'iframe ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  7. #7
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    déjà essayé, un des navigateurs ne l'accepte pas, je ne sais plus lequel (edit, c'est IE)
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  8. #8
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    j'ai trouvé ça mais je ne sais pas comment l'intégrer :

    http://www.sitepoint.com/load-pdf-iframe-call-print/

    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
    jQuery(document).ready(function($) {
      function print(url)
      {
          var _this = this,
              iframeId = 'iframeprint',
              $iframe = $('iframe#iframeprint');
          $iframe.attr('src', url);
     
          $iframe.load(function() {
              _this.callPrint(iframeId);
          });
      }
     
      //initiates print once content has been loaded into iframe
      function callPrint(iframeId) {
          var PDF = document.getElementById(iframeId);
          PDF.focus();
          PDF.contentWindow.print();
      }
    });
    c'est sensé s'exécuter automatiquement à la fin du chargement du document, mais je ne vois pas comment il obtient le parametre url, donc il y a forcément un appel à faire.... sur onLoad du body ?
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Ce que j'ai déjà fait, c'est d'afficher directement dans la page le pdf généré avec une balise <object>. La personne peut alors imprimer la facture s'il le souhaite. Après je sais pas si sa fonctionnerai avec safari...

  10. #10
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    si seulement on pouvait déclencher une impression rien qu'avec fpdf dommage qu'ils aient pas pensé à ça
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  11. #11
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Sur le principe je ne vois pas pourquoi devoir déclencher une impression, on parle de plus en plus de dématérialisation alors pourquoi vouloir faire imprimer.
    Le plus simple reste de générer la facture au format html et de déclencher l'impression.

  12. #12
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    En fait j'ai pas de soucis pour afficher un pdf cross-browser avec le très bon plugin viewerJS.

    Mais le client demande un bouton qui lance l'impression directement.....

    même si je pense que ce qui sera plus souvent utilisé sera l'attachement par mail, et ça ça ne posera pas de problème à réaliser.

    je suis retourné voir du côté de l'autoprint, qui s'appuie sur FPDF_JS, elle même s'appuyant sur FPDF

    et ça tourne sur IE, Chrome, Safari (non mobile), mais pas Firefox ni Safari mobile....

    Voici mon code pour faire avancer les choses :

    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
    <?php
    require '_fpdf_js.php';
     
     
    class PDF_AutoPrint extends PDF_JavaScript
    {
    function AutoPrint($dialog=false)
    {
        //Open the print dialog or start printing immediately on the standard printer
        $param=($dialog ? 'true' : 'false');
        $script="print($param);";
        $this->IncludeJS($script);
    }
     
    function AutoPrintToPrinter($server, $printer, $dialog=false)
    {
        //Print on a shared printer (requires at least Acrobat 6)
        $script = "var pp = getPrintParams();";
        if($dialog)
            $script .= "pp.interactive = pp.constants.interactionLevel.full;";
        else
            $script .= "pp.interactive = pp.constants.interactionLevel.automatic;";
        $script .= "pp.printerName = '\\\\\\\\".$server."\\\\".$printer."';";
        $script .= "print(pp);";
        $this->IncludeJS($script);
    }
    }
     
    $pdf=new PDF_AutoPrint();
    $pdf->AddPage();
    $pdf->SetFont('Arial','',20);
    $pdf->Text(90, 50, 'Print me!');
    //Open the print dialog
    $pdf->AutoPrint(true);
    $pdf->Output();
     
    ?>
    si vous voyez ce qui pourrait rendre possible l'impression sur FF je prends
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  13. #13
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    Tu mets le code php mais si quelque chose bloque c'est le javascript qui est chargé par ta classe.
    Regarde du côté des outils de développement de firefox, tu dois pouvoir identifier la ligne en erreur.

  14. #14
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    apparemment il faut que la frame ne soit pas en display:none mais en block, du coup lui mettre un hauteur et largeur nulle

    et ça fonctionne

    par contre sur safari mobile ça ne me semble pas possible car ça repose sur la capacité du browser à afficher du pdf en natif ou pas

    mais donc maintenant ça fonctionne sur IE, Chrome, FF et Safari, ce qui est relativement correct je pense

    et puis sur os mobiles il y aura la fonction par mail
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  15. #15
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2008
    Messages : 294
    Points : 333
    Points
    333
    Par défaut
    je reste convaincu que l'utilisation d'une frame n'est pas une très bonne idée.

  16. #16
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 638
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 638
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    essaye avec une balise object ou embed ?
    et un visibility hidden et un @media print poru le rendre visible ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

Discussions similaires

  1. Donner un style à un document PDF généré avec FPDF
    Par oufdephp dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2011, 09h43
  2. Imprimer un pdf sous access (vba) sans ouvrir acrobat reader
    Par benoit16 dans le forum VBA Access
    Réponses: 3
    Dernier message: 23/02/2010, 08h43
  3. imprimer un PDF en vb.net sans adobe Acrobat
    Par cedric.synix dans le forum Windows Forms
    Réponses: 6
    Dernier message: 30/11/2007, 15h40
  4. imprimer un pdf sans l'ouvrir
    Par salrouge dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/05/2007, 14h19
  5. VBA/Word/Excel97/Imprimer un pdf sans ouvrir acrobat
    Par ouskel'n'or dans le forum VBA Word
    Réponses: 2
    Dernier message: 28/09/2005, 21h40

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