TCPDF Hintergrundbild aus der Datenbank wählen


CreativPur

Erfahrenes Mitglied
Hi,
erst einmal ein frohes neues Jahr....

Ich habe folgendes Problem

Ich möchte eine PDF mit php erstellen

In dieser PDF wird ein Hintergrundbild aufgerufen..

PHP:
class MYPDF extends TCPDF {
    //Page header
    public function Header() {
        // get the current page break margin
        $bMargin = $this->getBreakMargin();
        // get current auto-page-break mode
        $auto_page_break = $this->AutoPageBreak;
        // disable auto-page-break
        $this->SetAutoPageBreak(false, 0);
        // set bacground image
        $img_file = K_PATH_IMAGES.'../Vorlagen/mein_Bild.jpg';
        $this->Image($img_file, 0, 0, 594, 841, '', '', '', false, 300, '', false, false, 0);
        // restore auto-page-break status
        $this->SetAutoPageBreak($auto_page_break, $bMargin);
        // set the starting point for the page content
        $this->setPageMark();
    }
}
Das funktioniert auch super..

Aber..

Wie binde ich ein Bild aus diesem Ordner über meine SQL-Datenbank ?

Mein Versuch

PHP:
$preisschild_code = '139757';
   
$sql = "SELECT * FROM preisschild WHERE preisschild_code = $preisschild_code";
$schild = $pdo->query($sql)->fetch();

// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {
    //Page header
    public function Header() {
        // get the current page break margin
        $bMargin = $this->getBreakMargin();
        // get current auto-page-break mode
        $auto_page_break = $this->AutoPageBreak;
        // disable auto-page-break
        $this->SetAutoPageBreak(false, 0);
        // set bacground image
        $img_file = K_PATH_IMAGES.'../Vorlagen/'.$schild['vorlage'].'.jpg';
        $this->Image($img_file, 0, 0, 594, 841, '', '', '', false, 300, '', false, false, 0);
        // restore auto-page-break status
        $this->SetAutoPageBreak($auto_page_break, $bMargin);
        // set the starting point for the page content
        $this->setPageMark();
    }
}
Dies funktioniert leider nicht. Es wird nur ein weißes Blatt ausgegeben.
 

Sempervivum

Erfahrenes Mitglied
Ich empfehle, ein paar Diagnoseausgaben einzubauen:
Wie sieht das Ergebnis des Lesens aus der DB aus?
Wie sieht der fertige Pfad aus?
Existiert die Bilddatei unter dem fertigen Pfad?
Code:
        var_dump($schild);
        $img_file = K_PATH_IMAGES.'../Vorlagen/'.$schild['vorlage'].'.jpg';
        var_dump($img_file);
        var_dump(file_exists($img_file));
 

CreativPur

Erfahrenes Mitglied
Hi,
vielen Dank für Deine schnelle Antwort..
Nachdem ich deinen Code eingegeben habe, bekam ich folgende Fehlermeldung,,

NULL string(73) "/is/htdocs/wp12703457_XEMH6JLFPR/www/preisschilder/tcpdf/../Vorlagen/.jpg" bool(false) TCPDF ERROR: Some data has already been output to browser, can't send PDF file

Das lesen aus der Datenbank funktioniert . Getesteten habe ich es mit

<span style="color:black;text-align:center;font-weight:bold;font-size:80pt;">'.$schild['preis_neu'].'</span>

der Preis wird angezeigt..

Die Test-PHP liegt im Hauptverzeichnis, die tcpdf.php im Ordner tcpdf, die Vorlage im Ordner Vorlagen..
alles Insgesamt im Hauptverzeichnis .
 

zerix

Hausmeister
Moderator
Hi,
vielen Dank für Deine schnelle Antwort..
Nachdem ich deinen Code eingegeben habe, bekam ich folgende Fehlermeldung,,

NULL string(73) "/is/htdocs/wp12703457_XEMH6JLFPR/www/preisschilder/tcpdf/../Vorlagen/.jpg" bool(false) TCPDF ERROR: Some data has already been output to browser, can't send PDF file

Das lesen aus der Datenbank funktioniert . Getesteten habe ich es mit

<span style="color:black;text-align:center;font-weight:bold;font-size:80pt;">'.$schild['preis_neu'].'</span>

der Preis wird angezeigt..

Die Test-PHP liegt im Hauptverzeichnis, die tcpdf.php im Ordner tcpdf, die Vorlage im Ordner Vorlagen..
alles Insgesamt im Hauptverzeichnis .
Sieht für mich so aus, als würde ein leerer String von der Datenbank zurückkommen. Steht denn der richtige Dateiname in der Datenbank bzw stimmt der Spaltenname so?

