Tutorial 4 - Mehrere Spalten

Verwendung mehrerer Spalten in einem Dokument

Dieses Beispiel ist eine Variante der vorherigen Anleitung und zeigt wie Text über mehrere Spalte verteilt werden kann.

<?php

define('FPDF_FONTPATH','font/');
require('fpdf.php');

class PDF extends FPDF
{
  // Current column
  var {"$"}col=0;
  // Ordinate of column start
  var {"$"}y0;

  function Header()
  {
    //Page header
    global {"$"}title;

    {"$"}this->SetFont('Arial','B',15);
    {"$"}w={"$"}this->GetStringWidth({"$"}title)+6;
    {"$"}this->SetX((210-{"$"}w)/2);
    {"$"}this->SetDrawColor(0,80,180);
    {"$"}this->SetFillColor(230,230,0);
    {"$"}this->SetTextColor(220,50,50);
    {"$"}this->SetLineWidth(1);
    {"$"}this->Cell({"$"}w,9,{"$"}title,1,1,'C',1);
    {"$"}this->Ln(10);
    // Save ordinate
    {"$"}this->y0={"$"}this->GetY();
  }

  function Footer()
  {
    // Page footer
    {"$"}this->SetY(-15);
    {"$"}this->SetFont('Arial','I',8);
    {"$"}this->SetTextColor(128);
    {"$"}this->Cell(0,10,'Seite '.{"$"}this->PageNo(),0,0,'C');
  }

  function SetCol({"$"}col)
  {
    // Set position at a given column
    {"$"}this->col={"$"}col;
    {"$"}x=10+{"$"}col*65;
    {"$"}this->SetLeftMargin({"$"}x);
    {"$"}this->SetX({"$"}x);
  }

  function AcceptPageBreak()
  {
    // Method accepting or not automatic page break
    if({"$"}this->col<2)
    {
     // Go to next column
     {"$"}this->SetCol({"$"}this->col+1);
     // Set ordinate to top
     {"$"}this->SetY({"$"}this->y0);
     // Keep on page
     return false;
    }
    else
    {
     // Go back to first column
     {"$"}this->SetCol(0);
     // Page break
     return true;
    }
  }

  function ChapterTitle({"$"}num,{"$"}label)
  {
    // Title
    {"$"}this->SetFont('Arial','',12);
    {"$"}this->SetFillColor(200,220,255);
    {"$"}this->Cell(0,6,"Kapitel {"$"}num : {"$"}label",0,1,'L',1);
    {"$"}this->Ln(4);
    // Save ordinate
    {"$"}this->y0={"$"}this->GetY();
  }

  function ChapterBody({"$"}fichier)
  {
    // Read text file
    {"$"}f=fopen({"$"}fichier,'r');
    {"$"}txt=fread({"$"}f,filesize({"$"}fichier));
    fclose({"$"}f);
    // Font
    {"$"}this->SetFont('Times','',12);
    // Output text in a 6 cm width column
    {"$"}this->MultiCell(60,5,{"$"}txt);
    {"$"}this->Ln();
    // Mention
    {"$"}this->SetFont('','I');
    {"$"}this->Cell(0,5,'(end of excerpt)');
    // Go back to first column
    {"$"}this->SetCol(0);
  }

  function PrintChapter({"$"}num,{"$"}title,{"$"}file)
  {
    // Add chapter
    {"$"}this->AddPage();
    {"$"}this->ChapterTitle({"$"}num,{"$"}title);
    {"$"}this->ChapterBody({"$"}file);
  }
}

{"$"}pdf = new PDF();
{"$"}title='20000 Meilen unter dem Meer';
{"$"}pdf->SetTitle({"$"}title);
{"$"}pdf->SetAuthor('Jules Verne');
{"$"}pdf->PrintChapter(1,'Das erste Kapitel','20k_c1.txt');
{"$"}pdf->PrintChapter(2,'Das zweite Kapitel','20k_c2.txt');
{"$"}pdf->Output();

?>

Die Besonderheit liegt hierbei bei der Verwendung der Callback Methode AcceptPageBreak(). Es ermöglicht die Erlaubnis und die Verweigerung eines automatischen Seitenumbruchs und die Reaktion darauf. Durch die Ablehnung des automatischen Seitenumbruchs und die Veränderung der Seitenabstände und der aktuellen Position wird das Spaltenlayout erzeugt.

Ansonsten hat sich nicht viel geändert. Zwei neue Eigenschaften wurden für die Speicherung der aktuellen Spaltennummer und die Position des Spaltenbeginns. Der Aufruf von MultiCell() definiert eine Spaltenbreite von 6 cm.

Zurück

Es ist ein Fehler aufgetreten

Es ist ein Fehler aufgetreten

Was ist das Problem?

Bei der Ausführung des Skriptes ist ein Fehler aufgetreten. Irgendetwas funktioniert nicht richtig.

Wie kann ich das Problem lösen?

Öffnen Sie die aktuelle Log-Datei im Ordner var/logs bzw. app/logs und suchen Sie die zugehörige Fehlermeldung (normalerweise die letzte).

Weitere Informationen

Die Skriptausführung wurde gestoppt, weil irgendetwas nicht korrekt funktioniert. Die eigentliche Fehlermeldung wird aus Sicherheitsgründen hinter dieser Meldung verborgen und findet sich in der aktuellen Log-Datei (siehe oben). Wenn Sie die Fehlermeldung nicht verstehen oder nicht wissen, wie das Problem zu beheben ist, durchsuchen Sie die Contao-FAQs oder besuchen Sie die Contao-Supportseite.