我正在尝试为用户提供密码选项,以保护他们通过PDFLib创建的PDF。我已经阅读了有关PLOP的文档,并在手册(located here)的附录 A 中看到了以下段落:
基于内存的组合基于内存的方法速度更快,但需要更多 记忆。建议在Web应用程序中生成动态PDF和签名 除非你处理非常大的文件。而不是生成PDF文件 使用PDFlib的磁盘,通过提供空文件名来使用核心PDF生成
PDF_begin_document( )
,获取包含生成的PDF的缓冲区的内容 数据使用PDF_get_buffer( )
,并使用PLOP_create_pvf( )
创建虚拟文件。文件 然后可以使用用于虚拟文件的名称传递给PLOP / PLOP DSPLOP_open_document( )
,无需在磁盘上创建物理文件。请注意它是 自完整文档以来,无法在多个部分中获取PDFlib缓冲区内容 必须在单个缓冲区中提供给PLOP / PLOP DS。因此你必须打电话PDF_get_buffer( )
和PDF_end_document( )
之间的PDF_delete( )
。 包含在所有PLOP包中的hellosign编程示例演示了 如何使用PDFlib动态创建PDF文档并将其传递给 存储器中的PLOP用于应用数字签名。
到目前为止,我编写了以下方法,在PDF_end_document()
之前调用,如手册所示:
function encrypt_pdf($pdf_buffer, $password) {
$optlist = '';
$filename = "temp";
create_pvf($filename, $pdf_buffer, $optlist);
$optlist = "masterpassword=$password";
open_document($filename, $optlist);
$doc = create_file($filename, $optlist);
}
我不知道如何从这里开始。没有我发现的文档甚至远程涵盖了我正在尝试做的事情(即使我认为这是PLOP API的常见用法)。
如何完成此方法,并使用密码保护输出PDF?
答案 0 :(得分:2)
马特,
当您使用PDFlib创建PDF文档时(听起来您已经这么做了),没有必要使用额外的库来保护文件。简单地使用begin_document()选项列表中的permissions-选项。
您可以在PDFlib食谱中找到一个示例 http://www.pdflib.com/en/pdflib-cookbook/general-programming/permission-settings/php-permission-settings/ 你可以在哪里看到如何做到这一点。
本主题中的详细介绍位于PDFlib 8教程,第3.3章和PDFlib 8 API参考,第3.1章,表3.1,它包含在所有PDFlib 8包中,也可在{{3}上免费下载(请不要使用PDFlib API的php.net文档页面)
当您不使用PDFlib创建PDF数据时,您应该实现此类似于提供的PLOP noprint.php示例(包含在PLOP包中)
答案 1 :(得分:1)
可以找到所有PHP和其他语言文档here
直接从其中一个页面中采取......
<?php
/* $Id: decrypt.php,v 1.10 2011/02/23 18:51:35 rjs Exp $
* PDFlib PLOP: PDF Linearization, Optimization, Protection
* decryption sample in PHP
*/
/* parameters for the input document */
$in_filename = "PLOP-datasheet-encrypted.pdf";
$in_password = "DEMO";
/* parameters for the output document */
$out_filename = "";
$out_master = "";
$out_user = "";
$permissions = "";
/* This is where input files live. Adjust as necessary. */
$searchpath = "../data ../../data";
try{
$optlist = "";
/* create a new PLOP object */
$plop = new PLOP();
$optlist = sprintf("searchpath={%s}", $searchpath);
$plop->set_option($optlist);
/* open protected input file with the password */
$optlist = sprintf("password {%s} ", $in_password);
if (!($doc = $plop->open_document($in_filename, $optlist))) {
die("Error: " . $plop->get_errmsg());
}
/* create the output file */
$optlist = sprintf("masterpassword {%s} userpassword {%s} permissions {%s}", $out_master, $out_user, $permissions);
if (!$plop->create_file($out_filename, $optlist)) {
die("Error: " . $plop->get_errmsg());
}
$buf = $plop->get_buffer();
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=decrypt.pdf");
print $buf;
/* close input and output files */
$plop->close_document($doc);
}
catch (PLOPException $e) {
die("PLOP exception occurred in decrypt sample:\n" .
"[" . $e->get_errnum() . "] " . $e->get_apiname() . ": " .
$e->get_errmsg() . "\n");
}
catch (Exception $e) {
die($e);
}
$plop = 0;
?>