J'ai créé la protection par mot de passe en utilisant le code suivant,
$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);
Cela fonctionne bien lorsque je télécharge le fichier.
Je sauvegarde également ce fichier sur le serveur avant de le télécharger. Mais lorsque j'essaie de télécharger le fichier plus tard, il ne peut pas être ouvert avec le mot de passe correct. Si je ne définis pas de protection par mot de passe, cela fonctionne correctement
Quelqu'un peut-il m'aider ?
J'ai trouvé le problème. Il existe une clé nommée "p" sur le tableau d'informations cryptées, qu'ils appellent la "valeur p". Lorsque le PDF est diffusé, la valeur p passe de 252 à -4. La partie du code qui fait cela est commentée :
Étant donné que la valeur p change lors de la première sortie, la deuxième fois que vous sortez le pdf, il écrit le fichier avec la mauvaise valeur.
Il me semble que vous avez deux solutions. La première consiste à générer d'abord le PDF dans un fichier, puis à écrire votre propre code pour faire écho à ce fichier dans le navigateur, ou vous pouvez réinitialiser la valeur p entre le flux et la sortie comme ceci :
J'espère que cela aide.