Ankündigung

Einklappen
Keine Ankündigung bisher.

FPDF Write HTML und Header/Footer

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • FPDF Write HTML und Header/Footer

    Ich benutze FPDF und Write HTML um PDF zu erzeugen welche HTML Inhalt aus einem wysiwyg Editor darstellen muß.
    Das klappt auch.
    Nur möchte ich jetzt einen Header und Footer verwenden, der aber nicht angezeigt wird.
    Ich benutze die Klasse html2pdf, die wiederum die Klasse FPDF inkludiert.
    PHP-Code:
    require('html2pdf.php');
    class 
    PDF extends FPDF  {
     function 
    Header() {
      
    $this->SetFont('Arial','B',14);
      
    $this->Cell(0,6'Kopfzeile',0,1,C);
     }
    }
    $pdf=new PDF_HTML();
    $pdf->AddPage();
    $pdf->SetFont('Arial');
    $pdf->WriteHTML('<p>Hallo Welt</p>');
    $pdf->Output(); 
    Es gelingt mir nicht den Header anzuzeigen, was mache ich verkehrt?

  • #2
    Du definierst oben eine Klasse die du dann unten aber nicht verwendtest (PDF) und deine Methode rufst du auch nicht auf.

    Kommentar


    • #3
      Das hast Du schön gesagt
      Ich bin Nebenbei Spagetti Programmierer, OOP kann ich leider nicht und deswegen verstehe ich wohl das System nicht.

      Ich ahne nur nebulös, was Du meinst.
      Wenn ich new PDF() und AddPage() zusätzlich verwende kommt es zum Fehler (Uncaught Exception) , den ich aber nicht zuordnen kann.

      Kannst Du das bitte etwas ausfürlicher beschreiben?

      Kommentar


      • #4
        class PDF extends FPDF

        $pdf = new PDF_HTML();
        Die Deutsche Rechtschreibung ist Freeware! Du darfst sie kostenlos nutzen, allerdings ist sie nicht Open Source, d.h. Du darfst sie nicht verändern oder in veränderter Form veröffentlichen.

        Kommentar


        • #5
          Wenn ich $pdf = new PDF_HTML(); verwende, kann ich mit der Methode WriteHTML() externes HTML anzeigen.
          Wenn ich $pdf = new PDF(); verwende wird die Kopfzeile aber nicht das HTML angezeigt, weil ich die Methode WriteHTML() nicht mehr hab.
          Beide zusammen gehen auch nicht, da die Klasse/Methode? nur einmal aufgerufen werden kann.

          Kommentar


          • #6
            Woher kommt "PDF_HTML"?

            Kommentar


            • #7
              Dann musst du wohl deine Klasse von "PDF_HTML" erben lassen und nicht von FPDF.

              Kommentar


              • #8
                Ich habe die Klasse html2pdf.php zum besseren Verständnis mal angehangen.
                PHP-Code:
                <?php
                //HTML2PDF by Clément Lavoillotte
                //ac.lavoillotte@noos.fr
                //webmaster@streetpc.tk
                //http://www.streetpc.tk

                require('_fpdf/fpdf.php');

                //function hex2dec
                //returns an associative array (keys: R,G,B) from
                //a hex html code (e.g. #3FE5AA)
                function hex2dec($couleur "#000000"){
                    
                $R substr($couleur12);
                    
                $rouge hexdec($R);
                    
                $V substr($couleur32);
                    
                $vert hexdec($V);
                    
                $B substr($couleur52);
                    
                $bleu hexdec($B);
                    
                $tbl_couleur = array();
                    
                $tbl_couleur['R']=$rouge;
                    
                $tbl_couleur['V']=$vert;
                    
                $tbl_couleur['B']=$bleu;
                    return 
                $tbl_couleur;
                }

                //conversion pixel -> millimeter at 72 dpi
                function px2mm($px){
                    return 
                $px*25.4/72;
                }

                function 
                txtentities($html){
                    
                $trans get_html_translation_table(HTML_ENTITIES);
                    
                $trans array_flip($trans);
                    return 
                strtr($html$trans);
                }
                ////////////////////////////////////

                class PDF_HTML extends FPDF
                {
                //variables of html parser
                protected $B;
                protected 
                $I;
                protected 
                $U;
                protected 
                $HREF;
                protected 
                $fontList;
                protected 
                $issetfont;
                protected 
                $issetcolor;

                function 
                __construct($orientation='P'$unit='mm'$format='A4')
                {
                    
                //Call parent constructor
                    
                parent::__construct($orientation,$unit,$format);
                    
                //Initialization
                    
                $this->B=0;
                    
                $this->I=0;
                    
                $this->U=0;
                    
                $this->HREF='';
                    
                $this->fontlist=array('arial''times''courier''helvetica''symbol');
                    
                $this->issetfont=false;
                    
                $this->issetcolor=false;
                }

                function 
                WriteHTML($html)
                {
                    
                //HTML parser
                    
                $html=strip_tags($html,"<b><u><i><a><img><p><br><strong><em><font><tr><blockquote>"); //supprime tous les tags sauf ceux reconnus
                    
                $html=str_replace("\n",' ',$html); //remplace retour à la ligne par un espace
                    
                $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //éclate la chaîne avec les balises
                    
                foreach($a as $i=>$e)
                    {
                        if(
                $i%2==0)
                        {
                            
                //Text
                            
                if($this->HREF)
                                
                $this->PutLink($this->HREF,$e);
                            else
                                
                $this->Write(5,stripslashes(txtentities($e)));
                        }
                        else
                        {
                            
                //Tag
                            
                if($e[0]=='/')
                                
                $this->CloseTag(strtoupper(substr($e,1)));
                            else
                            {
                                
                //Extract attributes
                                
                $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);
                            }
                        }
                    }
                }

                function 
                OpenTag($tag$attr)
                {
                    
                //Opening tag
                    
                switch($tag){
                        case 
                'STRONG':
                            
                $this->SetStyle('B',true);
                            break;
                        case 
                'EM':
                            
                $this->SetStyle('I',true);
                            break;
                        case 
                'B':
                        case 
                'I':
                        case 
                'U':
                            
                $this->SetStyle($tag,true);
                            break;
                        case 
                'A':
                            
                $this->HREF=$attr['HREF'];
                            break;
                        case 
                'IMG':
                            if(isset(
                $attr['SRC']) && (isset($attr['WIDTH']) || isset($attr['HEIGHT']))) {
                                if(!isset(
                $attr['WIDTH']))
                                    
                $attr['WIDTH'] = 0;
                                if(!isset(
                $attr['HEIGHT']))
                                    
                $attr['HEIGHT'] = 0;
                                
                $this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT']));
                            }
                            break;
                        case 
                'TR':
                        case 
                'BLOCKQUOTE':
                        case 
                'BR':
                            
                $this->Ln(5);
                            break;
                        case 
                'P':
                            
                $this->Ln(10);
                            break;
                        case 
                'FONT':
                            if (isset(
                $attr['COLOR']) && $attr['COLOR']!='') {
                                
                $coul=hex2dec($attr['COLOR']);
                                
                $this->SetTextColor($coul['R'],$coul['V'],$coul['B']);
                                
                $this->issetcolor=true;
                            }
                            if (isset(
                $attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) {
                                
                $this->SetFont(strtolower($attr['FACE']));
                                
                $this->issetfont=true;
                            }
                            break;
                    }
                }

                function 
                CloseTag($tag)
                {
                    
                //Closing tag
                    
                if($tag=='STRONG')
                        
                $tag='B';
                    if(
                $tag=='EM')
                        
                $tag='I';
                    if(
                $tag=='B' || $tag=='I' || $tag=='U')
                        
                $this->SetStyle($tag,false);
                    if(
                $tag=='A')
                        
                $this->HREF='';
                    if(
                $tag=='FONT'){
                        if (
                $this->issetcolor==true) {
                            
                $this->SetTextColor(0);
                        }
                        if (
                $this->issetfont) {
                            
                $this->SetFont('arial');
                            
                $this->issetfont=false;
                        }
                    }
                }

                function 
                SetStyle($tag$enable)
                {
                    
                //Modify style and select corresponding font
                    
                $this->$tag+=($enable : -1);
                    
                $style='';
                    foreach(array(
                'B','I','U') as $s)
                    {
                        if(
                $this->$s>0)
                            
                $style.=$s;
                    }
                    
                $this->SetFont('',$style);
                }

                function 
                PutLink($URL$txt)
                {
                    
                //Put a hyperlink
                    
                $this->SetTextColor(0,0,255);
                    
                $this->SetStyle('U',true);
                    
                $this->Write(5,$txt,$URL);
                    
                $this->SetStyle('U',false);
                    
                $this->SetTextColor(0);
                }

                }
                //end of class
                ?>

                Kommentar


                • #9
                  Ich hatte auch versucht den Header (die Funktion) direkt mit in die Klasse zu schreiben, klappt nicht.
                  Notice: Use of undefined constant C - assumed... on line 196 (genau die Zeile$this->Cell(0,6, 'Kopfzeile',0,1,C)
                  Fatal error: Uncaught Exception: FPDF error: Some data has already been output, can't send PDF file in...

                  Kommentar


                  • #10
                    Header direkt in der Klasse html2pdf ist doch die Lösung!
                    In der Zeile $this->Cell(0,6, 'Kopfzeile',0,1,C) mag er das C am Ende nicht ohne Anführungsstriche!
                    Eigentlich Syntaxfehler, konnte ich so anhand der Fehlermeldung aber nicht erkennen.

                    Vielen Dank für Eure Mühe.

                    Kommentar

                    Lädt...
                    X