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.
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
Vous devez vous connecter pour publier un commentaire.
TCPDF prend en charge signature de fichiers pdf. Peut-être que vous trouverez quelque chose d'utile dans le code source.
pouvez-vous modifier votre question pour spécifier cette condition? Si vous pouvez donner un peu de contexte pour expliquer pourquoi c'est le cas, tant mieux - il peut aider à orienter les réponses.
OriginalL'auteur Oliver
Ajoutant ma solution que d'y répondre, par après avis de l': 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.
OriginalL'auteur jbrain