Skripty : Rejstřík

Popis

Tento skript umožňuje zobrazení rejstříku se seznamem odkazů v několika sloupcích.

Reference($txt): přidává odkaz na aktuální stránku.

CreateReference($NbCol): zobrazí seznam referencí v několika sloupcích.

Zdrojový kód

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

class PDF_Ref extends FPDF

{
var $RefActive=false;    // Označení, že se zpracován rejstřík 
var $ChangePage=false;   // Označení, že došlo k přerušení stránky
var $Reference=array();  // Pole obsahující odkazy
var $col=0;              // Aktuální číslo sloupce

var $NbCol;              // Celkový počet sloupců
var $y0;                 //Top ordinate of columns

function Header()
{
    if($this->RefActive)
    {
        // Název stránky s rejstříkem
        $this->SetFont('Arial','',15);
        $this->Cell(0,5,'Index',0,1,'C');
        $this->Ln();
    }
}

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

    // Hledání odkazů v poli 
    for ($i=0;$i<$size;$i++){
        if ($this->Reference[$i]['t']==$txt){
            $Present=1;
            $this->Reference[$i]['p'].=','.$this->PageNo();
        }
    }

    // Pokud není nalezen, přidá se
    if ($Present==0)
        $this->Reference[]=array('t'=>$txt,'p'=>$this->PageNo());
}

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

    // Nová stránka
    $this->AddPage();

    // Uložení souřadnic
    $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');

        // Číslo stránky
        $Largeur=$ColWidth-$strsize-$w;
        $this->Cell($Largeur,$this->FontSize+2,$this->Reference[$i]['p'],0,1,'R');
    }
    $this->RefActive=false;
}

function SetCol($col)
{
    // Nastavení pozice na sloupec
    $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)
        {
            // Přejít na další sloupec
            $this->SetCol($this->col+1);
            $this->SetY($this->y0);
            // Zůstaň na stránce
            return false;
        }
        else
        {
            // Vrať se do prvního sloupce
            $this->SetCol(0);
            $this->ChangePage=true;
            // Odstránkování
            return true;
        }
    }
    else
    {
        return true;
    }
}
}

?>


Příklad

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

// Funkce pro třídění odkazů
//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);

// Strana 1
$pdf->AddPage();

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

$pdf->Reference('B');
$pdf->Reference('R');

// Strana 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);


// Abecední třídění odkazů
usort($pdf->Reference, 'cmp');

// Vytvoření rejstříku
$pdf->CreateReference(4);
$pdf->Output();

?>


Ukázka

fpdf-rejstrik.pdf

Download

fpdf-rejstrik.zip

Informace

Author: Pierre-André Vullioud
License: FPDF