【问题标题】:In TCPDF, how to get current page number as integer?在 TCPDF 中,如何获取当前页码为整数?
【发布时间】:2015-06-29 12:05:51
【问题描述】:

我尝试使用 $pdf-getAliasNumPage(),如果它以 PDF 格式呈现,它会显示页码。

但是当我在一个基本的 PHP 上进行实验并打印它时,它只返回“{:pnp:}”。

如果页面已经更改,我曾经有一个 if 条件,以便我可以再次重置 value = 0,但由于 getAliasNumPage() 的返回值等于 "{:pnp: }”。

有什么方法可以找到整数的页码吗?那是什么 TCPDF 函数?

我只声明了一次 AddPage(),因为我不需要它。

已经使用 $pdf->getPage();只返回 0。

谢谢!

$this->payroll_id  = $request->getParameter('payroll_id');
$this->class = new PsPayroll();
$config = sfTCPDFPluginConfigHandler::loadConfig();
$pdf = new reportPDF(LANDSCAPE, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 

$month = $this->class->mlFetchPayroll();
$month->execute(array($this->payroll_id));
$catch = "";
while ($print_month = $month->fetch()){
  $catch = $print_month[8];
}

$pdf->SetCreator(Aaron);
$pdf->setMonth($catch);
$pdf->SetAuthor('');
$pdf->SetTitle('Payroll Report');
$pdf->SetSubject('');
$pdf->SetKeywords('');

$pdf->SetHeaderData('logo.png', '25', '', $catch);

$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP + 4, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER + 15);

$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

$pdf->setFontSubsetting(true);

$pdf->SetFont('freesans', '', 9.5, '', true);  
$html .= '<table class = "table hover">
    <thead>
      <tr>
        <th>Employee Information</th>
        <th>Monthly Salary</th>
        <th>Earnings</th>
        <th>Deductions</th>
        <th>Net Pay &nbsp;&nbsp;&nbsp;&nbsp; Signature</th>
      </tr>
    </thead>
    <tbody>';

$pager = 1; 
$prepare = $this->class->mlFetchPayroll();
$prepare->execute(array($this->payroll_id));
    while ($myrow = $prepare->fetch()){
      $total_net_pay = 0;
      $total_earning = 0;
      $total_deduction = 0;
      $html .= '<br><tr nobr="true"><td>' . $myrow[2] . '<br>'. $myrow[3] . '<br>' . $myrow[4] . '</td><td>' . number_format($myrow[5], 2) . '</td><td>';

        $earning_array = $this->class->mlFetchEarningPayslip($myrow[10]);
        foreach ($earning_array as $k => $valk){
        $net_pay += $valk;
        $total_earning += $valk;
            $html .=  '<table><tr><td>' .  $k  . '</td><td>' .  number_format($valk, 2) . '</td></tr></table>';
        }

        $html .= "</td><td>";
        $deduction_array = $this->class->mlFetchDeductionPayslip($myrow[10]);
        foreach ($deduction_array as $i => $val){
        $net_pay -= $val;
        $total_deduction += $val;
        $html .= '<table><tr><td>' .  $i . '</td><td>'.  number_format($val, 2) . '</td></tr></table>';

      }

      $html .= '</td><td>';

        $array_date = $this->class->mlDivideMonth($myrow[8]);
        $k = 0;
        foreach ($array_date as $value){
          $breakdown = 0.00;
          $k++;
          $monthly_salary = $myrow[5]; 

          $monthly_salary += $total_earning - $this->class->mlFetchPERA($myrow[10]);
          $monthly_salary -= $total_deduction;

          $break_down = $monthly_salary/ 4;

          $html .= '<table><tr><td align="right">'; 
            if ($breakdown < 0) 
              $html .=  0;
            else if   ($k == 2){
              $a = round($break_down, 2);
              $b = $a + $this->class->mlFetchPERA($myrow[10]);
              $c = number_format($b, 2);
              $html .= $c;
            }
            else{
              $a = round($break_down, 2);
              $b = number_format($a, 2);
              $html .= $b;
            }

            $html .= '&nbsp;&nbsp;&nbsp;</td><td>............... </td><td>' .  $value .  '</td></tr></table>';
      }
      $html .= '</td></tr>';

      $pager = $pdf->getAliasNumPage();

      if ($pager == 1){
        $html .= 'This is first page ' . $pdf->getAliasNumPage();
      }
      else{
        $pager = $pdf->getAliasNumPage();
        $html .= "This is page " . $pdf->getAliasNumPage();
      }

     // $html .= 'sample '. $pager;
}
$html .= '</tbody></table>';   

