La signature numérique d'un fichier PDF, à l'aide de PHP, Zend, et openssl

Je suis en train de construire un simple document PDF signature de routine, à l'aide de PHP, openssl, et le Zend framework (pdf redering/manipulation).

J'ai trouvé cette, mais il n'est tout simplement pas de travail, Zend n'est pas en mesure d'ouvrir tous les pdf, pas même de Zend propre test pdf et Zend ne signaleront pas pourquoi, seulement qu'il "ne peut pas".

Je suis sûr que je serais capable de créer les touches/certs efficacement que ce qui est bien documentée, mais est-il une solide approche de fixer le certificat généré le fichier PDF ci-dessus une extension Zend suggère qu'elle avait autrefois?

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);
}

Edit, ajout de code: Le ci-dessus ne fonctionne que si j'utilise "test_pdf2' comme l'entrée de Zend_Pdf. Il reconnaît le cert binaire avec pas de problèmes, mais j'ai besoin d'être en mesure de passer le fichier PDF sans jamais l'écriture sur le disque.

Ok, donc j'ai peut-être eu plus proche. Ce qui se passe est que PHP insiste sur l'insertion des barres obliques, saut de ligne, retour chariot caractères dans le fichier, peu importe si je le télécharge, ou lire à partir d'un disque local à l'aide de file_get_contents. Je suis au courant et ont essayé stripslashes, déclarant magic_quotes, etc. Je ne peux que le faire fonctionner, si j'ai Zend_Pdf lire directement le fichier, qui ne marchera pas pour moi parce que nous ne serons pas en écrire un de ces fichiers sur un disque, jamais. Est-il de toute façon à convaincre PHP qu'il ne devrait pas altérer les données qu'il est demandé à manipuler?
Pouvons-nous voir votre code que vous utilisez pour gérer le PDF? Monter dans votre question.
Résolu ce problème, parce que j'ai été en passant le contenu de Zend_Pdf comme une chaîne de caractères, j'aurais été à l'aide de Zend_Pdf::parse($new_pdf);, comme il est très probable est dit dans le manuel. (oups)
Plus loin; j'ai résolu quasiment TOUS mes problèmes avec la signature numérique des fichiers Pdf de différentes versions et la forme des mandants en se déplaçant à TCPDF, comme plusieurs des articles suggèrent ici. Une mise en garde similaire a été rencontré avec TCPDF si, lors de l'utilisation de chaînes, assurez-vous d'utiliser TCPDF "writeHTMLCell' au lieu de 'writeHTML'. Et de regarder pour PHPs 'magic_quotes', errant d'espaces, de codage et de gobelins.
^ Je vous suggère d'ajouter votre solution comme une réponse (une pratique courante ici) et supprimer votre solution de commentaires ci-dessus.

OriginalL'auteur jbrain | 2012-06-05