PHP mit PHP ein PDF Dokument erstellen

King_Markus

Well-known member
ID: 66751
L
24 November 2006
264
12
Hallo,
finde den fehler nicht.
PDF Dokument wird in der richtigen größe erstellt aber es wird kein Text eingefügt woran liegt das suche den Fehler schon zeit 2 Stunden aber finde Ihn nicht.
AUTOR, TITLE, usw. wird auch nicht eingefügt.

Hier mal der vollständige Code:
PHP:
<?php

$pdf = pdf_new();

pdf_open_file($pdf, "C:\\test1.pdf");

pdf_set_info($pdf, "author", "King_Markus");
pdf_set_info($pdf, "title", "TEST");
pdf_set_info($pdf, "creator", "King_Markus");
pdf_set_info($pdf, "subject", "TEST123");

function mm2pt($val){
    return floatval($val * 2.835016835017);
}
pdf_begin_page($pdf, mm2pt(210), mm2pt(297)); // page width and height.

function pdf_font($pdf,$size='14',$face='arial')
{
   //Set the path 
   $path=$_SERVER['DOCUMENT_ROOT'];
   ${$face} = $face."=$path/fonts/".$face.".ttf";

   pdf_set_parameter($pdf, 'FontOutline',${$face});
      
   $font=pdf_findfont($pdf,$face,"host",0);
  
    pdf_setfont($pdf,$font,$size);
}

$text = "Es geht!";

function pdf_show_xy_backwards($pdf, $text, $font='arial', $size='14', $x='50', $y='50') {
    $currx = $x;
    for ($i = strlen($text); $i > 0; $i--) {
        $char = substr((string)$text, $i-1, 1);
        $width = pdf_stringwidth($pdf, (string)$char, $font, $size);
        $currx = $currx - $width;
        pdf_show_xy($pdf, (string)$char, $currx, $y);
    }
}

pdf_end_page($pdf); // End of Page.
pdf_close($pdf);

pdf_delete($pdf);

?>

bedanke mich schonmal im voraus für eure hilfe.

mfg
markus
 
du hast das nur kopiert, eingefügt und ein bisschen angepasst oder?
Die Funktion pdf_show_xy_backwards wird niemals aufgerufen, von daher kann der Text auch niemals in das PDF geschrieben werden.
 
das ist ne PHP-Extension auf C-Basis, also der Speed wird deutlich schneller sein als FPDF, kommt eben auf die Bedürfnisse an.

Außerdem sollte man TCPDF mitlerweile FPDF vorziehen.
 
@ice-breaker: habe mir mehrere scripts im internet angeschaut und daraus dieses ertellt!
mir ist es leider nicht aufgefallen das ich die 'pdf_show_xy_backwards' nicht ausführe.

habe denn absatz jetzt so abgeändert:
PHP:
function pdf_show_xy_backwards($pdf, $text, $face, $size, $x, $y) {
    $currx = $x;
    for ($i = strlen($text); $i > 0; $i--) {
        $char = substr((string)$text, $i-1, 1);
        $width = pdf_stringwidth($pdf, (string)$char, $face, $size); #line35
        $currx = $currx - $width;
        pdf_show_xy($pdf, (string)$char, $currx, $y);
    }
}
$texta = "Es geht!";

pdf_show_xy_backwards($pdf, $texta, 'arial', '14', '50', '50');

bekomme aber jetzt folgende fehlermeldung:
Fatal error: Uncaught exception 'PDFlibException' with message 'pdf_stringwidth() expects parameter 3 to be long, string given' in C:\xampp\htdocs\test3.php:35 Stack trace: #0 C:\xampp\htdocs\test3.php(35): pdf_stringwidth(Resource id #2, '!', 'arial', '14') #1 C:\xampp\htdocs\test3.php(42): pdf_show_xy_backwards(Resource id #2, 'Es geht!', 'arial', '14', '50', '50') #2 {main} thrown in C:\xampp\htdocs\test3.php on line 35
 
Genau. Steht doch alles da. Parameter 3 erwartet eine Variable vom Datentyp long und du übergibst aber string.
 
So habe es jetzt ein bisschen verbessert! mit automatischem Zeilenumbruch wenn man die DINA4 Seite eingestellt lasst.

PHP:
<?php

$pdf = pdf_new();

pdf_open_file($pdf, "C:\\test1.pdf");

pdf_set_info($pdf, "Author", "yyy");
pdf_set_info($pdf, "Title", "yyy");
pdf_set_info($pdf, "Creator", "yyy");
pdf_set_info($pdf, "Subject", "yyy");
pdf_set_info($pdf, "Keywords", "yyy");

function mm2pt($val){
    return floatval($val * 2.835016835017);
}
pdf_begin_page($pdf, mm2pt(210), mm2pt(297)); // page width and height.

$texta = "Hallo es geht! 123456789 und es geht. einfach mal Weiter schreiben! Ich hoffe er macht von selbst einen umbruch! Und so weiter und so weiter bis es funktioniert!";


function pdf_show_xy_backwards($pdf, $text, $face, $size, $x, $y) {
    $currx = $x;
    $yzeile = $y;
        
        
        $max_laenge=bcdiv(1000,$size,0);
           $char=array();
   for ($i =- strlen($text); $i < 0; $i++) {
        if($ia==0){
            $zeilen_ist++;
            $ia=$max_laenge;
            $anfang=($zeilen_ist*$max_laenge)-$max_laenge;
            $ende=$max_laenge;
            $char[''.$zeilen_ist.''] = substr($text,$anfang,$ende);
        }
        $ia--;
    }
    for ($b = 1; $b < $zeilen_ist+1; $b++) {
       $path=$_SERVER['DOCUMENT_ROOT'];
       ${$face} = $face."=$path/".$face.".ttf";
       pdf_set_parameter($pdf, 'FontOutline',${$face});
       $font=pdf_findfont($pdf,$face,"host",0);
       pdf_setfont($pdf,$font,$size);
            $width = pdf_stringwidth($pdf, $char[''.$b.''], $font, $size);
            #$currx = $currx - $width;
                $yzeile=$yzeile-($size*1.5);
                pdf_show_xy($pdf, $char[''.$b.''], $currx, $yzeile);
                echo "".$char[''.$b.'']."<br>";
    }
}
if($yzeile==""){
    pdf_show_xy_backwards($pdf, $texta, 'arial', '12', '50', '800');
}

pdf_end_page($pdf); // End of Page.
pdf_close($pdf);

pdf_delete($pdf);

?>