Я пытаюсь создать простую процедуру подписи документов PDF, используя PHP, openssl и фреймворк Zend (для распаковки/обработки pdf).Цифровая подпись PDF с использованием PHP, Zend и openssl
Я нашел this, но это просто не сработает, Zend не может открыть какие-либо PDF-файлы, даже собственный тест для Zend, и 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);
}
Edit, добавив код: выше работает только если я использую «test_pdf2» в качестве входных данных для Zend_PDF. Он распознает сертификат как двоичный, без проблем, но мне нужно иметь возможность передавать PDF, не записывая его на диск.
Итак, возможно, я подошел ближе. Что происходит, PHP настаивает на вставке в файл слэшей, новой строки, символов возврата каретки, независимо от того, загружаю ли я его или читаю с локального диска с помощью file_get_contents. Я знаю и пробовал stripslashes, объявляя magic_quotes и т. Д. Я могу только заставить его работать, если у меня есть Zend_Pdf, читайте файл напрямую, что не будет работать для меня, потому что мы не будем писать какие-либо из этих файлов на диск, когда-либо. Есть ли все-таки, чтобы убедить PHP в том, что он не должен искажать данные, к которым он обращается? – jbrain
Можем ли мы увидеть ваш код, который вы используете для обработки PDF? Измените это на свой вопрос. – halfer
Решил этот, потому что я передавал содержимое Zend_Pdf в виде строки, я должен был использовать Zend_Pdf :: parse ($ new_pdf) ;, как это, скорее всего, говорится в руководстве. (oops) – jbrain