FPDF Probleme beim einbinden von Fonts

RipmaV

Mitglied
Hallo zusammen,

folgendes Poblem habe:
Ich will mit der Schriftart Century Gothic in mein PDF schreiben.
Nun hab ich aus der Regular und die Bold die benötigten Dateien generiert und diese sind im font-Ordner.

regular:
gothic.php
gothic.z

bold:
gothicb.php
gothicb.z

in meiner Datei lade ich die entsprechend mit:
$pdf->AddFont('CenturyGothic','','gothic.php');
$pdf->AddFont('CenturyGothic','B','gothicb.php');

Ich habe mehrere dynamisch geladene HTML Seiten die hier entsprechend in ein PDF konvertiert werden. Und bei 3 von 4 geht das ohne Probleme, nur beim 4. wirft er mir den Fehler:
FPDF error: Undefined font: centurygothic-bold

Dabei habe ich nirgendwo "centurygothic-bold" definiert im Script und bei den anderen HTML Seiten macht er ja auch das Bold was Bold sein soll.

Ich wäre dankbar für Lösungsvorschläge, hier nochmal das gesamte Script:
PHP:
<?php

class PDF extends FPDF
{
    var $B=0;
    var $I=0;
    var $U=0;
    var $H2=0;
    var $HREF='';
    var $ALIGN='';
    var $debug=array();
    var $dz=0;

    function WriteHTML($html)
    {
        //HTML parser
        $html=str_replace("\n",' ',$html);
        $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
        foreach($a as $i=>$e)
        {
            if($i%2==0)
            {
                $this->SetLeftMargin(140);
                //Text
                if($this->HREF)
                    $this->PutLink($this->HREF,$e);
                   
                elseif($this->ALIGN=='center')
                    $this->Cell(0,0.1,$e,0,1,'C');
                else
                    $this->Write(5,$e);
            }
            else
            {
                //Tag
                if($e[0]=='/')
                    $this->CloseTag(strtoupper(substr($e,1)));
                else
                {
                    //Extract properties
                    $a2=explode(' ',$e);
                    $tag=strtoupper(array_shift($a2));
                    $prop=array();
                    foreach($a2 as $v)
                    {
                        if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
                            $prop[strtoupper($a3[1])]=$a3[2];
                    }
                    $this->OpenTag($tag,$prop);
                }
            }
        }
    }

    function OpenTag($tag,$prop)
    {
            
        if($tag=='H2'){
            $this->SetFont('CenturyGothic-Bold', '', 12);  
        }
        else{
            $this->SetFont('CenturyGothic', '', 8);      
        }
        
        //Opening tag
        if($tag=='B' || $tag=='I' || $tag=='U')
            $this->SetStyle($tag,true);
        if($tag=='A')
            $this->HREF=$prop['HREF'];
        if($tag=='BR')
            $this->Ln(2);
            
        if($tag=='P')
            $this->ALIGN=$prop['ALIGN'];
        if($tag=='HR'){
            if( !empty($prop['WIDTH']) )
                $Width = $prop['WIDTH'];
            else
                $Width = $this->w - $this->lMargin-$this->rMargin;
            $this->Ln(2);
            $x = $this->GetX();
            $y = $this->GetY();
            $this->SetLineWidth(0.4);
            $this->Line($x,$y,$x+$Width,$y);
            $this->SetLineWidth(0.2);
            $this->Ln(1.8);
        }
    }

    function CloseTag($tag)
    {
        //Closing tag
        if($tag=='B' || $tag=='I' || $tag=='U')
            $this->SetStyle($tag,false);
        if($tag=='A')
            $this->HREF='';
        if($tag=='P')
            $this->ALIGN='';
    }

