【发布时间】:2016-05-06 06:18:35
【问题描述】:
我知道以前有人问过这个问题,但我还没有弄清楚应该如何解决。例如,DOMPDF, I cannot create two pdf at time 处理相同的主题。我试图遵循解决方案,但到目前为止还不是很好。我有一个循环,我想在其中创建两个 pdf 文件(两张发票)。案例 1 仅适用于 1 个循环,在另一个循环期间它挂起(无法重新声明 DOMPDF_autoload()(之前在第 24 行的 /vendor/dompdf/include/autoload.inc.php 中声明)。案例 2 和 3,我有试图从上面的 stackoverflow quastion 申请,根本不工作(一些运行时错误,我无法弄清楚的语法错误)。
这是我的代码:
$invoices = 2;
$invoice_names = array();
for ($i=1; $i<=$invoices; $i++)
{
$invoice_file_name = 'invoice' .$i. '.pdf';
$invoice_names[] = $invoice_file_name;
require '../vendor/dompdf/include/autoload.inc.php';
// disable DOMPDF's internal autoloader if you are using Composer
define('DOMPDF_ENABLE_AUTOLOAD', false);
// include DOMPDF's default configuration
require_once '../vendor/dompdf/dompdf_config.inc.php';
$htmlString = '';
ob_start();
// This creates html format of an invoice
include('pdf_laskupohja_vanha.php');
$htmlString .= ob_get_clean();
// Case 1 working for the 1. loop
$dompdf = new DOMPDF();
$dompdf->load_html($htmlString);
$dompdf->render();
$output = $dompdf->output();
/* Case 2
$view = $dompdf->load->view("viewname", $htmlString, true);
//create a new dompdf instance
$dompdf->pdf = new DOMPDF();
//render and output pdf
$dompdf->pdf->load_html($view);
$dompdf->pdf->render();
$output = $dompdf->pdf->output(array("compress" => 0));
*/
/* Case 3
$dompdf->load->library('pdf');
$dompdf = new DOMPDF();
$dompdf->set_base_path(['path']);
//create a new dompdf instance (this is the crucial step)
$dompdf->load_view('viewname', $htmlString);
$dompdf->render();
$output = $dompdf->output();
*/
file_put_contents('../invoices/' .$invoice_file_name, $output);
}
echo "Invoice(es) OK";
是否有一种“隐藏”的方式来实现这些未直接显示的(案例 2 和 3)?可能包括对 dompdf_config.inc.php 或 DOMPDF 类的一些修改。问题是我并不完全了解 php 类的结构。可能主要的解决方案是清除前一个循环的类对象并创建另一个,但是如何?相信我,我已经为此苦苦挣扎了好几天了。
【问题讨论】: