Reference index

Add-On Reference index

Informations

Author:Pierre-André Vullioud
License: FPDF

Description

This script allows to display an index with a list of references on several columns.

Reference($txt): adds a reference to the current page.

CreateReference($NbCol): displays the reference list on several columns.

Source

<?php
require('fpdf.php');

class PDF_Ref extends FPDF
{
var $RefActive=false;    //Flag indicating that the index is being processed
var $ChangePage=false;   //Flag indicating that a page break has occurred
var $Reference=array();  //Array containing the references
var $col=0;              //Current column number
var $NbCol;              //Total number of columns
var $y0;                 //Top ordinate of columns

function Header()
{
    if($this->RefActive)
    {
        //Title of index pages
        $this->SetFont('Arial', '', 15);
        $this->Cell(0, 5, 'Index', 0, 1, 'C');
        $this->Ln();
    }
}

function Reference($txt)
{
    $Present=0;
    $size=sizeof($this->Reference);

    //Search the reference in the array
    for ($i=0;$i<$size;$i++){
        if ($this->Reference[$i]['t']==$txt){
            $Present=1;
            $this->Reference[$i]['p'].=', '.$this->PageNo();
        }
    }

    //If not found, add it
    if ($Present==0)
        $this->Reference[]=array('t'=>$txt, 'p'=>$this->PageNo());
}

function CreateReference($NbCol)
{
    //Initialization
    $this->RefActive=true;
    $this->SetFontSize(8);

    //New page
    $this->AddPage();

    //Save the ordinate
    $this->y0=$this->GetY();
    $this->NbCol=$NbCol;
    $size=sizeof($this->Reference);
    $PageWidth=$this->w-$this->lMargin-$this->rMargin;

    for ($i=0;$i<$size;$i++){

        //Handles page break and new position
        if ($this->ChangePage) {
            $this->ChangePage=false;
            $this->y0=$this->GetY()-$this->FontSize-1;
        }

        //LibellLabel
        $str=$this->Reference[$i]['t'];
        $strsize=$this->GetStringWidth($str);
        $this->Cell($strsize+2, $this->FontSize+2, $str, 0, 0, 'R');

        //Dots
        //Computes the widths
        $ColWidth = ($PageWidth/$NbCol)-2;
        $w=$ColWidth-$this->GetStringWidth($this->Reference[$i]['p'])-($strsize+4);
        if ($w<15)
            $w=15;
        $nb=$w/$this->GetStringWidth('.');
        $dots=str_repeat('.', $nb-2);
        $this->Cell($w-2, $this->FontSize+2, $dots, 0, 0, 'L');

        //Page number
        $Largeur=$ColWidth-$strsize-$w;
        $this->Cell($Largeur, $this->FontSize+2, $this->Reference[$i]['p'], 0, 1, 'R');
    }
    $this->RefActive=false;
}

function SetCol($col)
{
    //Set position on a column
    $this->col=$col;
    $x=$this->rMargin+$col*($this->w-$this->rMargin-$this->rMargin)/$this->NbCol;
    $this->SetLeftMargin($x);
    $this->SetX($x);
}

function AcceptPageBreak()
{
    if ($this->RefActive) {
        if($this->col<$this->NbCol-1)
        {
            //Go to the next column
            $this->SetCol($this->col+1);
            $this->SetY($this->y0);
            //Stay on the page
            return false;
        }
        else
        {
            //Go back to the first column
            $this->SetCol(0);
            $this->ChangePage=true;
            //Page break
            return true;
        }
    }
    else
    {
        return true;
    }
}
}
?>

Example

<?php
require('ref_index.php');

//Sort function for references
//To be defined by the user to achieve desired results
//This function is case insensitive
function cmp($a, $b) {
    return strnatcmp(strtolower($a['t']), strtolower($b['t']));
}

$pdf=new PDF_Ref();
$pdf->SetFont('Arial', '', 15);

//Page 1
$pdf->AddPage();
$pdf->Cell(0, 5, 'Page 1', 0, 1, 'C');
$pdf->Reference('A');
$pdf->Reference('B');
$pdf->Reference('R');

//Page 2
$pdf->AddPage();
$pdf->Cell(0, 5, 'Page 2', 0, 1, 'C');
$pdf->Reference('R');
$pdf->Reference('a');
$pdf->Reference('A');
$pdf->Reference('g');
$pdf->Reference('G');
$pdf->Reference('N');
for ($i=1;$i<=200;$i++)
    $pdf->Reference('Ref'.$i);

//Alphabetic sort of the references
usort($pdf->Reference, 'cmp');

//Creation of index
$pdf->CreateReference(4);
$pdf->Output();
?>
View the result here.

Download

ZIP | TGZ
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.