2013-04-19 11 views
5

Ich habe irgendwie seltsames Problem.
Ich habe seit einer Weile mit einem digitalen Signatur-Problem pdf Probleme und es funktioniert nicht so, wie ich es erwarte. Eigentlich funktioniert es überhaupt nicht.

I verwendet exacly gleichen Code wie in der Examples 52 Seite veröffentlicht wird:TCPDF fügt der erstellten PDF digitale Signatur hinzu

// set certificate file 
$certificate = 'file://var/www/app/tcpdf/config/cert/tcpdf.crt'; 

// set additional information 
$info = array(
    'Name' => 'TCPDF', 
    'Location' => 'Office', 
    'Reason' => 'Testing TCPDF', 
    'ContactInfo' => 'http://www.tcpdf.org', 
    ); 

// set document signature 
$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info); 

Das erste Problem war über

Warning: openssl_pkcs7_sign() [function.openssl-pkcs7-sign]: error getting private key in /var/www/app/tcpdf/tcpdf.php on line 7566 

Es verursacht wurde, weil ich nicht Privilegien festgelegt haben cert Verzeichnis aus. Aber nachdem ich 777 gesetzt habe magisch passieren.
Von nun an ich sehe nicht, was der Fehler ist, und ich sehe nicht den Fehler Spur aber:

HTTP ERROR 324 (net::ERR_EMPTY_RESPONSE) 

jemand kann mir etwas vorschlagen?

+0

Es scheint, dass Ihr Fehler nicht mehr bei der Verwendung der Signaturfunktionen von Tcpdf auftritt. Ich sehe nichts in Ihrem Code, um zu zeigen, dass Sie die signierte PDF-Datei an den Browser ausgeben. Machst du das? Wenn nicht, ist Ihre Antwort leer und verursacht möglicherweise diesen Fehler. –

+0

Kannst du mir ein Beispiel von Dingen über dich schreiben? Wenn du diese Zeilen meinst, $ pdf-> Image ('../ images/tcpdf_signature.png', 180, 60, 15, 15, 'PNG'); $ pdf-> setSignatureAppearance (180, 60, 15, 15); 'Ich habe es mit keinem Erfolg versucht – Mithrand1r

+0

Hauptsächlich sehe ich in Ihrem hier geposteten Code keinen Aufruf an' $ pdf-> Output ('name. pdf ',' I '); 'um das PDF tatsächlich an den Browser zu senden. Die Ausgabefunktion hat viele Optionen zum Speichern oder Senden der PDF-Datei unter [link] (http://www.tcpdf.org/doc/code/classTCPDF.html#a3d6dcb62298ec9d42e9125ee2f5b23a1) –

Antwort

9

Von dem, was ich sehe, wird der Fehler, den Sie erhalten, nicht durch den Code verursacht, den Sie in Ihrer Frage gepostet haben, da dieser Code straign und genau wie der in der TCPDF-Dokumentation gefunden wird. Sie können ein Beispiel für das Senden einer signierten pdf bei TCPDF Documentation

Der Code zu finden ist wie folgt:

require_once('../config/lang/eng.php'); 
require_once('../tcpdf.php'); 

// create new PDF document 
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 

// set document information 
$pdf->SetCreator(PDF_CREATOR); 
$pdf->SetAuthor('Nicola Asuni'); 
$pdf->SetTitle('TCPDF Example 052'); 
$pdf->SetSubject('TCPDF Tutorial'); 
$pdf->SetKeywords('TCPDF, PDF, example, test, guide'); 

// set default header data 
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 052', PDF_HEADER_STRING); 

// set header and footer fonts 
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); 
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); 

// set default monospaced font 
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 

//set margins 
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); 
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER); 
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER); 

//set auto page breaks 
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 

//set image scale factor 
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); 

//set some language-dependent strings 
$pdf->setLanguageArray($l); 

// --------------------------------------------------------- 

/* 
NOTES: 
- To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt 
- To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 
- To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes 
*/ 

// set certificate file 
$certificate = 'file://../config/cert/tcpdf.crt'; 

// set additional information 
$info = array(
    'Name' => 'TCPDF', 
    'Location' => 'Office', 
    'Reason' => 'Testing TCPDF', 
    'ContactInfo' => 'http://www.tcpdf.org', 
    ); 

// set document signature 
$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info); 

// set font 
$pdf->SetFont('helvetica', '', 12); 

// add a page 
$pdf->AddPage(); 

// print a line of text 
$text = 'This is a <b color="#FF0000">digitally signed document</b> using the default (example) <b>tcpdf.crt</b> certificate.<br />To validate this signature you have to load the <b color="#006600">tcpdf.fdf</b> on the Arobat Reader to add the certificate to <i>List of Trusted Identities</i>.<br /><br />For more information check the source code of this example and the source code documentation for the <i>setSignature()</i> method.<br /><br /><a href="http://www.tcpdf.org">www.tcpdf.org</a>'; 
$pdf->writeHTML($text, true, 0, true, 0); 

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
// *** set signature appearance *** 

// create content for signature (image and/or text) 
$pdf->Image('../images/tcpdf_signature.png', 180, 60, 15, 15, 'PNG'); 

// define active area for signature appearance 
$pdf->setSignatureAppearance(180, 60, 15, 15); 

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

// *** set an empty signature appearance *** 
$pdf->addEmptySignatureAppearance(180, 80, 15, 15); 

// --------------------------------------------------------- 

//Close and output PDF document 
$pdf->Output('example_052.pdf', 'I'); 

Beachten Sie, dass Sie benötigen Seiten zu Ihrem Dokument hinzufügen und dann den Ausgang() aufrufen Funktion in um tatsächlich eine Ausgabe an den Browser zu senden. Andernfalls werden dem Server keine Daten gesendet und Sie erhalten eine leere Antwort, die diesen Fehler verursacht.

Dieser Fehler kann auch dann auftreten, wenn Sie die Datei auf dem Server erstellen und sie in einem Ordner speichern, für den das Skript dann nicht berechtigt ist, auf den Browser zuzugreifen und es auszugeben.

Wenn Sie Google Chrome verwenden, um Ihre pdf zu betrachten, könnten Sie die Informationen auf diesem Fehler Chrome Empty Response Errors Group

Auch gibt es Berichte prüfen wollen, dass dieser Fehler durch falsch konfigurierte Zend Optimizer/Zend verursacht Wächter-Setups. Wenn keiner der oben genannten Fälle der Fall ist, würde ich sicherstellen, dass diese deaktiviert sind, um mit der Fehlersuche fortzufahren.

Wie Sie sehen können, ist dieser Fehler ein wenig unspezifisch und kann daher schwierig zu beheben sein.

+0

Gibt es eine Idee, wie man der Signatur einen Zeitstempel hinzufügt? applyTSA ist nicht in der Bibliothek implementiert :( – h2odev

Verwandte Themen