$pdf->AddPage();  
$pdf->writeHTML($html, true, false, false, true, 'Aaron');

$pdf->Output('payroll_'.$catch.'.pdf', 'I');

throw new sfStopException();

【问题讨论】:

标签: php pdf tcpdf


【解决方案1】:

PageNo()getPage() 都将返回当前页码。

$this->PageNo();

$this->getPage();

【讨论】:

  • 我有同样的问题,我在 TCPDF 版本 6 中从函数 getAliasNbPages 中得到了 {:ptp:}。但是这个函数在 TCPDF 版本 5 中返回整数值。你可以检查这个链接。 stackoverflow.com/questions/51761325/…
【解决方案2】:

正确的函数是PageNo()

http://www.tcpdf.org/doc/code/classTCPDF.html#a9ad828b184f08828f570a7e52316ba79

TCPPDF::PageNo()

返回当前页码。

返回

int 页码

编辑。

好的,现在(我想)我明白你想要做什么,你只添加 1 页并使用自动分页符,你也不想自动为页脚中的页面编号。在这种情况下,您应该使用 getAliasNumPage() 和 getAliasNbPages()。定义以下变量(随意编辑文本):

$PgNo= "This is the page " . $pdf->getAliasNumPage() . " of " . $pdf->getAliasNbPages();

将它放在 php 文档中的任何位置(重要的是在定义字体之后放置它),然后只需在需要的任何地方使用变量 $PgNo(或者您将调用它)。您只需定义一次,稍后它将根据它所在的 pdf 文档中的页面自动获取值。

【讨论】:

  • 是的,我已经尝试过了,我只声明了一次 AddPage(),因为我不需要声明另一个,因为它会弄乱我的报告逻辑。它只返回 0。
  • 那么你的代码肯定有一些错误。您可以更新您的问题并发布代码吗?编辑。这真的很奇怪,因为我只是检查它并且在第一页它返回 1,那么你的 0 来自哪里?您没有编辑任何 TCPDF 文件?
  • 很遗憾,没有,我将向您展示示例报告。不,我没有在课堂上编辑某些东西。我只使用了一个 AddPage()。
  • 好的,现在你必须稍微说明一下它的哪一部分给你带来了问题,你在哪里使用 PageNo()。另外:据我了解,PDF 生成正确,但是您想将页码作为 php 值吗?你能详细说明一下吗?你的意思是,你想要那个值而不生成pdf?我很困惑。
  • 不,我想在不使用任何页脚的情况下获取页面值,因为 AddPage() 只出现一次。
【解决方案3】:

$this->getAliasNumPage() 的结果不是数字。这是... {:pnp:} 你可以检查一下:

 $text = "My Footer - Página ".$this->getAliasNumPage().'/'.$this->getAliasNbPages();
 $this->Cell(0, 10, $text, 0, false, 'C', 0, '', 0, false, 'T', 'M');

你会看到这个数字。

但如果你执行

  echo $text;

你会看到字符串没有数字,只有 {:pnp:}

这是由于此时的事实(因此当它执行页脚功能时),尚未创建 PDF。所以TCPDF不能知道页数。所以它不能给你这个值。

你怎么办?为了获得不同的页脚,例如在某些页面上,您必须计算页码。因此,在 Footer() 函数的开头声明一个全局 $var 。在 Footer() 函数之前,将 $var 设置为 0,然后在 Footer() 中设置 $var++。

对于最后一页,只需使用这个:

class mypdf extends tcpdf
   {
     // Declare for use in all function
     protected $last_page = false;

     // Will be called at the end
     public function Close()
     {
          $this->last_page = true;
          parent::Close();
     }

     public function Footer()
     {
         if ($this->last_page)
         {
            // Here you can displat the footer for last page
         } 
     }
  }   

编辑:我忘记了一个选项。如果您想知道显示前的完整页数或(例如)如果您想知道 PDF 块的大小以查看它是否适合页面等等,您可以使用 rollbackTransaction(); 首先,您执行所有操作(AddPages、MultiCell 等),这将使您能够读取结果大小和所有其他值。 然后你执行 $pdf = $pdf -> rollbackTransaction();这将“撤消”所有内容,然后您再次运行所有功能,这次使用您从“第一次运行”中获得的所有值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 2018-08-05
    • 2022-12-14
    • 2019-02-01
    • 2011-12-06
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多