Skripty : Záložky

Popis

Toto rozšíření přidává podporu pro záložky. Metoda pro přidání záložky je:

Bookmark(string txt [, int level [, float y]])
txt
Nadpis záložky.

level
úroveň záložky (0 je nejvyšší úroveň 1 je těsně pod hranicí, a tak dále).

y
Cíl pozice záložky v aktuální stránce. -1 znamená, že součastná pozice. Výchozí hodnota: 0.

Nadpis záložky musí být v kódování ISO-8859-1.

Pro kódování UTF-8 je k dispozici metoda :

BookmarkUTF8(string txt [, int level [, float y]])

Zdrojový kód

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

class PDF_Bookmark extends FPDF

{
var $outlines=array();
var $OutlineRoot;

function Bookmark($txt, $level=0, $y=0)
{
    if($y==-1)
        $y=$this->GetY();
    $this->outlines[]=array('t'=>$txt, 'l'=>$level, 'y'=>($this->h-$y)*$this->k, 'p'=>$this->PageNo());
}

function BookmarkUTF8($txt, $level=0, $y=0)
{
    $this->Bookmark($this->_UTF8toUTF16($txt),$level,$y);
}

function _putbookmarks()
{
    $nb=count($this->outlines);
    if($nb==0)
        return;
    $lru=array();
    $level=0;
    foreach($this->outlines as $i=>$o)
    {
        if($o['l']>0)
        {
            $parent=$lru[$o['l']-1];
            // Nastavení nadřazeného a posledního odkazu

            $this->outlines[$i]['parent']=$parent;
            $this->outlines[$parent]['last']=$i;
            if($o['l']>$level)
            {
                // Vyšší úroveň: nastavení prvního odkazu
                $this->outlines[$parent]['first']=$i;
            }
        }
        else
            $this->outlines[$i]['parent']=$nb;
        if($o['l']<=$level and $i>0)
        {
            // Nastavení předchozího a následujícího odkazu
            $prev=$lru[$o['l']];
            $this->outlines[$prev]['next']=$i;
            $this->outlines[$i]['prev']=$prev;
        }
        $lru[$o['l']]=$i;
        $level=$o['l'];
    }
    // Nástin položky 
    $n=$this->n+1;
    foreach($this->outlines as $i=>$o)
    {
        $this->_newobj();
        $this->_out('<</Title '.$this->_textstring($o['t']));
        $this->_out('/Parent '.($n+$o['parent']).' 0 R');
        if(isset($o['prev']))
            $this->_out('/Prev '.($n+$o['prev']).' 0 R');
        if(isset($o['next']))
            $this->_out('/Next '.($n+$o['next']).' 0 R');
        if(isset($o['first']))
            $this->_out('/First '.($n+$o['first']).' 0 R');
        if(isset($o['last']))
            $this->_out('/Last '.($n+$o['last']).' 0 R');
        $this->_out(sprintf('/Dest [%d 0 R /XYZ 0 %.2F null]',1+2*$o['p'],$o['y']));
        $this->_out('/Count 0>>');
        $this->_out('endobj');
    }
    // Nástin kořene
    $this->_newobj();
    $this->OutlineRoot=$this->n;
    $this->_out('<</Type /Outlines /First '.$n.' 0 R');
    $this->_out('/Last '.($n+$lru[0]).' 0 R>>');
    $this->_out('endobj');
}

function _putresources()
{
    parent::_putresources();
    $this->_putbookmarks();
}

function _putcatalog()
{
    parent::_putcatalog();
    if(count($this->outlines)>0)
    {
        $this->_out('/Outlines '.$this->OutlineRoot.' 0 R');
        $this->_out('/PageMode /UseOutlines');
    }
}
}

?>


Příklad

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

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

// Strana 1
$pdf->AddPage();
$pdf->Bookmark('Page 1');
$pdf->Bookmark('Paragraph 1',1,-1);

$pdf->Cell(0,6,'Paragraph 1');
$pdf->Ln(50);
$pdf->Bookmark('Paragraph 2',1,-1);

$pdf->Cell(0,6,'Paragraph 2');
// Strana 2
$pdf->AddPage();
$pdf->Bookmark('Page 2');

$pdf->Bookmark('Paragraph 3',1,-1);
$pdf->Cell(0,6,'Paragraph 3');

$pdf->Output();
?>


Ukázka

zalozky.pdf

Download

zalozky.zip

Informace

Author: Olivier
License: FPDF