使用PLOP密码保护PDF(PDFLib)

时间:2012-10-03 20:40:23

标签: php pdflib

我正在尝试为用户提供密码选项,以保护他们通过PDFLib创建的PDF。我已经阅读了有关PLOP的文档,并在手册(located here)的附录 A 中看到了以下段落:

  

基于内存的组合基于内存的方法速度更快,但需要更多   记忆。建议在Web应用程序中生成动态PDF和签名   除非你处理非常大的文件。而不是生成PDF文件   使用PDFlib的磁盘,通过提供空文件名来使用核心PDF生成   PDF_begin_document( ),获取包含生成的PDF的缓冲区的内容   数据使用PDF_get_buffer( ),并使用PLOP_create_pvf( )创建虚拟文件。文件   然后可以使用用于虚拟文件的名称传递给PLOP / PLOP DS   PLOP_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?

2 个答案:

答案 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;

?>