生成多个pdf文件并压缩它
Posted
技术标签:
【中文标题】生成多个pdf文件并压缩它【英文标题】:generate multiple pdf file and zip it 【发布时间】:2018-03-13 09:00:52 【问题描述】:我有一种情况,比如创建多个 pdf 文件并下载为 zip 文件。
我试过下面的代码
function downloadZip()
if ($this->input->post('btn_submit'))
$data = array(
'results' => $this->Mdi_download_invoices->download_pdf_files($this->input->post('client_id'))
);
foreach ($data['results'] as $d)
$mpdf = new \Mpdf\Mpdf();
$html = $this->load->view('download_all_invoices/pdf',$d,true);
$mpdf->WriteHTML($html);
$mpdf->Output(); //this will create a pdf file in next tab
$this->load->library('zip');
$this->zip->add_data();
$this->zip->archive('/var/www/my_backup.zip');
$this->zip->download('my_backup.zip');
如何将所有 pdf 文件存储在数组中??
【问题讨论】:
您可以通过为Output
方法提供放置位置来将PDF 保存到文件中。然后将文件添加到 zip 中?
@JonStirling 感谢您的回答,但是如何通过循环保存多个 pdf 文件??
你已经在这样做了,只是没有保存它们,只是确保为每个文件指定一个唯一的名称。
@JonStirling 我尝试了你所说的,但它创建了唯一的单个文件 $mpdf->Output($d->invoice_id, \Mpdf\Output\Destination::DOWNLOAD);
为什么加\Mpdf\Output\Destination::DOWNLOAD
!?您需要在本地文件系统上将其添加到 zip。您还应该将一些 zip 功能移出循环,下载应该在循环之后,其余的应该在之前,然后 `add_data 与您生成的 pdf 的文件路径。
【参考方案1】:
试试这个代码。
$i = 0;
foreach ($data['results'] as $d)
$mpdf = new \Mpdf\Mpdf();
$html = $this->load->view('download_all_invoices/pdf',$d,true);
$mpdf->WriteHTML($html);
$mpdf->Output(); //this will create a pdf file in next tab
$this->zip->add_data('file-'.$i.'.pdf',$d);
$i++;
$this->zip->archive('/var/www/my_backup.zip');
$this->zip->download('my_backup.zip');
通过这种方式,您可以在 Zip 中添加每个 PDF 文件,然后在循环之后,您可以生成一个 zip 文件并下载它。我没有测试过,所以请忽略语法错误,但你会从中得到一个想法。
【讨论】:
以上是关于生成多个pdf文件并压缩它的主要内容,如果未能解决你的问题,请参考以下文章
Python/Django - 我可以创建多个类似 pdf 文件的对象,将它们压缩并作为附件发送吗?