Protecting the generated PDF in PHP with Guzzle
In this guide, we'll show you how you can protect your generated PDF with encryption for owner and user, and for choosing who can modify, print and/or copy the generated PDF. This guides explains you to do it using PHP and the Guzzle library and relies on the PDFShift's API.
One of the most useful feature here is the ability to set a password for the owner and the user of the PDF. This allows you to protect your document from anyone and restrict its access to only a few people.
PDFShift allows you to do this easily by adding the protection
object to your query.
Here's a sample:
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
# You can get an API key at https://pdfshift.io
$api_key = 'sk_xxxxxxxxxxxx'
$params = array (
'source' => 'https://www.example.com',
'protection' => array (
'owner_password' => 'owner_password',
'user_password' => 'user_password',
'no_print' => true,
'no_modify' => true
)
)
// Create a Guzzle client
$client = new Client();
try {
// Make the POST request
$response = $client->post('https://api.pdfshift.io/v3/convert/pdf', [
'headers' => [
'Content-Type' => 'application/json',
'Authorization' => 'Basic ' . base64_encode('api:' . $api_key)
],
'json' => $params
]);
// Get the response body
$body = $response->getBody()->getContents();
// Save the file to result.pdf
file_put_contents('result.pdf', $body);
echo 'The PDF document was generated and saved to result.pdf';
} catch (RequestException $e) {
if ($e->hasResponse()) {
$statusCode = $e->getResponse()->getStatusCode();
$reasonPhrase = $e->getResponse()->getReasonPhrase();
throw new Exception("Request failed with status code $statusCode: $reasonPhrase");
} else {
throw new Exception("Request failed: " . $e->getMessage());
}
}
Adding the protection
object to your query will tell PDFShift to generate a PDF that will be password protected.
The protection
object accepts the following parameters:
author
: The name of the author in the PDF metadata.owner_password
: The password set for the owner.user_password
: The password set for the user.no_print
: If set toTrue
, the user won't be able to print the PDF. (Only the owner)no_modify
: If set toTrue
, the user won't be able to modify the PDF. (Only the owner)no_copy
: If set toTrue
, the user won't be able to copy the content of the PDF. (Only the owner)
IMPORTANT: It is important to note that most PDF reader don't respect the protection parameter. For instance, if you set the user_password to none (allowing anyone to view the PDF) but set the owner_password and block the modify, print and copy, most PDF reader will still allow user (and not owners) to modify, print and copy the PDF. This is a limitation of the PDF format and not PDFShift.
For further details on the protection
property and its usage, please refer to our dedicated documentation.
We hope this guide was helpful. If you have any questions or noticed any issues on the code above,
feel free to drop us a line.