嗨各位,我是個剛接觸php沒多久的菜鳥,而我為了將php轉為pdf,所以上了這個套件照著他的步驟執行了範例程式碼,但在一番折磨後,程式碼可以執行了,產生出來的pdf卻都是損毀的,請問有過來人有這個問題過嗎?
// reference the Dompdf namespace
use Dompdf\Dompdf;
// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser
$dompdf->stream();
我爬文過,嘗試在stream前加上了ob_end_clean
,但我載入的是一串文字,怎麼樣想也不太可能是buffer的問題,真的是遇到大瓶頸,網路上貌似都是有使用到壓縮才開始遇到問題,怎麼我的開頭特別煎熬...而我使用的環境為php7與apache,現在這謝謝大家。
---28/8/19 Updated---
我現在的問題,是在woocommerce
的woocommerce_thankyou
這個hook上,在多加上一個action,在檢查那些損毀的pdf檔案中,裏頭的內容是半張網頁的程式碼,看來是buffer在作怪,但是這個hook裏頭只要ob_clean
後,整個動作就會直接終止,這一點我還想不清楚,所以我以其他的方式來做存取。
//將stream,用output來取代
//$dompdf->stream();
$file = 'tmp1'
$output->$dompdf->output();
file_put_contents(__DIR__.'/'.$file.'.pdf', $output);
位址的關係,我並沒有寫在plugins
的根目錄,而是另外製作了一個資料夾產生的method來存放這些暫存的檔案,有著實體的檔案也可以使用下載的方式來取代stream
或者是用header來自動下載。
$File = __DIR__.'/'.$file.'.pdf';
header("Content-Disposition: attachment; filename=\"" . basename($File) . "\"");
header("Content-Type: application/octet-stream");
header("Content-Length: " . filesize($File));
header("Connection: close");