Signieren eines PDF mit Hilfe von PHP, Zend und openssl

Ich versuche zu bauen, ein einfaches PDF-Dokument signieren-routine, mit PHP, openssl, und das Zend framework (für pdf-redering/handling).

Habe ich gefunden diese, aber es funktioniert einfach nicht, Zend ist nicht in der Lage, öffnen Sie eine beliebige pdf-Dateien, nicht auch von Zend eigenen test-pdf und Zend wird nicht berichtet, warum, nur, dass es 'nicht'.

Ich bin mir ziemlich sicher, ich wäre in der Lage zu erstellen, die keys/certs effektiv wie, dass ist gut dokumentiert, aber es ist ein solider Ansatz zur Befestigung der generierte Zertifikat an, um die PDF-Datei als die oben Zend-Erweiterung schlägt es einst Tat?

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

Bearbeiten, hinzufügen von code: Das obige funktioniert nur, wenn ich 'test_pdf2' als Eingabe für die Zend_Pdf. Es erkennt das cert als binary mit keine Probleme, aber ich muss in der Lage sein, um übergeben Sie die PDF-Datei, ohne je das schreiben auf die Festplatte zu speichern.

  • Ok, so kann ich Sie bekommen haben, näher. Was passiert, ist, dass PHP beharrt auf einfügen Schrägstriche, newline, carriage-return-Zeichen in der Datei, egal ob ich es hochladen, oder Lesen Sie es von einer lokalen Festplatte mit file_get_contents. Ich bin mir bewusst und haben versucht, stripslashes, erklärt magic_quotes off, usw. Nur kann ich es auf der Arbeit, wenn ich Zend_Pdf Lesen Sie die Datei direkt, was nicht funktioniert für mich, weil wir nicht schreiben Sie diese Dateien auf einen Datenträger, je. Gibt es trotzdem, Sie zu überzeugen, dass PHP es sollte nicht die Manipulation der Daten, die er gebeten hat, behandeln?
  • Können wir den code sehen, das Sie verwenden, behandeln Sie die PDF-Datei? Bearbeiten Sie es in Ihrer Frage.
  • Lösen Sie diese ein, denn ich war die Weitergabe der Inhalte zu Zend_Pdf als string, da hätte ich mit Zend_Pdf::parse($new_pdf);, da es sehr wahrscheinlich in der Anleitung steht. (oops)
  • Weiter, ich löste so ziemlich ALLE meine Probleme mit der digitalen Signierung von PDF-Dateien der verschiedenen Versionen und bilden Bestandteile durch den Umzug in TCPDF, da einige der Artikel hier empfehlen. Eine ähnliche Einschränkung, traf TCPDF obwohl, wenn Sie Zeichenfolgen, sicherzustellen, dass Sie mit TCPDF s 'writeHTMLCell' statt 'writeHTML'. Und Uhr für PHPs 'magic_quotes', fehlerhafte Leerzeichen, Codierung und goblins.
  • ^ Ich schlage vor, Sie fügen Sie Ihre Lösung als Antwort (als gängige Praxis hier) und löschen Sie Ihre Lösung Kommentare oben.
InformationsquelleAutor jbrain | 2012-06-05
Schreibe einen Kommentar