Как зашифровать PDF (защита паролем), созданный с помощью TCPDF в PHP

PDF — самая близкая вещь к официальному документу в цифровом мире, и точно так же в реальной жизни некоторые PDF-файлы должны быть конфиденциальными. А если вы хотите защитить сгенерированный PDF с помощью TCPDF, в библиотеке есть поддержка защищенного паролем и шифрования, и вам нужно только научиться его использовать.

По сути, все, что вам нужно сделать для защиты вашего документа, это использовать $yourPDF->SetProtection($arguments) метод.

Замечания: защита документа требует его шифрования, что значительно увеличивает время обработки. Это может вызвать тайм-аут PHP в некоторых случаях, особенно если документ содержит изображения или шрифты. Вы можете продлить время выполнения, увеличив срок, используя set_time_limit($seconds) или изменить значение в php.ini файл.

О методе SetProtection

SetProtection Метод рассчитывает до 5 параметров:

1. Массив разрешений

Первый параметр должен представлять собой массив строк с идентификаторами в качестве содержимого, которое указывает какие разрешения должны быть удалены из PDF.

  • print : отключить возможность печати PDF из любого средства просмотра PDF.
  • modify : предотвращать изменение содержимого документа с помощью операций, отличных от тех, которые контролируются «fill-form», «extract» и «assembly»;
  • copy : предотвратить копирование или иным образом извлечь текст и графику из документа;
  • annot-forms : Добавление или изменение текстовых аннотаций, заполнение полей интерактивной формы и, если также установлено значение «изменить», создание или изменение полей интерактивной формы (включая поля подписи);
  • fill-forms Заполните существующие поля интерактивной формы (включая поля подписи), даже если не указано «annot-forms»;
  • extract : Извлечение текста и графики (для обеспечения доступности для пользователей с ограниченными возможностями или для других целей);
  • assemble : Соберите документ (вставьте, поверните или удалите страницы и создайте закладки или уменьшенные изображения), даже если «изменить» не установлено;
  • print-high : Распечатайте документ в виде представления, из которого можно было бы получить достоверную цифровую копию содержимого PDF. Когда это не установлено, печать ограничивается представлением низкого уровня внешнего вида, возможно, с ухудшенным качеством.
  • owner : (инвертированная логика — только для открытого ключа), если установлено, разрешает изменение шифрования и разрешает все остальные разрешения.

Следующий код должен предотвратить печать или изменение PDF-файла:

$pdf->SetProtection(array('print','modify'));

2. Пароль пользователя

Под вторым параметром подразумевается пароль, который каждый пользователь должен предоставлять каждый раз, когда он пытается открыть PDF-файл в любой программе просмотра PDF. использование null или же '' в качестве значения, чтобы не использовать пароль для пользователя.

Защищенный паролем PDF в PDF Viewer

На предыдущем изображении показан PDF-файл с паролем, который пытается просмотреть в Chrome PDF Viewer.

3. Пароль владельца

Главный (владелец) пароль, если он отличается от пароля пользователя, можно использовать для получения полного доступа к документу в случае, если вы хотите отозвать любое из удаленных разрешений в любом средстве просмотра PDF.

4. Тип шифрования

Возможные значения типа шифрования:

  • 0 = RSA 40 бит
  • 1 = RSA 128 бит
  • 2 = AES 128 бит
  • 3 = 256 бит AES

Шифрование PDF внутренне работает с ключами шифрования 40, 128 или 256 бит в зависимости от версии PDF. Бинарный ключ шифрования получен из пароля, предоставленного пользователем.

Зашифрованный PDF с RSA 40 бит должен быть создан с:

$pdf->SetProtection($permissions,"PasswordForUsers","MyMasterPassword",0);

5. Подпишите pdf открытым ключом

Если вы хотите подписать PDF открытым ключом, вам нужно предоставить в качестве 5-го и последнего параметра массив с 2 ключами:

  • c: локальный путь к сертификату (yourpublickey.crt).
  • p: разрешения (та же структура, что и у первого параметра) в массиве.

PDF, подписанный открытым ключом, должен быть создан с использованием следующего кода:

$pdf->SetProtection(null,null,null,0, array(
'c' => '/path/to/self-signed-certificate.crt',
'p' => array('print','modify')
));

Пример защищенного PDF

Как уже упоминалось ранее, для защиты вашего PDF вы должны обратить внимание на SetProtection метод, и вы готовы к работе.

SetProtection(array('print', 'copy','modify'), "ourcodeworld", "ourcodeworld-master", 0, null);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Our Code World');
$pdf->SetTitle('TCPDF Example');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');
// set default header data
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 016', PDF_HEADER_STRING);
// set header and footer fonts
$pdf->setHeaderFont(array('helvetica', '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(array('helvetica', '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
// set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// add a page
$pdf->AddPage();
// set some text to print
$txt = <<Write(0, $txt, '', 0, 'L', true, 0, false, false, 0);
//Close and output PDF document to the browser
$pdf->Output('example_016.pdf', 'I');

Вы можете увидеть официальную демонстрацию в Сайт TCPDF о шифровании PDF здесь или читать документация класса TCPDF. Повеселись!

Ссылка на основную публикацию
Adblock
detector