FPDF:决定​​何时设置页眉/页脚数据

GuZ*_*zie 9 php fpdf

我一直在努力处理页眉和页脚数据已经有一段时间了,并且认为是时候在论坛上问这个了.

我要做的是决定是否添加页眉/页脚是否应该添加页眉/页脚.所以代码方面我想在添加页面时将页眉/页脚设置为打开或关闭.

我试图通过设置一个额外的参数$ setFooterHeader来操作AddPage函数,默认设置为true.每当我执行addPage('','',false)时,尝试将此参数设置为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; 
} 
Run Code Online (Sandbox Code Playgroud)

下面是我的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'); 
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助!!

GuZ*_*zie 10

我通过在类外部设置一个标志并在页眉和页脚函数中使用此标志来解决此问题

修复程序位于页面部分,而不是在addPage函数中

在做$ pdf-> addPage之前你设置标志,因为addPage会自动调用页眉和页脚功能.

这是正确的代码(使用FPDF的PHP脚本片段)

/** 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'); 
Run Code Online (Sandbox Code Playgroud)


Ogi*_*vis 6

我知道你已经找到了自己的芒果,但正如其中一位评论者所指出的那样,这对我来说并不适用于页脚.

好消息是你可以不用设置外部标志.您可以使用$ this-> PageNo()来确定是否包含页眉和页脚.

例如,如果你想在第一页上排除页眉和页脚,就像我做的那样:

function Footer() {
    if($this->PageNo() != 1){
          // footer code
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想让我们说在几个页面上排除它们而不是写一个无穷无尽的if语句你应该只是将页码放在一个数组中,并检查in_array()是否应该包含页眉和/或页脚.