DOMPDFを使用して画像を含むPDFを生成していますが、奇妙な問題が発生しています。
PDFはループ内で生成され、生成する必要のあるPDFの量はさまざまです。生成されたPDFが1つしかない場合は、すべてうまくいきます。画像(この場合はロゴ)が美しく挿入されています。ただし、何らかの理由で生成する必要のあるPDFが2つ以上ある場合、画像は赤い十字に置き換えられます。ただし、そのバッチで生成された最初のPDFの画像は完全に機能します。つまり、PDF#1の画像は完全に読み込まれ、PDF#2以降の画像は赤い十字に置き換えられます。
DOMPDF(v0.5.2)の最新の安定したリリースを使用しています。私もv0.5.1でテストしましたが、同じ動作をしました。
私がこれをテストしているサーバーは、PHP5.3.8を使用するLinuxで実行されます。これに関するエラーログにエラーはありません(エラーログを有効にしています)。
---編集:画像への「パス」は絶対URLであり、絶対パスまたは相対パス(PHP)ではなく、ループの内容をブラウザー(またはPDFが添付されていない通常のHTMLメール)に出力します。画像を(すべてのメールで)完全に表示します。
--- edit2:ループの最後ですべてのバッファーをフラッシュする関数を使用します(残念ながら、これは私の問題に何も変更しません):
function flush_buffers()
{
ob_end_flush();
ob_flush();
flush();
ob_start();
}
私が使用しているループの例:
for ( $i = 0; $i < count($cert); ++$i )
{
// load the email-template
ob_start();
include($template);
$content = ob_get_contents();
ob_end_clean();
// require dompdf
include_once('dompdf/dompdf_config.inc.php');
// set PDF path - inside temp dir
$newpdf = trailingslashit(realpath(sys_get_temp_dir())).$cert[$i]['coupon'].'.pdf';
// replace shortcodes with wanted content
$certificate = preg_replace($shortcodes, $replacements, $certificate);
$certificate = '<html><body>'.$certificate.'</body></html>'."\n";
$dompdf = new DOMPDF();
$dompdf->load_html($certificate);
$dompdf->set_paper($pageformat, $orientation);
$dompdf->render();
save_pdf($newpdf, $dompdf->output()); // save PDF
@flush_buffers();
}
ショートコードの1つは[logo]で、これはimg-tagに置き換えられています。前に述べたように、その画像は最初のPDFでは正常に機能しますが、他のPDFでは機能しません。