mPDF 中动态生成页面的页码

Posted

技术标签:

【中文标题】mPDF 中动态生成页面的页码【英文标题】:Page number for dynamically generated pages in mPDF 【发布时间】:2016-02-13 07:58:06 【问题描述】:

我正在使用 mPDF 和 Codeigniter 来创建 PDF 文件。添加页码时出现问题。 我有一些通过数据库查询生成的结果集,并将它们传递给我的 html 文件以显示该数据。根据它创建的结果数量并将其转换为具有页数的 pdf 格式。问题是当它生成多页时我无法添加页码。 我正在使用此操作的基本示例。 请帮我解决这个问题!

我的控制器代码

$result_1 = $this->Vessel_model->getManifestVesselDetails($vesselId,$containerId);
$result_2 = $this->Vessel_model->getVesselDetailsByContainer($vesselId,$containerId);
$result_3 = $this->Vessel_model->getDDByVesselContainer($vesselId,$containerId);

$data['agentDetails'] = $this->Vessel_model->getShippingAgents();        
$data['DD_SDNumber'] = $this->DD_SDNumber;
$data['DDdetails'] = $result_3;
$data['containerDetails'] = $result_2;
$data['vesselcontainerDetails'] = $result_1;

$html = $this->load->view('reports/tri_shipping_manifest_PDF', $data, true);
//this the the PDF filename that user will get to download
$pdfFilePath = APPPATH.'/'.date('Y-m-d').$result_1->vessel.'-'.$result_1->serialno.".pdf";
$pdfFilePath3 = date('Y-m-d').$result_1->vessel.'-'.$result_1->serialno.".pdf";

$this->load->library('pdfreports');
$this->pdf = $this->pdfreports->load();
//$this->pdf->setFooter('PAGENO');
$this->pdf->AddPage('L','',1,'i','on'); 
$this->pdf->WriteHTML($html,0);
$this->pdf->Output($pdfFilePath3, "D");
$this->pdf->Output($pdfFilePath, "F");

【问题讨论】:

向我们展示您用于生成多重 pdf 的代码 我已经添加了代码。 能否请您也添加指向该基本示例的链接? 链接是什么意思?? 在你写的最后一句话中,我使用了这个操作的基本例子。有很多关于 mPDF 的例子。分享你这个例子的链接 【参考方案1】:

我不知道当前代码应该是什么样子,因为我对 mPDF 了解不多,但我建议您将 domPdf 与 Codeigniter 一起使用,因为它比这个库简单得多。 你可以找到domPdf here

由于我们不知道这些变量的输出是什么以及应该在 pdf 中打印什么,我只能建议一些使用 domPdf 创建的一般代码

创建助手:

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
    function pdf_create($html, $filename='', $stream=TRUE)
      require_once("dompdf/dompdf_config.inc.php");         
      $dompdf = new DOMPDF();
      $dompdf->load_html($html);
      $dompdf->render();
      $dompdf->set_paper("A4");
      if ($stream) 
        $dompdf->stream($filename.".pdf",1);
       else 
        return $dompdf->output();
      
    
?>

为 pdf 创建控制器

<?php
  $data['store']=$res;  
  $this->load->helper(array('dompdf', 'file'));
  $html = $this->load->view('store/sales_pdf', $data, true);
  $html.= $this->load->view('footer');
  $filename="salesbill".$id;
  pdf_create($html, $filename);
  $data = pdf_create($html, '', false);
  write_file('name', $data); 
?>

你的 pdf HTML 看起来像这样

<html>
  <head>
   <style>
     @page  margin: 180px 50px; 
     #header  position: fixed; left: 0px; top: -180px; right: 0px; height: 150px; background-color: orange; text-align: center; 
     #footer  position: fixed; left: 0px; bottom: -180px; right: 0px; height: 150px; background-color: lightblue; 
     #footer .page:after  content: counter(page, upper-roman); 
   </style>
  <body>
   <div id="header">
     <h1>Widgets Express</h1>
   </div>
   <div id="footer">
     <p class="page">Page <?php $PAGE_NUM ?></p>
   </div>
   <div id="content">
     <p>the first page</p>
     <p style="page-break-before: always;">the second page</p>
   </div>
 </body>
 </html>

此答案基于this *** question 这里还有不错的 domPdf debug helper page 希望这个回答能帮到你

【讨论】:

以上是关于mPDF 中动态生成页面的页码的主要内容,如果未能解决你的问题,请参考以下文章

如何获取kartik mpdf内容(html布局)中的页码

MPDF PAGENO在codeigniter中无法在pdf中显示页码

MPDF:重置总页码

使用 mPDF 更改第二页的上边距

mpdf:如何使用包含大页面的 mpdf 生成 pdf 文件

从 Laravel 中的存储档位生成带有动态图像的 PDF