Редактирование и последующая защита pdf с помощью fpdi не работает

У меня есть два кода: один для редактирования уже загруженного pdf, а второй для защиты уже загруженного pdf с паролем.

вот фрагменты кода

1) Для редактирования PDF

require_once('fpdf.php');  
require_once('fpdi.php');  

$pdf = new FPDI();  
$filen="upload/json_tutorial.pdf";
$pageCount = $pdf->setSourceFile($filen);  

// iterate through all pages
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
 // import a page
    $tplidx = $pdf->importPage($pageNo);
    $pdf->addPage();  
    $pdf->useTemplate($tplidx, 0, 0, 220,270);  
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(0, 0, 255);
    $pdf->SetXY(5, 5);
    $cur_page_no=$pdf->PageNo();
    $min=2;
    $max=10;

if((($pdf->PageNo())>=$min) && (($pdf->PageNo())<=$max))
{
    $author="AuthorName";
    $pdf->Cell(320,10,$author,0,0,'C');
}    
}

$pdf->Output('newpdf.pdf', 'D');

2) Для защиты паролем

function pdfEncrypt ($origFile, $password, $destFile)
{

    require_once('FPDI_Protection.php');
    $pdf =& new FPDI_Protection();
    $pagecount = $pdf->setSourceFile($origFile);

    for ($loop = 1; $loop <= $pagecount; $loop++) 
    {
    $tplidx = $pdf->importPage($loop);
    $pdf->addPage();
    $pdf->useTemplate($tplidx);
    }

    $pdf->SetProtection(array(), $password,'');
    $pdf->Output($destFile, 'D');
    return $destFile;
 }
 $password = "pass123";
 $origFile = "json_tutorial.pdf";
 $destFile ="pd_protected.pdf";

 pdfEncrypt($origFile, $password, $destFile );

Оба кода работают нормально. Но когда я пытаюсь совместить их обоих. любой из них никогда не работает, так как код 1 использует более новые библиотеки, а код 2 использует более старые. Я пытался работать с кодом 2 с новыми библиотеками, но выдает, что файл не может быть загружен из-за ошибок.

Я добавил функциональность кода 1 в код 2 следующим образом:

function pdfEncrypt ($origFile, $password, $destFile)
{
    require_once('FPDI_Protection.php');
    $pdf =& new FPDI_Protection();
    $pagecount = $pdf->setSourceFile($origFile);
    for ($pageNo = 1; $pageNo <= $pagecount; $pageNo++) 
    {
    $tplidx = $pdf->importPage($pageNo);
    $pdf->addPage();  
    $pdf->useTemplate($tplidx, 0, 0, 220,270);  
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(0, 155, 255);
    $pdf->SetXY(5, 5);
    $min=2;
    $max=10;

    if((($pdf->PageNo())>=$min) && (($pdf->PageNo())<=$max))
    {
        $author="KomalD";
        $pdf->Cell(320,10,$author,0,0,'C');
    }
    }
    $pdf->SetProtection(array(), $password,'');
    $pdf->Output($destFile, 'D');

    return $destFile;
}
$password = "pass123";
$origFile = "json_tutorial.pdf";
$destFile ="pd_protected.pdf";

pdfEncrypt($origFile, $password, $destFile );

Этот код сохраняет файл как защищенный паролем, но не редактирует его вообще. ни выдает никаких ошибок или предупреждений. Что я делаю не так??

Пожалуйста, предложите. Спасибо


person KAsh    schedule 02.06.2014    source источник


Ответы (1)


В первую очередь следует обновить все используемые классы до их текущих версий: FPDF, FPDI и FPDI_Protection (см. предыдущую ссылку).

После этого вам просто нужно потребовать необходимые файлы, и ваш последний скрипт должен работать как положено:

function pdfEncrypt ($origFile, $password, $destFile)
{
    require_once('fpdf.php');
    require_once('fpdi.php');
    require_once('FPDI_Protection.php');
    $pdf = new FPDI_Protection(); // <-- remove the "&"
    $pagecount = $pdf->setSourceFile($origFile);
    ...
person Jan Slabon    schedule 03.06.2014