2012-02-26 3 views
9

Я уже некоторое время борется с данными верхнего и нижнего колонтитулов и подумал, что пришло время спросить об этом здесь, на форуме.FPDF: Определите, когда устанавливать данные заголовка/нижнего колонтитула

Что я пытаюсь сделать, так это решить, что если страница добавляется, если верхний/нижний колонтитул должен быть добавлен или нет. поэтому по коду я хочу включить или выключить заголовок/нижний колонтитул при добавлении страницы.

Я попытался манипулировать функцией AddPage, установив дополнительный аргумент $ setFooterHeader, для которого по умолчанию установлено значение true. И затем попытка установить этот аргумент в false, когда я делаю addPage ('', '', false); но по какой-то причине он игнорирует его, и я не могу понять, почему.

Если я установил значение по умолчанию аргумента равным false в самой функции, он работает как шарм, но когда я пытаюсь сделать это в своем скрипте и задаю его как аргумент, он полностью игнорирует его.

Вот фрагмент кода из файла fpdf.php (функция AddPage)

function AddPage($orientation='', $size='', $setHeaderFooter=true) 
{ 
    // Start a new page 
    if($this->state==0) 
    $this->Open(); 
    $family = $this->FontFamily; 
    $style = $this->FontStyle.($this->underline ? 'U' : ''); 
    $fontsize = $this->FontSizePt; 
    $lw = $this->LineWidth; 
    $dc = $this->DrawColor; 
    $fc = $this->FillColor; 
    $tc = $this->TextColor; 
    $cf = $this->ColorFlag; 
    if($this->page>0) 
    { 
     // Page footer 
     if ($setHeaderFooter == true) 
     { 
      $this->InFooter = true; 
      $this->Footer(); 
      $this->InFooter = false; 
      // Close page 
      $this->_endpage(); 
     } 
     } 
    // Start new page 
    $this->_beginpage($orientation,$size,$setHeaderFooter); 
    // Set line cap style to square 
    $this->_out('2 J'); 
    // Set line width 
    $this->LineWidth = $lw; 
    $this->_out(sprintf('%.2F w',$lw*$this->k)); 
    // Set font 
    if($family) 
    $this->SetFont($family,$style,$fontsize); 
    // Set colors 
    $this->DrawColor = $dc; 
    if($dc!='0 G') 
    $this->_out($dc); 
    $this->FillColor = $fc; 
    if($fc!='0 g') 
    $this->_out($fc); 
    $this->TextColor = $tc; 
    $this->ColorFlag = $cf; 
    // Page header 
    if ($setHeaderFooter == true) 
    { 
     $this->InHeader = true; 
     $this->Header(); 
     $this->InHeader = false; 
    } 
    // Restore line width 
    if($this->LineWidth!=$lw) 
    { 
     $this->LineWidth = $lw; 
     $this->_out(sprintf('%.2F w',$lw*$this->k)); 
    } 
    // Restore font 
    if($family) 
    $this->SetFont($family,$style,$fontsize); 
    // Restore colors 
    if($this->DrawColor!=$dc) 
    { 
     $this->DrawColor = $dc; 
     $this->_out($dc); 
    } 
    if($this->FillColor!=$fc) 
    { 
     $this->FillColor = $fc; 
     $this->_out($fc); 
    } 
    $this->TextColor = $tc; 
    $this->ColorFlag = $cf; 
} 

Ниже приведен фрагмент кода моего PHP скрипт, который использует FPDF

/** PHP FPDF */ 
require_once 'classes/FPDF/fpdf.php'; 
require_once 'classes/FPDI/fpdi.php'; 

class PDF extends FPDI 
{ 
    function Header() 
    { 
     $this->SetFont('Arial', 'B', 18); //set font to Arial, Bold, and 16 Size 

     //create heading with params 
     //0 - 100% width 
     //9 height 
     //"Page Heading" - With this text 
     //1 - border around it, and center aligned 
     //1 - Move pionter to new line after writing this heading 
     //'C' - center aligned 
     $this->Cell(0, 9, 'Page Heading', 1, 1, 'C'); 

     $this->ln(5); 
    } 

    function Footer() 
    { 
     //move pionter at the bottom of the page 
     $this->SetY(-15); 

     //set font to Arial, Bold, size 10 
     $this->SetFont('Arial', 'B', 10); 

     //set font color to blue 
     $this->SetTextColor(52, 98, 185); 

     $this->Cell(0, 10, 'Footer Text', 0, 0, 'L'); 

     //set font color to gray 
     $this->SetTextColor(150, 150, 150); 

     //write Page No 
     $this->Cell(0, 10, 'Page No: ' . $this->PageNo(), 0, 0, 'R'); 
    } 
} 

// Create new PDF object 
$pdf = new PDF('P','mm','A4'); 
$pdf->addPage('','',false); 

