Первая позволяет настроить вашу функцию создания PDF немного:
function pdf_create($html, $stream = true) {
require_once("dompdf/dompdf_config.inc.php");
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
if ($stream) {
$dompdf->stream($filename);
} else {
return $dompdf->output();
}
}
Как правило, если вы хотите, чтобы обеспечить более одного PDF вам нужно, чтобы сделать их по отдельности и обеспечить связь для каждого из них. Но если вы собираетесь это сделать, вы можете просто предоставить список ссылок и визуализировать каждый документ в соответствии с запросом, а не предварительно их рендерить.
Если вы не хотите, чтобы у вас была возможность организовать пакетную обработку. В этом случае что-то вроде следующего позволит вам отображать файлы. Вам просто нужно добавить код, чтобы предоставить доступ к конечному пользователю:
foreach ($this->input->post('check') as $key) {
$invoiceData = array('invoice_number' => $key);
$this->session->set_userdata($invoiceData);
//verify the bank number
$storeId = $this->session->userdata('user_store');
$bank = $this->boletos->get_bank_store($storeId)->row();
global $layout;
if ($bank->idBank == 1) {
$layout = load_modulo('BankX', 'invoice_bankX');
}
$file_name = 'invoice-'.$key.'.pdf';
$pdf = pdf_create($layout, $file_name, false);
file_put_contents($file_name, $pdf);
}
Чтобы предоставить список ссылок вы можете либо записать имена файлов или, если вы сохраните файлы в каталог для каждого пользователя, зачитать список файлов.
Если вы хотите, чтобы иметь возможность оказывать все выбранные документы и предоставить их пользователю в то же время вы могли бы сделать их и упаковать вывод в архиве, таких как ZIP-файл:
$zipfile = 'invoices.zip';
$zip = new ZipArchive;
$zip->open($zipfile, ZipArchive::CREATE);
foreach ($this->input->post('check') as $key) {
$invoiceData = array('invoice_number' => $key);
$this->session->set_userdata($invoiceData);
//verify the bank number
$storeId = $this->session->userdata('user_store');
$bank = $this->boletos->get_bank_store($storeId)->row();
global $layout;
if ($bank->idBank == 1) {
$layout = load_modulo('BankX', 'invoice_bankX');
}
$file_name = 'invoice-'.$key.'.pdf';
$pdf = pdf_create($layout, $file_name, false);
$zip->addFromString($file_name, $pdf);
}
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($zipfile).'"');
header('Content-Length: ' . filesize($zipfile));
readfile($zipfile);
(простите за отсутствие контроля ошибок, которые вы должны полностью сделать.)
Наконец, а затем делают каждый документ отдельно можно объединить выход каждого документа в один большой документ, вставить разрывы страниц или разделительные страницы между документы:
$pages = array();
foreach ($this->input->post('check') as $key) {
$invoiceData = array('invoice_number' => $key);
$this->session->set_userdata($invoiceData);
//verify the bank number
$storeId = $this->session->userdata('user_store');
$bank = $this->boletos->get_bank_store($storeId)->row();
if ($bank->idBank == 1) {
$pages[] = load_modulo('BankX', 'invoice_bankX');
}
}
$layout = implode('<div style="page-break-before: always;"><div>', $pages);
pdf_create($layout, 'invoices.pdf', true);
Что происходит, если вы пытаетесь отобразить более одного PDF-файла? – BrianS
Привет, @BrianS - он генерирует только один PDF –
О, я вижу проблему. Вы передаете PDF-файл. Это правда, что вы можете передавать только один PDF за один раз. Если вам нужно предложить больше, вам нужно будет либо иметь список ссылок, либо генерировать их на лету, либо предварительно генерировать их, и кэшировать их на сервере. – BrianS