Хорошо, я понял, подумав о комментариях и много часов пытаясь и пытаясь повторить попытку. Можно сгенерировать pdf и перезаписать разные php-страницы, используя mpdf с поддержкой шифрования. Когда мы устанавливаем шифрование, генерируются переменные $ uid, $ oval, $ encKey, $ RC128, $ uval и $ pval. Всякий раз, когда мы генерируем PDF снова, эти переменные меняются, поэтому важно сгенерировать один раз. После генерации мы должны отправить значения этих переменных на сервер. На странице для перезаписи pdf данными клиента, поддерживающими шифрование, мы должны восстановить эти переменные с сервера, чтобы mpdf мог принять решение перезаписать зашифрованный pdf, поддерживающий шифрование в перезаписанном архиве.
Ниже приведен код для генерации зашифрованного pdf и отправки переменных на сервер:
<?php
define('MPDF_PATH','class/mpdf/');
include("../mpdf60/mpdf.php");
$mpdf = new mPDF();
error_reporting(0);
ini_set('display_errors', 0);
ob_clean();
$mpdf->SetImportUse();
$pagecount = $mpdf->SetSourceFile("testb.pdf");
$mpdf->SetDocTemplate('testb.pdf',true);
for ($i=1; $i<=$pagecount; $i++) {
$import_page = $mpdf->ImportPage($i);
$mpdf->UseTemplate($import_page);
if ($i < $pagecount)
{$mpdf->AddPage();
}}
$mpdf->percentSubset = 0;
$mpdf->SetProtection(array(), '', 'yourpassword'); // Need to specify a password
$mpdf->WriteHTML('This copy is XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
$mpdf->Output('test.pdf','F');
// Have to save various encryption keys, which are uniquely generated each document
$uid = $mpdf->uniqid;
$oval = $mpdf->Ovalue;
$encKey = $mpdf->encryption_key;
$uval = $mpdf->Uvalue;
$pval = $mpdf->Pvalue;
$RC128 = $mpdf->useRC128encryption;
unset($mpdf);
//==============================================================
$mpdf = new mPDF();
$mpdf->SetImportUse();
// Re-instate saved encryption keys from original document
$mpdf->encrypted = true;
$mpdf->useRC128encryption = $RC128;
$mpdf->uniqid = $uid ;
$mpdf->Ovalue = $oval ;
$mpdf->encryption_key = $encKey ;
$mpdf->Uvalue = $uval ;
$mpdf->Pvalue = $pval ;
//Here is the code to update the variables on your server. It is important to already have created a table and have filled the first line with some text in order to update properly
$sql2= "UPDATE `yourtable` SET `uid`='$uid', `oval`='$oval', `encKey`='$encKey', `uval`='$uval', `pval`='$pval', `RC128`='$RC128' WHERE `pdfline`='firstpdf'";
$result2 = mysqli_query($users, $sql2);
?>
После этого код для перезаписи зашифрованного файла следующий:
<?php
define('MPDF_PATH','class/mpdf/');
include("../mpdf60/mpdf.php");
$nomestep1 = mysqli_query ($users, "SELECT `uid` FROM yourtable WHERE `pdfline`='firstpdf'");
$nomestep2 = mysqli_num_rows ($nomestep1);
for ($i=0 ; $i<$nomestep2 ; $i++)
{
$nomestep3 = mysqli_fetch_row($nomestep1);
echo $nomestep3[0];
}
$uid = $nomestep3[0];
// In order to illustrate, I showed the recovery from the server of just one variable. The others can be obtained using the same process
$mpdf = new mPDF();
$mpdf->SetImportUse();
// Re-instate saved encryption keys from original document
$mpdf->encrypted = true;
$mpdf->useRC128encryption = $RC128;
$mpdf->uniqid = $uid ;
$mpdf->Ovalue = $oval ;
$mpdf->encryption_key = $encKey ;
$mpdf->Uvalue = $uval ;
$mpdf->Pvalue = $pval ;
$search = array(
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
);
$replacement = array(
"personalised for Jos\xc3\xa9 Bloggs"
);
error_reporting(0);
ini_set('display_errors', 0);
ob_clean();
$mpdf->OverWrite('test.pdf', $search, $replacement, 'I', 'mpdf.pdf' ) ;
?>
Вот и все. Я надеюсь, что этот код может помочь другим так же, как он помог мне!