PHP:MPDF / PDF库/是否有可能在一个循环中创建多个PDF文件?

问题描述 投票:2回答:4

我使用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下载。这难道不是可以下载多个文件?我究竟做错了什么?

php pdf mpdf
4个回答
5
投票

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

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

0
投票

你怎么能指望这样的特征。

你应该这样做使用了不同的方法。首先使用MPDF将文件保存到光盘,然后创建一个zip文件,并做出可供下载。


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;

?>

希望这可以帮助 :) :)


0
投票

下面是生成多个PDF文件并保存在一些directory.I使用的睡眠和时间函数生成唯一的文件名,这样它会覆盖同名现有文件的代码。

<?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');
}?>
© www.soinside.com 2019 - 2024. All rights reserved.