// Output pdf file 
$pdf->Output('test.pdf','D'); 

Ваша помощь очень ценится! !

ответ

9

Я решил эту проблему, установив флаг вне класса и использовать этот флаг в функции верхнего и нижнего колонтитулов

Исправление в разделе страницы, а не в функции AddPage

Просто, прежде чем делать $ pdf-> addPage. Вы устанавливаете флаг, поскольку addPage автоматически вызывает функцию верхнего и нижнего колонтитула.

Вот правильный код (фрагмент PHP скрипт, который использует FPDF)

/** PHP FPDF */ 
require_once 'classes/FPDF/fpdf.php'; 
require_once 'classes/FPDI/fpdi.php'; 

class PDF extends FPDI 
{ 
    function Header() 
    { 
     if ($this->header == 1) 
     { 
      $this->SetFont('Arial', 'B', 18); //set font to Arial, Bold, and 16 Size 

      //create heading with params 
      //0 - 100% width 
      //9 height 
      //"Page Heading" - With this text 
      //1 - border around it, and center aligned 
      //1 - Move pionter to new line after writing this heading 
      //'C' - center aligned 
      $this->Cell(0, 9, 'Page Heading', 1, 1, 'C'); 

      $this->ln(5); 
     } 
    } 

    function Footer() 
    { 
     if ($this->footer == 1) 
     { 
      //move pionter at the bottom of the page 
      $this->SetY(-15); 

      //set font to Arial, Bold, size 10 
      $this->SetFont('Arial', 'B', 10); 

      //set font color to blue 
      $this->SetTextColor(52, 98, 185); 

      $this->Cell(0, 10, 'Footer Text', 0, 0, 'L'); 

      //set font color to gray 
      $this->SetTextColor(150, 150, 150); 

      //write Page No 
      $this->Cell(0, 10, 'Page No: ' . $this->PageNo(), 0, 0, 'R'); 
     } 
    } 
} 

// Create new PDF object 
$pdf = new PDF('P','mm','A4'); 

$pdf->header = 0; 
$pdf->footer = 0; 
$pdf->addPage('','',false); 

// Output pdf file 
$pdf->Output('test.pdf','D'); 
+0

Я установил это, но FOOTER не работает. Когда он установлен в 0, он все еще показывает нижний колонтитул. –

6

Я знаю, что ты узнал awnser уже для себя, но и как один из комментаторов отметил, это не работает для меня с нижним колонтитулом.

Хорошая новость заключается в том, что вы можете обойтись без установки внешних флагов. Вы можете использовать $ this-> PageNo(), чтобы определить, включать ли верхний и нижний колонтитулы или нет.

Например, если вы хотите, чтобы исключить верхние и нижние колонтитулы на первой странице, как я сделал:

function Footer() { 
    if($this->PageNo() != 1){ 
      // footer code 
    } 
} 

Если вы хотите, скажем, исключить их на несколько страниц, а не писать endless if, вы должны просто поместить номера страниц в массив и исключить из него in_array(), следует ли включать заголовок и/или нижний колонтитул.

1

Вы можете определить несколько различных типов верхних и нижних колонтитулов с помощью вызова функций вне класса:

class PDF extends FPDF { 
    function Header(){ 
     if(!empty($this->enableheader)) 
      call_user_func($this->enableheader,$this); 
    } 
    function Footer(){ 
     if(!empty($this->enablefooter)) 
      call_user_func($this->enablefooter,$this); 
    } 
} 


$pdf = new PDF('P'); 
$pdf->SetTextColor(0); 
$pdf->SetFont('Arial','B',10); 
$pdf->AliasNbPages(); 
$pdf->AddPage(); 

$pdf->Cell(50,6,'Headerless & Footerless page'); 



$pdf->enableheader = 'header1'; 
$pdf->AddPage(); 
$pdf->enablefooter = 'footer1'; 

$pdf->AddPage(); 
$pdf->AddPage(); 


$pdf->enableheader = 'header2'; 
$pdf->AddPage(); 
$pdf->enablefooter = 'footer2'; 

$pdf->Output(); 



function header1($pdf){ 
    $pdf->Cell(50,6,'Header type 1',1,0,'L'); 
} 
function footer1($pdf){ 
    $pdf->SetY(280); 
    $pdf->Cell(50,6,'Footer type 1',1,0,'L'); 
    $pdf->Cell(0,6,"Page: {$pdf->PageNo()} of {nb}",1,0,'R'); 
} 
function header2($pdf){ 
    $pdf->Cell(50,6,'Header type 2',1,0,'L'); 
} 
function footer2($pdf){ 
    $pdf->SetY(280); 
    $pdf->Cell(50,6,'Footer type 2',1,0,'L'); 
    $pdf->Cell(0,6,"Page: {$pdf->PageNo()} of {nb}",1,0,'R'); 
} 

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