本文概述
- 关于SetProtection方法
- 受保护的PDF的示例
基本上, 保护文档所需要做的就是使用$ yourPDF-> SetProtection($ arguments)方法。
注意:保护文档需要对其进行加密, 这大大增加了处理时间。在某些情况下, 这可能会导致PHP超时, 尤其是在文档包含图像或字体的情况下。你可以使用set_time_limit($ seconds)延长执行时间, 以增加时间限制, 或者更改php.ini文件中的值。
关于SetProtection方法 SetProtection方法最多需要5个参数:
1.权限数组
第一个参数是一个字符串数组, 其标识符为内容, 该内容指示应从PDF中删除哪些权限。
- 打印:禁用从任何PDF查看器打印PDF的可能性。
- 修改:防止通过除” 填写表格” , “ 提取” 和” 汇编” 所控制的操作之外的其他操作来修改文档的内容;
- 复制:防止复制或从文档中提取文本和图形;
- annot-forms:添加或修改文本注释, 填写交互式表单字段, 如果还设置了” 修改” , 则创建或修改交互式表单字段(包括签名字段);
- fill-forms:即使未指定” annot-forms” , 也要填写现有的交互式表单字段(包括签名字段);
- 提取:提取文本和图形(以支持残障用户使用或出于其他目的);
- 组装:即使未设置” 修改” , 也可以组装文档(插入, 旋转或删除页面并创建书签或缩略图图像);
- 高打印:将文档打印到一个表示形式, 可以从该表示形式生成PDF内容的忠实数字副本。如果未设置此选项, 则打印仅限于外观的低级表示, 可能会降低质量。
- owner :(反逻辑-仅用于公共密钥)设置时, 允许更改加密并启用所有其他权限。
$pdf->
SetProtection(array('print', 'modify'));
2.用户密码
第二个参数是每个用户每次尝试在任何PDF查看器中打开PDF时应提供的密码。使用null或” 作为值不使用该用户的任何密码。
文章图片
上一张图片显示了一个PDF, 其密码尝试在Chrome PDF Viewer中查看。
3.所有者密码
如果要撤消任何PDF查看器中的任何已删除权限, 则主(所有者)密码(与用户密码不同)可用于获得完整的文档访问权限。
4.加密类型
加密类型的可能值为:
- 0 = RSA 40位
- 1 = RSA 128位
- 2 = AES 128位
- 3 = AES 256位
【如何在PHP中加密由TCPDF生成的PDF(密码保护)】RSA 40位的加密PDF应该使用以下方式创建:
$pdf->
SetProtection($permissions, "PasswordForUsers", "MyMasterPassword", 0);
5.用公钥签名pdf
如果要使用公共密钥对PDF进行签名, 则需要提供一个带有2个密钥的数组作为第五个参数和最后一个参数:
- c:证书的本地路径(yourpublickey.crt)。
- p:数组中的权限(与第一个参数相同的结构)。
$pdf->
SetProtection(null, null, null, 0, array('c' =>
'/path/to/self-signed-certificate.crt', 'p' =>
array('print', 'modify')));
受保护的PDF的示例 如前所述, 为了保护你的PDF, 你需要注意SetProtection方法, 你可以开始使用。
<
?php//require __DIR__ . '/vendor/autoload.php';
// we supposed that you know how to include the TCPDF class in your document$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
/** * Protect PDF from being printed, copied or modified. In order to being viewed, the user needs * to provide "ourcodeworld" as password. */$pdf->
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 = <
<
<
EODEncryption ExampleConsult the source code documentation for the SetProtection() method.EOD;
// print a block of text using Write()$pdf->
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类的文档。玩得开心!
推荐阅读
- 如何使用C#在Winforms中检索基本和高级硬件和软件信息(GPU,硬盘,处理器,操作系统,打印机)
- 如何在Symfony 3中使用phpseclib连接到SFTP服务器
- 如何在Symfony 3中使用Twig(或在控制器中)在表单上显示所有(或单个)错误
- 如何为特定活动禁用Android Soft Keyboard()
- 没有标签视图使用android(labelFor =“@ + id / @ + id /”属性指向此文本字段)
- 如何连续删除键盘退格键上的字符长按android
- android如何将EditText光标设置为其文本的末尾[复制]
- SetEditable在最新的Android版本中不起作用
- Android EditText Capital Characters