我使用以下程式碼建立了密碼保護,
$dompdf = new Dompdf(array('enable_remote' => true)); $dompdf->loadHtml($html_print); #(Optional) Setup the paper size and orientation $dompdf->setPaper('A4', 'landscape'); #Render the HTML as PDF $dompdf->render(); #PASSWORD PROTECTION $dompdf->getCanvas() ->get_cpdf() ->setEncryption(1234, 5678, ['print', 'modify', 'copy', 'add']); #Output the generated PDF to Browser $dompdf->stream($filename); #SAVE THE FILE TO SERVER $output = $dompdf->output(); $filename = $filename.'-'.time().'.pdf'; file_put_contents('../documents/'.$filename, $output);
當我下載檔案時它運作得很好。
在下載之前,我也將此文件保存在伺服器中。但是當我稍後嘗試下載該文件時,它無法使用正確的密碼打開。如果我沒有設定密碼保護,它可以順利工作
誰能幫我嗎?
發現問題了。加密訊息數組上有一個名為「p」的金鑰,他們稱之為「p 值」。當 PDF 被串流時,p 值從 252 變為 -4。執行此操作的程式碼部分有註解:
由於 p 值在第一次輸出期間發生變化,因此第二次輸出 pdf 時,它會使用錯誤的值寫入檔案。
在我看來,你有兩種解決方法。第一種方法是先將 PDF 輸出到文件,然後編寫自己的程式碼將該文件回顯到瀏覽器,或者您可以重置流和輸出之間的 p 值,如下所示:
希望對您有幫助。