我使用以下代碼創(chuàng)建了密碼保護(hù),
$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);
當(dāng)我下載文件時(shí)它工作得很好。
在下載之前,我也將此文件保存在服務(wù)器中。但是當(dāng)我稍后嘗試下載該文件時(shí),它無(wú)法使用正確的密碼打開(kāi)。如果我沒(méi)有設(shè)置密碼保護(hù),它可以順利工作
誰(shuí)能幫我嗎?
發(fā)現(xiàn)問(wèn)題了。加密信息數(shù)組上有一個(gè)名為“p”的密鑰,他們將其稱(chēng)為“p 值”。當(dāng) PDF 被流式傳輸時(shí),p 值從 252 變?yōu)?-4。執(zhí)行此操作的代碼部分有注釋?zhuān)?/p>
由于 p 值在第一次輸出期間發(fā)生變化,因此第二次輸出 pdf 時(shí),它會(huì)使用錯(cuò)誤的值寫(xiě)入文件。
在我看來(lái),你有兩種解決方法。第一種方法是先將 PDF 輸出到文件,然后編寫(xiě)自己的代碼將該文件回顯到瀏覽器,或者您可以重置流和輸出之間的 p 值,如下所示:
#PASSWORD PROTECTION $cpdf = $dompdf->getCanvas() ->get_cpdf(); $cpdf->setEncryption(1234, 5678, ['print', 'modify', 'copy', 'add']); #Output the generated PDF to Browser $infoB4 = $cpdf->objects[$cpdf->arc4_objnum]['info']; $dompdf->stream($filename); #SAVE THE FILE TO SERVER $cpdf->objects[$cpdf->arc4_objnum]['info'] = $infoB4; $output = $dompdf->output();
希望對(duì)您有所幫助。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)