Viele Grüße
Sascha
 

CreativPur

Erfahrenes Mitglied
Hi Sacha,
habe soeben nochmals alles Überprüft ..
Ich habe mich nicht verschrieben

Merkwürdig ist nur, dass der "preis_neu" richtig ausgegeben wird.

Ich habe die Hochkommas mit " ersetzt, aber auch hier scheint der Fehler nicht zu liegen

PHP:
$preisschild_code = '139757';
    
$sql = "SELECT vorlage,preis_neu FROM preisschild WHERE preisschild_code = $preisschild_code";
$schild = $pdo->query($sql)->fetch();

 
// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {
    //Page header
    public function Header() {
        // get the current page break margin
        $bMargin = $this->getBreakMargin();
        // get current auto-page-break mode
        $auto_page_break = $this->AutoPageBreak;
        // disable auto-page-break
        $this->SetAutoPageBreak(false, 0);
        // set bacground image
        $img_file = K_PATH_IMAGES.'../Vorlagen/'.$schild['vorlage'].'.jpg';
        $this->Image($img_file, 0, 0, 594, 841, '', '', '', false, 300, '', false, false, 0);
        // restore auto-page-break status
        $this->SetAutoPageBreak($auto_page_break, $bMargin);
        // set the starting point for the page content
        $this->setPageMark();
    }
}
 

CreativPur

Erfahrenes Mitglied
Leider habe ich immer noch keine Lösung .
Daher nochmals ausführlich mein Problem.

Wenn ich als Hintergrund den Namen des Bildes eingebe, funktioniert es
siehe Zeile 20..
PHP:
$pdo = new PDO('mysql:host=localhost;dbname=db12703457-preisschilder', 'db12703457-3', 'Crowe01.10.2019');
$preisschild_code = '329776';
$sql = "SELECT * FROM preisschild WHERE preisschild_code = $preisschild_code";
$schild = $pdo->query($sql)->fetch();

// Include the main TCPDF library (search for installation path).
require_once('tcpdf/tcpdf.php');

// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {
    //Page header
    public function Header() {
        // get the current page break margin
        $bMargin = $this->getBreakMargin();
        // get current auto-page-break mode
        $auto_page_break = $this->AutoPageBreak;
        // disable auto-page-break
        $this->SetAutoPageBreak(false, 0);
        // set bacground image
        $img_file = K_PATH_IMAGES.'mein_bild.jpg';
        $this->Image($img_file, 0, 0, 210, 297, '', '', '', false, 300, '', false, false, 0);
        // restore auto-page-break status
        $this->SetAutoPageBreak($auto_page_break, $bMargin);
        // set the starting point for the page content
        $this->setPageMark();
    }
}
Wenn ich in Zeile 20 aber das Bild aus der Datenbank laden möchte, dann funktioniert es nicht, zumindest wird es nicht angezeigt ...

PHP:
$img_file = K_PATH_IMAGES.''.$schild['vorlage'].'.jpg';
 

Sempervivum

Erfahrenes Mitglied
Exportiere deine Tabelle am besten Mal als SQL und poste das, dann kann man eine Testtabelle anlegen und es untersuchen.
 

CreativPur

Erfahrenes Mitglied
PHP:
$preisschild_code = '329776';
   
$sql = "SELECT * FROM preisschild WHERE preisschild_code = $preisschild_code";
$schild = $pdo->query($sql)->fetch();
   

//////////////////////////// Erzeugung eures PDF Dokuments \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

// TCPDF Library laden
require_once('tcpdf/tcpdf.php');

// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {
   
    //Page header
    public function Header() {
       
        // get the current page break margin
        $bMargin = $this->getBreakMargin();
        // get current auto-page-break mode
        $auto_page_break = $this->AutoPageBreak;
        // disable auto-page-break
        $this->SetAutoPageBreak(false, 0);
        // set bacground image
        $img_file = K_PATH_IMAGES.'../Vorlagen/DINA4_nimm-mich-mit.jpg';
        $this->Image($img_file, 0, 0, 594, 841, '', '', '', false, 300, '', false, false, 0);
        // restore auto-page-break status
        $this->SetAutoPageBreak($auto_page_break, $bMargin);
        // set the starting point for the page content
        $this->setPageMark();
    }
}

// create new PDF document
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 051');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(0);
$pdf->SetFooterMargin(0);

