cari

Rumah  >  Soal Jawab  >  teks badan

PDF yang dilindungi kata laluan tidak boleh dibuka dalam PHP DOMPDF

Saya mencipta perlindungan kata laluan menggunakan kod berikut,

$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);

Ia berfungsi dengan baik apabila saya memuat turun fail.

Saya juga menyimpan fail ini dalam pelayan sebelum memuat turun. Tetapi apabila saya cuba memuat turun fail itu kemudian, ia tidak boleh dibuka dengan kata laluan yang betul. Jika saya tidak menetapkan perlindungan kata laluan ia berfungsi dengan lancar

Boleh sesiapa tolong saya?

P粉950128819P粉950128819325 hari yang lalu460

membalas semua(1)saya akan balas

  • P粉428986744

    P粉4289867442024-03-27 10:44:35

    Mendapati masalah. Terdapat kunci bernama "p" pada tatasusunan maklumat yang disulitkan, yang mereka panggil "nilai-p". Apabila PDF distrim, nilai p berubah daripada 252 kepada -4. Bahagian kod yang melakukan ini diulas:

    Memandangkan nilai-p berubah semasa output pertama, kali kedua anda mengeluarkan pdf, ia menulis fail dengan nilai yang salah.

    Nampaknya anda mempunyai dua penyelesaian. Cara pertama ialah mengeluarkan PDF ke fail dahulu dan kemudian menulis kod anda sendiri untuk menggemakan fail itu ke penyemak imbas, atau anda boleh menetapkan semula nilai-p antara aliran dan output seperti ini:

    #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();

    Semoga membantu.

    balas
    0
  • Batalbalas