2016-05-05 11 views
0

私はこの質問が以前に尋ねられたことは知っていますが、解決方法を理解していません。たとえば、このDOMPDF, I cannot create two pdf at timeは同じトピックに取り組んでいます。私は解決策を追求しようとしましたが、それほど良くありません。私は2つのPDFファイル(2つの請求書)を作成するループがあります。ケース1は、1つのループのみで動作し、別のループ中にハングします(以前は/vendor/dompdf/include/autoload.inc.phpに24行目で宣言されています)。 (いくつかの実行時エラー、私は把握することはできません構文エラー)まったく動作しない、上記のstackoverflowのquastionから適用しようとしたDOMPDF_autoload()を再宣言できません

これは私のコードです:。

$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クラスの構造を完全には理解していません。クラスオブジェクトを消去することですo f前のループと別のものを作成するが、どのように?私を信じて、私はこれで数日間は苦労しました。

答えて

1

ここでいくつか質問していると思いますので、おそらく最も影響を与えるもの、つまり再利用の質問にお答えします。

dompdfオブジェクトインスタンスを再利用してknown issueがあります。いくつかの個別のPDFをレンダリングする必要がある場合の回避策は、unset$dompdf変数だけにして再利用することです。

$dompdf = new DOMPDF(); 
$dompdf->load_html('hello world'); 
$dompdf->render(); 
$pdfHello = $dompdf->output(); 

unset($dompdf); 

$dompdf = new DOMPDF(); 
$dompdf->load_html('goodbye world'); 
$dompdf->render(); 
$pdfBye = $dompdf->output(); 

もう一つの注目すべき問題は、あなただけの各ループのためではありません一度、一度DOMPDFオートローダを含めるべきであるということです。 require文をファイルの先頭に置きます。

require '../vendor/dompdf/include/autoload.inc.php'; 

$invoices = 2; 
$invoice_names = array(); 
for ($i=1; $i<=$invoices; $i++) 
{ 
    // PDF-generating code here (NO dompdf require statement) 
} 
echo "Invoice(es) OK"; 
+0

私は両方のsuggeestionsを既に試してみました。動作しませんでした。 – user2857221

+0

事実、私はこれを2回目にしてみました。私はそれがループの外にautoload.inc.phpを置くために、最初に動作しない奇妙なことは???まあ、私は何かの "盲目"だったのは初めてではありませんでした: - |これは私を眠気にさらします...しかし、ありがとう! – user2857221

+0

私はしばしばそのような日を持っています: – BrianS

関連する問題