【问题标题】:PHP: mPDF / pdf library / is it possible to create multiple pdf files in a loop?PHP:mPDF / pdf 库 / 是否可以循环创建多个 pdf 文件?
【发布时间】:2014-06-24 11:18:59
【问题描述】:

我正在使用 mPDF 库,我正在尝试编写一个代码,该代码将在一次调用中创建 多个 PDF 文件(一次打开:test.php)。问题:总是只下载第一个文件。我知道这个问题可能看起来很愚蠢,我试图深入研究谷歌,但我不知道如何解决这个问题。也许有人可以带领我走上正确的道路?

我的逻辑是:
- 我有一个包含所有订单的数组;对于我想创建 PDF 的每个订单。
- 我循环数组,每次调用 MPDF 库

test.php

$myorders = [ 
                0 => array (
                'FirstName' => 'Asia',
                'LastName' => 'Basia',
                'OrderNr' => '123'

                ), 

                1 => array (
                'FirstName' => 'Madzia',
                'LastName' => 'Siasia',
                'OrderNr' => '456'
                )
           ];

for ($i=0; $i < count($myorders); $i++) { 
    $FirstName = $myorders[$i]['FirstName'];
    $LastName = $myorders[$i]['LastName'];
    $OrderNr = $myorders[$i]['OrderNr'];
    require 'invoice.php';
}

invoice.php

require 'MPDF57/mpdf.php';
$mpdf=new mPDF();
$mpdf->Bookmark('Start of the document');
$mpdf->WriteHTML('test test' . $FirstName);
$mpdf->Output("filename{$OrderNr}.pdf",'D');

仅下载 filename123.pdf。不能下载多个文件吗?我究竟做错了什么?

【问题讨论】:

  • 想一想:你有没有在任何地方看到过你正在寻找的行为?我的意思是,当您点击某个文件时,您的浏览器会询问您是否要保存一个文件,然后是另一个文件,然后是第三个文件?
  • 您应该将文件合并为单个 pdf 或 zip 文件,或提供链接以分别下载每个 pdf。
  • 知道了。我会问另一种方式 - 是否可以使用 MPDF 在循环中创建多个 pdf 文件?

标签: php pdf mpdf


【解决方案1】:

您更新后的问题的答案是:

当然,您可以创建多个 pdf 文件并将它们保存到光盘上。您只需将 pdf 生成代码放在 for 循环中即可。

请参考以下代码:

require 'MPDF57/mpdf.php';

for ($i=0; $i < count($myorders); $i++) { 
    $FirstName = $myorders[$i]['FirstName'];
    $OrderNr = $myorders[$i]['OrderNr'];
    $mpdf=new mPDF();
    $mpdf->Bookmark('Start of the document');
    $mpdf->WriteHTML('test test' . $FirstName);
    $mpdf->Output("filename{$OrderNr}.pdf", 'F');
}

【讨论】:

    【解决方案2】:

    你怎么能期待这样的功能。

    您应该使用不同的方法来执行此操作。首先使用 mpdf 将文件保存到您的光盘,然后创建一个 zip 文件并使其可供下载。

    【讨论】:

    • '首先使用 mpdf 将文件保存到您的光盘' - 例如,如何使用 MPDF 从一个数组中的数据创建多个 PDF 文件?有可能吗?
    【解决方案3】:
    App::import('Vendor', 'mpdf', array('file' => 'mpdf' . DS . 'mpdf.php'));
    
    $zip = new ZipArchive();
    
    $zip->open('filename.zip', ZipArchive::CREATE);
    
    if($zip->open('filename.zip'))
    
    {
    
       for ($i=0; $i < count($myorders); $i++)
    
          {
    
             $FirstName = $myorders[$i]['FirstName'];
    
             $OrderNr = $myorders[$i]['OrderNr'];
    
             $mpdf=new mPDF('c','A4','','',32,25,27,25,16,13);
    
             $mpdf->Bookmark('Start of the document');
    
             $mpdf->SetDisplayMode('fullpage');
    
             $mpdf->setHeader('hello');
    
             $mpdf->WriteHTML('test test' . $FirstName);
    
             $content = $mpdf->Output('filename'.$OrderNr.'.pdf','F');
    
             $zip->addFile($content,'hellofilename'.$OrderNr.'.pdf');
    
       }
    }
    
    else
        {
        echo "cant open!!";exit;
        }
    $zip->close();
    
    $archfilename = 'filename.zip';
    
    header("Content-type: application/zip"); 
    
    header("Content-Disposition: attachment; filename = $archfilename"); 
    
    header("Pragma: no-cache"); 
    
    header("Expires: 0"); 
    
    readfile("filename.zip");
    
    exit;
    
    ?>
    

    希望这会有所帮助:) :)

    【讨论】:

      【解决方案4】:

      下面是生成多个 PDF 文件并将它们保存在某个目录中的代码。我使用了 sleep 和 time 函数来生成唯一的文件名,这样它就会覆盖现有的同名文件。

      <?php
      $record = array('BMW','Mercedes','Toyota');
      include_once("../lib/MPDF57/mpdf.php");
      foreach($record as $value){
      $filename = time().'Performance_review.pdf';
      sleep(2);
      $mpdf=new mPDF(); 
      $mpdf->WriteHTML($value);
      $get_pdf   = $mpdf->Output('../pdf-output/'.$filename,'F');
      }?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-28
        • 2012-09-19
        • 2014-10-20
        • 2021-08-28
        相关资源
        最近更新 更多