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

Bibliothèques et frameworks PHP Discussion :

[phpToPDF] Méthode pour traduire du HTML en PDF


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 261
    Points : 125
    Points
    125
    Par défaut [phpToPDF] Méthode pour traduire du HTML en PDF
    Je viens pendant 2 jours de tester 2 methodes qui restent insuffisantes pour créer un tableau en pdf à partir d'une base mysql
    J'utilise phptoPDF
    Que pensez vous de ma démarche

    Methode 1

    1 J'extrais de ma base du code html
    2 Je nettoie les balises
    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
    function meftexte($texte){
     
    $texte=str_replace("\r",'',$texte);
    $texte=str_replace("\n",'',$texte);
    $texte=str_replace('<BR>',"\n",$texte);
    $texte=str_replace('<br>',"\n",$texte);
    $texte=str_replace('<br/>',"\n",$texte);
    $texte=str_replace('<br />',"\n",$texte);
    $texte=str_replace('<blockquote>',"&nbsp;&nbsp;",$texte);
    $texte=str_replace('<li>',"\n",$texte);
    //$texte=str_replace('</li>',"\n",$texte);
    $texte=str_replace('<p>',"\n",$texte);
      $texte = str_replace("&eacute;", "é", $texte);
      $texte = str_replace("&agrave;", "à", $texte);
      $texte = str_replace("&egrave;", "è", $texte);
      $texte = str_replace("&euml;", "ë", $texte);
      $texte = str_replace("&ecirc;", "ê", $texte);
      $texte = str_replace("&ccedil;", "ç", $texte);
      $texte = str_replace("&ugrave;", "ù", $texte);
      $texte = str_replace("&nbsp;", " ", $texte);
      $texte = str_replace("&quot;", "'", $texte);
      $texte = strip_tags($texte, '<a><b><i><img>'); 
      return $texte;
    }
    3 je cree le pdf
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $PDF = new phpToPDF();
    ........
    $contenuTableau = array($c1l2,$c2l2,$c3l2);
    $PDF->drawTableau($PDF, $proprietesTableau, $proprieteHeader, $contenuHeader, $proprieteContenu, $contenuTableau);
    $PDF->AddPage();
    4) Tout fonctionne mais je n'arrive pas à conserver les liens hypertextes ...


    Méthode 2

    J'ai trouvé un script sur pdf.org qui permet de mieux traduire mon code html avec creation des liens les liens

    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
    function WriteHTML($html)
    {
        //Parseur HTML
        $html=str_replace("\n",' ',$html);
        $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
        foreach($a as $i=>$e)
        {
            if($i%2==0)
            {
                //Texte
                if($this->HREF)
                    $this->PutLink($this->HREF,$e);
                else
                    $this->Write(5,$e);
            }
            else
            {
                //Balise
                if($e{0}=='/')
                    $this->CloseTag(strtoupper(substr($e,1)));
                else
                {
                    //Extraction des attributs
                    $a2=explode(' ',$e);
                    $tag=strtoupper(array_shift($a2));
                    $attr=array();
                    foreach($a2 as $v)
                    {
                        if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
                            $attr[strtoupper($a3[1])]=$a3[2];
                    }
                    $this->OpenTag($tag,$attr);
                }
            }
        }
    	 return $html;
    }
    J'ai copié cette fonction dans phptoPDF
    J'ai donc
    Dans le fichier principal, j'ai l'appel de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $contenuTableau = array($c1l2,$c2l2,$c3l2);
    $PDF->drawTableau($PDF, $proprietesTableau, $proprieteHeader, $contenuHeader, $proprieteContenu, $contenuTableau);
    Dans le fichier phptopdf contenant ma classe, j'ai comme structure
    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
     
    class phpToPDF extends FPDF {      
     
            function WriteHTML($html){
                ....
            }
     
            function Draw_Data($data, $header = true){
     
                 $this->MultiCellTable(
    			$data[$i]['CELL_WIDTH'],
    			$data[$i]['LN_SIZE'],
    			$this->WriteHTML($data[$i]['TEXT']), ....)
             }
     
             function drawTableau(&$pdf, $tableType, ..., $datas){
             ..................
             $pdf->Draw_Data($data);
             }
    }

    J'ai à l'affichage de mon pdf deux fois le texte !

    Une première fois bien positionné dans la cellule (multicell parfaitement appliqué) mais non formaté par le WriteHTML

    Une seconde fois parfaitement formaté par le WriteHTML mais positioné en dehors de la cellule.

    writeHTML ne fait pas que retourner la chaine à écrire mais l'écris également, donc, ca l'écris deux fois.


    Arrivé la... je suis perdu !!

    Au secours !

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Il existe aussi l'excellent librairie TCPDF qui dispose de base d'une méthode WriteHTML.

    La page d'accueil

    WriteHTML en action

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Problème mise en gras d'une partie du texte dans multicell(fdpf)
    Bonjour
    Mon problème de mettre en gras une partie de mon de texte en gras dans un multicell de fpdf. En fait su je mets setFont('family','B',taille) c'est tout le contenu de la cellule qui est en gras. Et si je mets une balise html <b>,celle-ci n'est pas interprétée.
    Je cherche une solution depuis deux jours mais en vain. Je rappelle aussi que je ne peux pas utiliser une autre classe comme TCPDF car j'ai pas le choix. J'ai essayé une sous-classe ayant la méthode WriteHTML() mais jusqu'à présent j'ai pas le résultat attendu.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/02/2012, 17h16
  2. une solution pour faire du Html to PDF ?
    Par Kamishu dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/09/2008, 16h33
  3. [HTML] quelle est la meilleure méthode pour changer la langue d'un site?
    Par poupouille dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2008, 13h17
  4. Appli JAVA pour convertit du HTML en PDF
    Par Rei Angelus dans le forum Documents
    Réponses: 9
    Dernier message: 18/04/2006, 17h12
  5. Installer un cgi pour convertir des html en pdf
    Par sami_c dans le forum Apache
    Réponses: 3
    Dernier message: 23/03/2006, 15h36

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