使用PHP,Zend和openssl对PDF进行数字签名

jbr*_*ain 10 php pdf openssl zend-framework sign

我正在尝试使用PHP,openssl和Zend框架(用于pdf redering/handling)构建一个简单的PDF文档签名例程.

我发现了这一点,但它根本不起作用,Zend无法打开任何pdf,甚至Zend自己的测试pdf,Zend也不会报告原因,只是它"不能".

我很确定我能够有效地创建密钥/证书,因为这有很好的文档,但有没有一种可靠的方法将生成的证书附加到PDF,因为上面的Zend扩展建议曾经这样做过?

function DigiSignPDF ($pdf_sign_request) {
    if (get_magic_quotes_gpc()) {
        $new_pdf = stripslashes($pdf_sign_request['raw_pdf']);
    } else {
        $new_pdf = $pdf_sign_request['raw_pdf'];
    }
    $test_pdf = stripslashes(file_get_contents('path/Some.pdf'));
    $test_pdf2 = ('path/Some.pdf');
    $pdf = Zend_Pdf::load($new_pdf2);
    //below is the signing code, from another library, it works as long as Zend_Pdf works
    $certificate = file_get_contents('path/certificate.p12');
    $certificatePassword = 'test123';

    if (empty($certificate)) {
        throw new Zend_Pdf_Exception('Cannot retrieve/generate the certificate.');
    }
    $pdf->attachDigitalCertificate($certificate,$certificatePassword);
    $eSig_pdf = $pdf->render();
    file_put_contents('path/signed_pdf.pdf', $eSig_pdf);
}
Run Code Online (Sandbox Code Playgroud)

编辑,添加代码:以上只有在我使用'test_pdf2'作为Zend_Pdf的输入时才有效.它将证书识别为二进制文件没有任何问题,但我需要能够传递PDF而无需将其写入磁盘.

Oli*_*ver 8

TCPDF支持签署 pdf文件.也许你在源代码中找到了一些有用的东西.

  • @ user1437888 - 您可以编辑您的问题以指定该条件吗?如果你能给出一些背景知道为什么会这样,那就更好了 - 它可能有助于指导答案. (2认同)