// remove default footer
$pdf->setPrintFooter(false);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)
if (@file_exists(dirname(__FILE__).'/lang/eng.php')) {
    require_once(dirname(__FILE__).'/lang/eng.php');
    $pdf->setLanguageArray($l);
}

// ---------------------------------------------------------

// set font
$pdf->SetFont('times', '', 48);

// add a page
$pdf->AddPage();

// --- example with background set on page ---

// remove default header
$pdf->setPrintHeader(false);

// Print a text
$html = '
<span style="margin:850px; font-size:170px; font-weight:700;">
'.$schild['artikel_bezeichnung'].'
</span>
';
$pdf->writeHTML($html, true, false, true, false, '');

// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output('example_051.pdf', 'I');
 
Zuletzt bearbeitet:

Sempervivum

Erfahrenes Mitglied
Ich meinte eher das exportierte SQL, damit man die Tabelle generieren kann. Und poste auf keinen Fall deine Zugangsdaten!
 

CreativPur

Erfahrenes Mitglied
Das ist ein ellenlanger Text..
Der passt hier nicht rein.
Daher würde ich Dir lieber die ssl-datei per mail zukommen lassen
 

CreativPur

Erfahrenes Mitglied
So funktioniert es jetzt..
Vielen Dank an Sempervivum...

PHP:
class MYPDF extends TCPDF {
    //Page header
    public function Header() {
        global $schild;
        // get the current page break margin
        $bMargin = $this->getBreakMargin();
        // get current auto-page-break mode
        $auto_page_break = $this->AutoPageBreak;
        // disable auto-page-break
        $this->SetAutoPageBreak(false, 0);
        // set bacground image
        $img_file = K_PATH_IMAGES.'Vorlagen/'.$schild['vorlage'].'.jpg';
        
        $this->Image($img_file, 0, 0, 210, 297, '', '', '', false, 300, '', false, false, 0);
        // restore auto-page-break status
        $this->SetAutoPageBreak($auto_page_break, $bMargin);
        // set the starting point for the page content
        $this->setPageMark();
    }
}
 

CreativPur

Erfahrenes Mitglied
Ich habe jetzt nur noch ein Problem..
Ich möchte ein <Div>-Element, oder <td>-Element unter bestimmten Vorraussetzungen anzeigen lassen.

Normal sollte es so funktionieren...

PHP:
<div style="display:(($schild[ratenkauf_laufzeit] == 18) ? 'block' : 'none');">
      $rate2
</div>
Leider funktioniert es nur mit...
PHP:
<div style="display:none;">
      $rate2
</div>
was natürlich nicht ausreicht..
Worin liegt der Fehler ?

Ist es wirklich nicht möglich, bei einer TCPDF in einer <td> ein Bild zu hinterlegen ?
 

Sempervivum

Erfahrenes Mitglied
Hast Du da nicht die PHP-Klammern und die Hochkommas vergessen?
Code:
<div style="display:<?php echo (($schild['ratenkauf_laufzeit'] == 18) ? 'block' : 'none'); ?>">
      $rate2
</div>
 

CreativPur

Erfahrenes Mitglied
Nein, da dieser Code sich bereits in einem PHP-Element befindet

siehe Zeile 191 - 194

PHP:
$preisschild_code = $_POST[preisschild_code];

$sql = "SELECT * FROM preisschild WHERE preisschild_code = $preisschild_code";
$schild = $pdo->query($sql)->fetch();
 
// Include the main TCPDF library (search for installation path).
require_once('tcpdf/tcpdf.php');


// Extend the TCPDF class to create custom Header and Footer
class MYPDF extends TCPDF {
    //Page header
    public function Header() {
        global $schild;
        // get the current page break margin
        $bMargin = $this->getBreakMargin();
        // get current auto-page-break mode
        $auto_page_break = $this->AutoPageBreak;
        // disable auto-page-break
        $this->SetAutoPageBreak(false, 0);
        // set bacground image
        $img_file = K_PATH_IMAGES.'Vorlagen/'.$schild['vorlage'].'.jpg';
        
        $this->Image($img_file, 0, 0, 594, 841, '', '', '', false, 300, '', false, false, 0);
        // restore auto-page-break status
        $this->SetAutoPageBreak($auto_page_break, $bMargin);
        // set the starting point for the page content
        $this->setPageMark();
    }
}



$betrag2 = $schild['preis_neu']/12;
$rate2 = round($betrag2, 2) ;

$zahl1 = $schild['preis_alt'];
$alt_preis = number_format($zahl1, 0, ',', '.');

