bulletThe ID Security Suite News Archive is being updated on regular basis, so please check in from time to time for up to date articles on PC Security issues.

Password protect a PDF document in PHP

07 Oct 2008
 by Cristina Mailat | in: News, Security

Check bellow the solution I found for on the fly protecting a PDF file in PHP. For resolving this problem I wanted a FREE library. Download the library used: Protect PDF in PHP from and use the code bellow for password protect a PDF file using PHP.

<?php

function pdfEncrypt ($origFile, $password, $destFile){
//include the FPDI protection http://www.setasign.de/products/pdf-php-solutions/fpdi-protection-128/
require_once(‘fpdi/FPDI_Protection.php’);

$pdf =& new FPDI_Protection();
// set the format of the destinaton file, in our case 6×9 inch
$pdf->FPDF(‘P’, ‘in’, array(’6′,’9′));

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

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

// protect the new pdf file, and allow no printing, copy etc and leave only reading allowed
$pdf->SetProtection(array(), $password, ”;
$pdf->Output($destFile, ‘F’);

return $destFile;
}

//password for the pdf file (I suggest using the email adress of the purchaser)
$password = “info@domain.com”;

//name of the original file (unprotected)
$origFile = “book.pdf”;

//name of the destination file (password protected and printing rights removed)
$destFile =“book_protected.pdf”;

//encrypt the book and create the protected file
pdfEncrypt($origFile, $password, $destFile );
?>

Published: 07 Oct 2008  by Cristina Mailat, in: News, Security Tags: , , RSS feed for comments on this post.

6 Responses to “Password protect a PDF document in PHP”

  1. I found the original script (found at http://www.fpdf.org/en/script/script37.php) a lot easier to handle. It only required minor changes to my code. No hassling with multiple files required!

    The only changes in my code were:
    require(“../fpdf/fpdf_protect.php”); // instead of fpdf.php

    class mijnPDF extends FPDF_Protection // instead of … extends FPDF

    $pdf = new mijnPDF();
    $pdf->SetProtection(array(‘print’)); // line added after the creation of my proper PDF class based on FPDF

  2. Hello, I corrected the code, now you is just copy paste:

    FPDF(‘P’, ‘in’, array(’6′,’9′));

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

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

    // protect the new pdf file, and allow no printing, copy etc and leave only reading allowed
    $pdf->SetProtection(array(),$password);
    $pdf->Output($destFile,’F');

    return $destFile;
    }

    //password for the pdf file (I suggest using the email adress of the purchaser)
    $password = ‘info@domain.com’;

    //name of the original file (unprotected)
    $origFile = ‘book.pdf’;

    //name of the destination file (password protected and printing rights removed)
    $destFile =’book_protected.pdf’;

    //encrypt the book and create the protected file
    pdfEncrypt($origFile, $password, $destFile );
    ?>

  3. hi!

    the code is great!

    i used it and it works!

    i have now security in my pdf reports.

    but i notice the print button is disabled.
    i try to fix it but i failed.

    can you guys give me a help?

    thanks a lot!

  4. use
    $pdf->SetProtection(array(‘print’),”password”);

  5. Hello Guys,

    I tried to implement it in my site but it failed.
    The right portion of my original pdf is cropped out when it is saved with password protection. Why its happening. Can anyone help in this

    -rahul

  6. Hey Arthur,

    To get allow printing replace the line:
    $pdf->SetProtection(array(), $password, “”);

    With
    $pdf->SetProtection(array(‘print’ => ‘print’), $password, “”);

    Should do the trick for you.

    Cristina,

    Is there a way to allow input into this script and not having to set the page format? It will default to landscape A4, but is there a way getting it to auto-detect the dimensions of the PDF that I am putting in?

    Many thanks,

    James Doc

Leave a Reply