PDF aus Mysqldatenbank dynamisch erstellen

He-man 123

Grünschnabel
Guten Morgen Zusammen,

ich stelle eine Verbindung zur Datenbank und lasse mir das Ergebnis in PDF, als Tabellenform ausgeben. Das Klappt auch soweit. Jedoch ist die ausgegebene Tabelle statisch und die Einträge werden einfach über die Spaltenränder geschrieben. Könnt Ihr mir vielleicht weiterhelfen, wie ich die Tabelle anpassen, bzw. dynamisch gestalten kann?

Hier der Code:


PHP:
error_reporting(E_ERROR | E_PARSE);
define('FPDF_FONTPATH', 'font/');
require('mysql_table.php');


class PDF extends PDF_MySQL_Table
{
}
//Connect to database
mysql_connect('127.0.0.1', 'root');
mysql_select_db('Klausurplaner');


$pdf=new PDF();
$pdf->Open();
$pdf->AddPage();
$pdf->Table('SELECT H.lfd, K.Klasse, J.Date, F.Fach, H.Test1, H.DateTest1, H.NeedTest1, H.Klausur, H.DateKlausur, H.NeedKlausur, H.Test2, H.DateTest2, H.NeedTest2
FROM haupt as H, klasse as K, jahrgang as J, fach as F
WHERE H.Klasse = K.ID and H.Jahrgang = J.ID and H.Fach = F.ID
ORDER BY lfd;');
$pdf->Output();

Diese greift auf diese PHP-Datei zu:

PHP:
<?php
require('C:/xampp/htdocs/Klausurplaner/fpdf/fpdf.php');

class PDF_MySQL_Table extends FPDF
{
var $ProcessingTable=false;
var $aCols=array();
var $TableX;
var $HeaderColor;
var $RowColors;
var $ColorIndex;

function Header()
{
    //Print the table header if necessary
    if($this->ProcessingTable)
        $this->TableHeader();
}

function TableHeader()
{
    $this->SetFont('Arial', 'B', 12);
    $this->SetX($this->TableX);
    $fill=!empty($this->HeaderColor);
    if($fill)
        $this->SetFillColor($this->HeaderColor[0], $this->HeaderColor[1], $this->HeaderColor[2]);
    foreach($this->aCols as $col)
        $this->Cell($col['w'], 6, $col['c'], 1, 0, 'C', $fill);
    $this->Ln();
}

function Row($data)
{
    $this->SetX($this->TableX);
    $ci=$this->ColorIndex;
    $fill=!empty($this->RowColors[$ci]);
    if($fill)
        $this->SetFillColor($this->RowColors[$ci][0], $this->RowColors[$ci][1], $this->RowColors[$ci][2]);
    foreach($this->aCols as $col)
        $this->Cell($col['w'], 5, $data[$col['f']], 1, 0, $col['a'], $fill);
    $this->Ln();
    $this->ColorIndex=1-$ci;
}

function CalcWidths($width, $align)
{
    //Compute the widths of the columns
    $TableWidth=0;
    foreach($this->aCols as $i=>$col)
    {
        $w=$col['w'];
        if($w==-1)
            $w=$width/count($this->aCols);
        elseif(substr($w, -1)=='%')
            $w=$w/100*$width;
        $this->aCols[$i]['w']=$w;
        $TableWidth+=$w;
    }
    //Compute the abscissa of the table
    if($align=='C')
        $this->TableX=max(($this->w-$TableWidth)/2, 0);
    elseif($align=='R')
        $this->TableX=max($this->w-$this->rMargin-$TableWidth, 0);
    else
        $this->TableX=$this->lMargin;
}

function AddCol($field=-1, $width=-1, $caption='', $align='L')
{
    //Add a column to the table
    if($field==-1)
        $field=count($this->aCols);
    $this->aCols[]=array('f'=>$field, 'c'=>$caption, 'w'=>$width, 'a'=>$align);
}

function Table($query, $prop=array())
{
    //Issue query
    $res=mysql_query($query) or die('Error: '.mysql_error()."<BR>Query: $query");
    //Add all columns if none was specified
    if(count($this->aCols)==0)
    {
        $nb=mysql_num_fields($res);
        for($i=0;$i<$nb;$i++)
            $this->AddCol();
    }
    //Retrieve column names when not specified
    foreach($this->aCols as $i=>$col)
    {
        if($col['c']=='')
        {
            if(is_string($col['f']))
                $this->aCols[$i]['c']=ucfirst($col['f']);
            else
                $this->aCols[$i]['c']=ucfirst(mysql_field_name($res, $col['f']));
        }
    }
    //Handle properties
    if(!isset($prop['width']))
        $prop['width']=0;
    if($prop['width']==0)
        $prop['width']=$this->w-$this->lMargin-$this->rMargin;
    if(!isset($prop['align']))
        $prop['align']='C';
    if(!isset($prop['padding']))
        $prop['padding']=$this->cMargin;
    $cMargin=$this->cMargin;
    $this->cMargin=$prop['padding'];
    if(!isset($prop['HeaderColor']))
        $prop['HeaderColor']=array();
    $this->HeaderColor=$prop['HeaderColor'];
    if(!isset($prop['color1']))
        $prop['color1']=array();
    if(!isset($prop['color2']))
        $prop['color2']=array();
    $this->RowColors=array($prop['color1'], $prop['color2']);
    //Compute column widths
    $this->CalcWidths($prop['width'], $prop['align']);
    //Print header
    $this->TableHeader();
    //Print rows
    $this->SetFont('Arial', '', 11);
    $this->ColorIndex=0;
    $this->ProcessingTable=true;
    while($row=mysql_fetch_array($res))
        $this->Row($row);
    $this->ProcessingTable=false;
    $this->cMargin=$cMargin;
    $this->aCols=array();
}
}
?>

MfG He-man 123
 
nein das habe ich nicht selbst geschrieben. Ich habe den Code von der fpdf.de Seite und für meine Bedürfnisse angepasst.
Die Ausgabe sieht so aus, dass zwar eine Tabelle erstellt wird, aber der Inhalt über die einzelnen Spalten hinweg geschrieben wird. Ich suche also nach einer Lösung, bzw. einem Ansatz, wie ich die Spaltengröße anpassen kann.
 
Ja das weiss ich. Das klappt allerdings nicht. Es wird versucht, die "class.multicelltag.php" zu öffnen, die ja nicht vorhanden ist.
 
Zurück