$zahl2 = $schild['preis_neu'];
$endbetrag = number_format($zahl2, 0, ',', '.');

// create new PDF document
$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Nicola Asuni');
$pdf->SetTitle('TCPDF Example 051');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(0);
$pdf->SetFooterMargin(0);

// remove default footer
$pdf->setPrintFooter(false);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

// set some language-dependent strings (optional)

// set font
$pdf->SetFont('times', '', 10);





// add a page
$pdf->AddPage();



// Print a text
$html =

<<<EOF
<!-- EXAMPLE OF CSS STYLE -->
<style>
    td {font-size: 10px;font-family: "Gill Sans", "Gill Sans MT", "Myriad Pro", "DejaVu Sans Condensed", Helvetica, Arial, "sans-serif"}
    .td_kopf {font-size:850px;}
    .artikel_nr {font-size:40px; text-align:left;}
    .artikel_bezeichnung  {font-size:120px;}
    .artikel_zusatz {font-size:60px;}
    .masse {font-size:40px;}
    .alter_preis {font-size:60px;}
    .abstand_preis_neu {font-size:120px;}
    .preis_neu {font-size:360px;}
    .abstand_info {font-size:40px;}
    .info {font-size:40px;}
    .ratenkauf_laufzeit { color:red; }
    .abstand_preisschild_code {font-size:140px;}
    .preisschild_code {font-size:20px;}
    
</style>




<table width="100%" border="0">
  <tbody>
    <tr>
      <td colspan="11" class="td_kopf">&nbsp;</td>
    </tr>
    <tr>
      <td width="2%" class="artikel_nr">#</td>
      <td width="35%" class="artikel_nr">$schild[artikel_nr]</td>
      <td width="7%">&nbsp;</td>
      <td width="7%">&nbsp;</td>
      <td width="7%">&nbsp;</td>
      <td width="7%">&nbsp;</td>
      <td width="7%">&nbsp;</td>
      <td width="7%">&nbsp;</td>
      <td width="7%">&nbsp;</td>
      <td width="7%">&nbsp;</td>
      <td width="7%">&nbsp;</td>
    </tr>
    
    <tr>
      <td colspan="11"></td>
    </tr>
    <tr>
      <td colspan="11"></td>
    </tr>
    
    <tr>
      <td colspan="11" class="artikel_bezeichnung"><strong>$schild[artikel_bezeichnung]</strong></td>
    </tr>
    
    
    <tr>
      <td colspan="11" class="artikel_zusatz">$schild[artikel_zusatz]</td>
    </tr>
    
    <tr>
      <td colspan="6" class="masse">$schild[masse]</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      
    </tr>
    
    
    
    <tr>
      <td colspan="2">&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td colspan="5" align="center" class="alter_preis"><br /><strong>Normalpreis:<br />$alt_preis,-</strong></td>
      <td>&nbsp;</td>

    </tr>
    <tr>
      <td colspan="11" class="abstand_preis_neu">&nbsp;</td>
    </tr>
    <tr>
      <td colspan="11" class="preis_neu" align="center"><strong>
      
      $endbetrag,-
        
      </strong></td>
      
    </tr>
    <tr>
      <td colspan="11" class="abstand_info"></td>
    </tr>
    <tr>
      <td colspan="11" class="info">$schild[info]</td>
    </tr>
    
    <tr>
      <td colspan="11">
      
      
      <div style="display:(($schild[ratenkauf] == 0 ) ? 'block' : 'none')">
            <img src="Vorlagen/ratenlogo1.png" width="450" ><br />
          <span style="font-size:50px; color:#ee1921" align="left" class="rate2"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>ab $rate2 Euro</strong></span>
      </div>     
          
          
      </td>
    </tr>
    <tr>
      <td colspan="11" class="abstand_preisschild_code"></td>
    </tr>
    <tr>
      <td colspan="11" Class="preisschild_code">ps: $schild[preisschild_code]</td>
    </tr>
    
  </tbody>
</table>


EOF;
$pdf->writeHTML($html, true, false, true, false, '');

//Close and output PDF document
$pdf->Output('example_051.pdf', 'I');

?>
 

Sempervivum

Erfahrenes Mitglied
Nach Probieren und Nachlesen über Stringdefinition bei php.net komme ich zu dem Eindruck, dass man auf diese Weise nur Variablen in den String einfügen kann und keine Ausdrücke. Lösung: Vor der Definition des Strings jeweils eine Variable definieren und diese einfügen.
 
Zuletzt bearbeitet:

Neue Beiträge