TCPDF - странная проблема с нижними колонтитулами - PullRequest
0 голосов
/ 11 февраля 2011

Проверьте исходный код здесь:

http://www.savvissl.com/demo1/showcode.php

Проверьте сценарий здесь

http://www.savvissl.com/demo1/testPDF.php

Вот проблема.. нижний колонтитул хорошо печатается на каждой странице, кроме последней.Последняя страница никогда не имеет нижнего колонтитула.Если в документе только одна страница, нижний колонтитул не будет печататься вообще.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Хорошо, я не мог понять это, но я был в состоянии скопировать пример коллег, который работал.Если кому-то нужен вот этот исходный код:

<?php

require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');


define('PDF_FOOTER_TEXT','800 Vinial St. Pittsburgh, PA 15212 | phone: 412.321.7006 | fax: 412.321.7005 | www.savvior.com');
$PDF_LINE_COLOR=array(255,255,0);
define('PDF_FOOTER_TEXT_COLOR',170);


class MYPDF extends TCPDF
{
    //Page header
    public function Header()
    {
        global $PDF_LINE_COLOR;
        $image_file = K_PATH_IMAGES.'image.jpg';
        $this->Image($image_file, 160, 0, 30, '', 'JPG', '', 'T', false, 300, '', false, false, 0, false, false, false);
        $this->SetFont('helvetica', 'B', 20);
        $this->Cell(0, 15, '', 0, false, 'C', 0, '', 0, false, 'M', 'M');
        $this->line(10,27,200,27,array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'solid' => 4, 'color' => $PDF_LINE_COLOR));
    }
    public function Footer()
    {
        global $PDF_LINE_COLOR;
        $cur_y = $this->GetY();
        $ormargins = $this->getOriginalMargins();
        $this->SetTextColor(PDF_FOOTER_TEXT_COLOR, PDF_FOOTER_TEXT_COLOR, PDF_FOOTER_TEXT_COLOR);
        $this->SetY($cur_y);
        $this->line(10,400,200,400,array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'solid' => 4, 'color' => $PDF_LINE_COLOR));
        $this->Cell(0,11,"Page ". $this->getAliasNumPage().'/'.$this->getAliasNbPages(),'T',0,'L');
        $this->Cell(0,11,PDF_FOOTER_TEXT,'T',0,'R');
    }

}

ob_start();
    ?><h1>Content Is Needed For This Page...</h1>
    ...
    <?

    $html=ob_get_clean();

function makePDFFile($fileName,$html)
{
    $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
    // set document information
    $pdf->SetCreator(PDF_CREATOR);
    $pdf->SetAuthor('Savvior Project Manager');
    $pdf->SetTitle('Auto Generated PDF');
    $pdf->SetSubject('Auto Generated PDF');
    $pdf->SetKeywords('TCPDF');
    // set default header data
    $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
    // set header and footer fonts
    $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
    $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
    // set default monospaced font
    $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
    //set margins
    $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP+5, PDF_MARGIN_RIGHT);
    $pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
    $pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
    //set auto page breaks
    $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
    //set image scale factor
    $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
    //set some language-dependent strings
    $pdf->setLanguageArray($l);
    // set font
    $pdf->SetFont('helvetica', '', 12);
    // add a page
    $pdf->AddPage();
    $pdf->writeHTML($html, true, false, true, false, '');
    $doc=$pdf->Output(dirname(__FILE__)."/cache/{$fileName}", 'F');
    return $fileName;
}

$file=makePDFFile('poo-poo-platter.pdf',$html);

header("location: cache/{$file}");
?>

Сравнение этого нового кода с моим старым не показывает, почему это работает ... на самом деле, пример в папке примеров TCPDF демонстрирует ту же проблемуоднако, если вы запустите его с их сайта, нижний колонтитул отображается правильно.Ну, во всяком случае, надеюсь, что это помогает кому-то

0 голосов
/ 11 февраля 2011

Я ничего не знаю о TCPDF, кроме того, что я только что узнал просматривая их документы .

Похоже, Footer() вызывается только для вас, когда вы явно вызываете AddPage(), после чего он добавляется на ПРЕДЫДУЩУЮ СТРАНИЦУ. В остальное время я считаю, что вы должны называть это сами.

Есть также целая вещь StartPage()/EndPage(), которая звучит как альтернатива AddPage().

Вместо этого вы можете захотеть: «Начальная страница, верхний колонтитул, рисование текста, нижний колонтитул, конечная страница». Похоже, что Write() вызывает AddPage() для вас, поэтому верхние и нижние колонтитулы на странице «все, кроме последней» присутствуют.

Итог: просто позвоните Footer() после того, как вы позвоните Write() в этом примере. Примеры из реального мира почти наверняка будут немного сложнее.

...