本文概述

PDF是数字世界中最接近正式文档的文件, 并且在现实生活中, 某些PDF旨在以保密的方式进行保密。而且, 如果你想使用TCPDF保护生成的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:

$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位

PDF加密内部使用40、128或256位的加密密钥, 具体取决于PDF版本。二进制加密密钥源自用户提供的密码。

RSA 40位的加密PDF应该使用以下方式创建:

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

5.用公钥签名pdf

如果要使用公共密钥对PDF进行签名, 则需要提供一个带有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方法, 你可以开始使用。

//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 = <<

Encryption Example

Consult 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类的文档。玩得开心!

php图片生成加密pdf文件,如何在PHP中加密由TCPDF生成的PDF(密码保护)相关推荐

  1. linux中编辑pdf文件,如何在Ubuntu中创建和编辑PDF文件

    在打印,共享和通过电子邮件发送文档(尤其是大型文档)时,PDF或可移植文档格式通常是我们的首选.对于Windows和MacOS,您可能非常熟悉,也依赖于广泛使用的Acrobat产品来进行pdf创建,查 ...

  2. android 文件加密解决方法,如何在Android中加密和解密文件?

    我有类似的问题,加密/解密我提出了这个解决方案: public static byte[] generateKey(String password) throws Exception { byte[] ...

  3. python加密执行_如何在Python中执行PGP(生成密钥,加密/解密)

    PyCrypto支持PGP-尽管您应该测试它以确保它符合您的规范. 尽管文档很难获得,但是如果您查看Util/test.py(模块测试脚本),您可以找到它们的PGP支持的基本示例:if verbose ...

  4. 如何用 Java 对 PDF 文件进行电子签章(五) 如何生成一个高清晰的签章

    参考: https://blog.csdn.net/javasun608/article/details/79307845    具体步骤: 由PDF模板生成一个PDF文件.加签章.由itext5 生 ...

  5. win7如何更改文件类型_如何在win10中使用云笔记软件来做pdf手写笔记或绘图? - 敬业签便签...

    Win10是现在很多职场办公人士和笔记本电脑用户所使用的操作系统,其界面更为简洁,功能也更为强大.和Windows之前所发布的经典Win7系统一样,在Win10系统电脑上也可以下载安装很多好用的工具软 ...

  6. 如何将PDF如何存入MySQL_如何将生成的pdf文件保存到java中的mysql数据...

    我有一个使用itext库生成pdf文件的java类.现在根据我的需要,我必须将生成的pdf文件保存到mysql数据库表中,但是我不知道该怎么做. 我的担心是:- 1.我可以在pdf表的mysql列中提 ...

  7. android 大文件加密,如何在android中加密大视频文件

    我有一个应用程序,我正在使用该代码来解密已加密的文件.文件位置是"/mnt/sdcard/myfolder/test.mp4". test.mp4文件大小约为20MB.如何在and ...

  8. 如何在Wordpress中加密保护网站视频和网页内容?

    本教程将教您如何使用DRM加密软件来保护WordPress网站的视频/网页内容.保护WordPress的视频.文本.图像和JavaScript免受盗版. 在教育和众多商业领域中,Wordpress网站 ...

  9. 为什么matlab生成的exe文件只能在matlab中打开,在电脑的其他地方打不开?

    为什么matlab生成的exe文件只能在matlab中打开,在电脑的其他地方打不开? 2014-11-09 20:20147****3349 | 浏览 448 次  操作系统 在同一个电脑里,在mat ...

最新文章

  1. AE 先进的视频画面 快速释放 慢动作
  2. 使用Hive UDF和GeoIP库为Hive加入IP识别功能
  3. 使用powerdesigner建立UML类图
  4. python实现提取jira bug列表
  5. 【物联网】 AR9344开发环境的搭建和编译固件
  6. 大学计算机需要论文吗,关于大学计算机论文范文.docx
  7. 5-9轻量型网络结构
  8. android多板面式布局,Android Design
  9. 网站CPU占满,微信经常SSL不能建立的错误排查
  10. python3 写九九乘法表(python 小白进阶之旅)
  11. Oracle分区查询
  12. HERO引擎传奇遇到的问题以及解决办法
  13. 51单片机——LED流水灯
  14. vscode如何配置java环境_VSCode 配置Java环境
  15. 4.1.14 Flink-流处理框架-Flink流处理API之数据重分区操作
  16. 最新大麦网抢票脚本-Python实战
  17. 2021年5月19日最新快手半自动刷金币
  18. 可口可乐市场调查失败的原因_可口可乐失败案例
  19. MySQL UDF 提权
  20. 八、Echart图表 之 series盒须图(箱体图)基本使用与配置大全

热门文章

  1. 电脑锁屏快捷键是什么?如何快速进行电脑锁屏
  2. 关于QQ for Linux想说的事
  3. 张小庆,在路上-开始(1)找工作
  4. 配置Web.config 元素CustomErrors
  5. Linux中的程序和进程的概念,PID和PPID的区别
  6. 生物医用支架的形变仿真分析
  7. 好用的前端开发工具都有什么突出优势?
  8. Form表单, 4种常见的表单提交方式
  9. html屏蔽错误提示,JavaScript错误怎么屏蔽?
  10. Edge无法使用无痕模式/由于家庭设置无法使用