Защита паролем и отключение редактирования PDF в PHP v7.0.27 - PullRequest
0 голосов
/ 17 марта 2020

Я использую CentOS7, и мой бэкэнд PHP v7.0.27 с Laravel framework v4.2. Я работаю с данными Base64 для сохранения PDF (после декодирования base64). Я хочу защитить паролем и отключить редактирование PDF. Я искал способы добиться этого, но пока не повезло, я знаю, что этого можно добиться с помощью Dompdf, но для этого необходимы HTML данные для рендеринга PDF. Пожалуйста, дайте мне знать, если это возможно. Спасибо!

Ниже приведен код, который я использую для сохранения PDF

private function decodeBase64ToPdf($fileToReadFrom, $fileToSaveTo)
{
    $pdf_base64_handler = fopen($fileToReadFrom,'r');   //Get encoded file content from txt file
    $pdf_content = fread($pdf_base64_handler, filesize($fileToReadFrom));
    fclose($pdf_base64_handler);

    $pdf_decoded = base64_decode($pdf_content);    //Decode pdf content

    $file = fopen($fileToSaveTo,'w');  //Write decoded data to pdf file
    fwrite($file, $pdf_decoded);
    if(fclose($file))   //Close output file
    {
        return true;
    }
    return false;
}

1 Ответ

0 голосов
/ 09 апреля 2020

После тестирования много разных вещей. Я решил это, установив FPDI и FPDF. Ссылки: FPDF FPDI

private function decodeBase64ToPdf($fileToReadFrom, $fileToSaveTo)
{
    $pdf_base64_handler = fopen($fileToReadFrom,'r');   //Get encoded file content from txt file
    $pdf_content = fread($pdf_base64_handler, filesize($fileToReadFrom));
    fclose($pdf_base64_handler);

    $pdf_decoded = base64_decode($pdf_content);    //Decode pdf content

    $file = fopen($fileToSaveTo,'w');  //Write decoded data to pdf file
    fwrite($file, $pdf_decoded);
    if(fclose($file))   //Close output file
    {
        $this->passwordProtect($fileToSaveTo);
        return true;
    }
    return false;
}

private function passwordProtect($pdfPath)
{
    $passPdf = new FpdiProtection();

    //calculate the number of pages from the original document
    $pagecount = $passPdf->setSourceFile($pdfPath);

    // copy all pages from the old unprotected pdf in the new one
    for ($loop = 1; $loop <= $pagecount; $loop++)
    {
        $tplidx = $passPdf->importPage($loop);
        $passPdf->addPage();
        $passPdf->useTemplate($tplidx);
    }

    $passPdf->SetProtection(['print' => 4, 'copy' => 16], "userpass", "ownerpass");
    $passPdf->Output($pdfPath, 'F');
}
...