0

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

基于内存的组合 基于内存的方法速度更快,但需要更多内存。除非您处理非常大的文档,否则建议将其用于 Web 应用程序中的动态 PDF 生成和签名。不要使用 PDFlib 在磁盘上生成 PDF 文件,而是通过向 提供一个空文件名来使用核心 PDF 生成,使用 PDF_begin_document( )获取包含生成的 PDF 数据的缓冲区的内容PDF_get_buffer( ),然后使用 .创建一个虚拟文件PLOP_create_pvf( )。然后可以将用于虚拟文件的文件名传递给 PLOP/PLOP DS, PLOP_open_document( )而无需在磁盘上创建物理文件。请注意,由于必须在单个缓冲区中将完整文档提供给 PLOP/PLOP DS,因此无法在多个部分中获取 PDFlib 缓冲区内容。因此,您必须致电 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?

4

2 回答 2

2

马特,

当您使用 PDFlib 创建 PDF 文档时(听起来您已经这样做了),没有必要使用额外的库来保护文件。简单地使用 begin_document() 选项列表中的权限选项。

您可以在 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 包中,也可从http://www.pdflib免费下载.com/developer/technical-documentation/manuals/(请不要使用 PDFlib API 的 php.net 文档页面)

当您不使用 PDFlib 来创建 PDF 数据时,您应该按照提供的 PLOP noprint.php 示例(包含在 PLOP 包中)来实现它

于 2012-10-04T08:09:57.213 回答
1

所有 PHP 和其他语言的文档都可以在这里找到

直接取自其中一页...

<?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;

?>
于 2012-10-03T21:00:31.153 回答