    function SetStyle($tag,$enable)
    {
        //Modify style and select corresponding font
        $this->$tag+=($enable ? 1 : -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(125,41,28);
        $this->SetStyle('U',true);
        $width = $this->GetStringWidth($txt);
        $x = 129+((84-$width)/2);
        $y = 115;
        $this->SetXY($x,$y);

        $this->debug[$this->dz]['var_x'] = $x;
        $this->debug[$this->dz]['x'] = $this->GetX();
        $this->debug[$this->dz]['var_y'] = $y;
        $this->debug[$this->dz]['y'] = $this->GetY();
        $this->dz++;
        
        $this->Write(5,$txt,$URL);
        $this->SetStyle('U',false);
        $this->SetTextColor(0);
    }
    
    function Footer()
    {
        $lhf_footer = 'xxxxxxx | xxxxxxx | xxxxxxx | Telefon xxxxxxx | info@xxxxxxx.de';
        $this->SetXY(42, 103);
        $this->SetTextColor(0,  0,  0);  
        $this->SetFont('CenturyGothic','',6);
        $this->Cell(0,'',$lhf_footer,0);
    }
}
?>

<?php


//Instanciation of inherited class
$pdf=new PDF('L','mm','dindl');
$pdf->SetAutoPageBreak(false);
$pdf->AddFont('CenturyGothic','','gothic.php');
$pdf->AddFont('CenturyGothic','B','gothicb.php');

/* SEITE 1 */
if($item['e1link']!=""){
$pdf->AddPage();
$pdf->SetDisplayMode(fullpage);
$pdf->SetFillColor(255,255,255);
$pdf->Rect(0,0,210,2.5,F);
#$pdf->Rect(0,197,210,20.5,F);

$pdf->Image('../graphic/logo.gif',3.1,0.5,0,16.3); 

/* Header */
$pdf->SetFillColor(181, 21, 42); 
$pdf->SetTextColor(255, 255, 255);  
$pdf->SetFont('CenturyGothic','B',9); 
//$pdf->Cell(237.2,31.3, $item['e1link'], 0, 2, 'L', 1);  
$pdf->Rect(32.4,3.5,173.9,10.7,F);
$pdf->SetXY(40.5,11.5); 
$pdf->Cell(0,'',strtoupper($item['e1link']),0);

/* Sidebar */
$pdf->SetXY(2.1,16.6); 
$pdf->SetFillColor(181, 21, 42); 
$pdf->SetTextColor(255, 255, 255);  
$pdf->SetFont('CenturyGothic','',8); 
$pdf->Cell(27.8,84.2, '', 0, 2, 'L', 1);

/* Images */
$pdf->Image('../'.$item['e1image1'], 33.0,16.7,45.0,45.0); 
$pdf->Image('../'.$item['e1image2'], 79.8,16.7,45.0,45.0); 
$pdf->Image('../'.$item['e1image3'], 33.0,63.8,91.72,37.0); 

/* Text Field */

$pdf->SetXY(140,18.0);
$pdf->SetFillColor(200, 200, 200); 
$pdf->SetTextColor(0,  0,  0);  
$pdf->SetFont('CenturyGothic','',8); 


$pdf->SetX(140);
$pdf->WriteHTML('<p align="center">'.nl2br(($item['e1text'])).'</p>');

}
/* SEITE 2 */
if($item['e2link']!=""){
$pdf->AddPage();

$pdf->SetFillColor(255,255,255);
$pdf->Rect(0,0,210,2.5,F);
#$pdf->Rect(0,197,210,20.5,F);

$pdf->Image('../graphic/logo.gif',3.1,0.5,0,16.3); 

/* Header */
$pdf->SetFillColor(181, 21, 42); 
$pdf->SetTextColor(255, 255, 255);  
$pdf->SetFont('CenturyGothic','B',9); 
//$pdf->Cell(237.2,31.3, $item['e1link'], 0, 2, 'L', 1);  
$pdf->Rect(32.4,3.5,173.9,10.7,F);
$pdf->SetXY(32.5,11.5); 
$pdf->Cell(0,'',strtoupper($item['e2link']),0);

/* Sidebar */
$pdf->SetXY(2.1,16.6); 
$pdf->SetFillColor(181, 21, 42); 
$pdf->SetTextColor(255, 255, 255);  
$pdf->SetFont('CenturyGothic','',8); 
$pdf->Cell(27.8,84.2, '', 0, 2, 'L', 1);

/* Images */
$pdf->Image('../'.$item['e2image1'], 33.0,16.7,45.0,45.0); 
$pdf->Image('../'.$item['e2image2'], 79.8,16.7,45.0,45.0); 
$pdf->Image('../'.$item['e2image3'], 33.0,63.8,91.72,37.0); 

/* Text Field */

$pdf->SetXY(140,18.0);
$pdf->SetFillColor(200, 200, 200); 
$pdf->SetTextColor(0,  0,  0);  
$pdf->SetFont('CenturyGothic','',8); 


$pdf->SetX(140);
$pdf->WriteHTML('<p align="center">'.nl2br(($item['e2text'])).'</p>');
}
/* SEITE 3 */
if($item['e3link']!=""){
$pdf->AddPage();

$pdf->SetFillColor(255,255,255);
$pdf->Rect(0,0,210,2.5,F);
#$pdf->Rect(0,197,210,20.5,F);

$pdf->Image('../graphic/logo.gif',3.1,0.5,0,16.3); 

/* Header */
$pdf->SetFillColor(181, 21, 42); 
$pdf->SetTextColor(255, 255, 255);  
$pdf->SetFont('CenturyGothic','B',9); 
//$pdf->Cell(237.2,31.3, $item['e1link'], 0, 2, 'L', 1);  
$pdf->Rect(32.4,3.5,173.9,10.7,F);
$pdf->SetXY(32.5,11.5); 
$pdf->Cell(0,'',strtoupper($item['e3link']),0);

/* Sidebar */
$pdf->SetXY(2.1,16.6); 
$pdf->SetFillColor(181, 21, 42); 
$pdf->SetTextColor(255, 255, 255);  
$pdf->SetFont('CenturyGothic','',8); 
$pdf->Cell(27.8,84.2, '', 0, 2, 'L', 1);

/* Images */
$pdf->Image('../'.$item['e3image1'], 33.0,16.7,45.0,45.0); 
$pdf->Image('../'.$item['e3image2'], 79.8,16.7,45.0,45.0); 
$pdf->Image('../'.$item['e3image3'], 33.0,63.8,91.72,37.0); 

/* Text Field */

$pdf->SetXY(140,18.0);
$pdf->SetFillColor(200, 200, 200); 
$pdf->SetTextColor(0,  0,  0);  
$pdf->SetFont('CenturyGothic','',8); 


$pdf->SetX(140);
$pdf->WriteHTML('<p align="center">'.nl2br(($item['e3text'])).'</p>');
}


/* Ausgabe */
$pdf->Output("../pdf/".$item['alias'].".pdf");


?>
 
PHP:
function OpenTag($tag,$prop) 
    { 
             
        if($tag=='H2'){ 
            $this->SetFont('CenturyGothic-Bold', '', 12);

Habe jetzt nicht alles genau kontrolliert. Aber zumindest das widerspricht deiner Aussage.
 
Ach verdammt, den Teil hab ich übersehen. Danke!

Dann bleibt mir nur noch eine Frage, und zwar hab ich in den PDFs, wenn ich die Schriftart nutze scheinbar unbekannte Zeichen welche als Verecke dargestellt werden.
Hab ich da bei der Umwandlung für FPDF was falsch gemacht oder kennt Century Gothic wirklich ein paar Zeichen nicht die Arial kennt?

So sieht es aus:
falsch.png

So soll es aussehen:
richtig.png

Mal davon abgesehen dass da die Farben und Größen noch nicht stimmen. Wieso diese Vierecke?
 
Zuletzt bearbeitet:
Ins Blaue geraten:
Ist das vielleicht eine Liste und er versucht die Listenzeichen darzustellen?
 
Wenn Gothic die Zeichen nicht kennt, dann kennt Arial sie aber auch nicht.
Im zweiten Textblock stehen zwar keine Kästchen dafür aber auch nichts anderes und außerdem müsstest du ja wissen ob da ein bestimmtes Zeichen stehen müsste oder nicht.

Ist der Text jetzt auf der rechten Seite abgeschnitten (das Bild). Es sieht irgendwie rechtsbündig aus. Kann es damit was zu tun haben?
 
Im den Dokument gibt es eigentlich keine Listen. Daran sollte es eigentlich nicht liegen. In Arial wird es ja ohne die Vierecke dargestellt.

Eigentlich sollten da gar keine Zeichen stehen, aber irgendetwas scheint FPDF da falsch zu interpretieren oder beim Umwandeln der Zeichen ist irgendetwas was er an die falsche Stelle schreibt.

Und nein, dass es rechtsbündig aussieht liegt nur daran, dass ich die beiden Bilder von einem Screenshoot raus geschnitten habe. Das ganze ist eigentlich zentriert, aber da ich hier nicht alles zeigen darf musste ich es halt mit einem Ausschnitt machen.

Edit - Die Lösung
Nach vielem Ausprobieren sind wir zur Lösung gelangt. Und zwar wird \r\n nicht richtig von der Klasse gefiltert. Die Klasse filtert zwar das \n heraus und ersetzt es durch ein <br /> aber das \n bleibt erhalten. Hierdurch entsteht das Viereck. Nachdem ich nun manuell das \n heraus filtere werden auch keine Vierecken mir angezeigt.
 
Zuletzt bearbeitet:
Zurück