PHP:mPDF / pdf库/是否可以在循环中创建多个pdf文件?

时间:2014-06-24 11:19:00

标签: php pdf mpdf

我正在使用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。是否无法下载多个文件?我究竟做错了什么?

4 个答案:

答案 0 :(得分:5)

您更新的问题的答案是:

当然,您可以创建多个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');
}

答案 1 :(得分:0)

您如何期待这样的功能。

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

答案 2 :(得分:0)

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;

?>

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

答案 3 :(得分:0)

下面是生成多个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');
}?>