2013-04-19 18 views
5

Mam rodzaj dziwnego problemu.
Od pewnego czasu borykam się z problemem podpisu cyfrowego pdf i nie działa on tak, jak się spodziewam. Właściwie to w ogóle nie działa.

użyłem exacly sam kod jak jest zamieszczona na stronie Examples 52:TCPDF dodawanie podpisu cyfrowego do utworzonego pdf

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

Pierwszy problem był o

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

Spowodowane to było, bo nie ustawić uprawnienia do wykonywania cert katalog. Ale po tym, jak ustawiam magię, stanie się magia.
Od teraz nie widzę, co jest błąd, a ja nie widzę ślad błędu, ale:

HTTP ERROR 324 (net::ERR_EMPTY_RESPONSE) 

każdy może zaproponować mi coś?

+0

Wygląda na to, że Twój błąd nie występuje już przy korzystaniu z funkcji podpisywania tcpdf. Nie widzę niczego w kodzie, aby pokazać, że wypisujesz podpisany plik PDF do przeglądarki. Czy robisz tak? Jeśli nie, odpowiedź będzie pusta i prawdopodobnie spowoduje ten błąd. –

+0

Czy możesz pokazać mi przykład na temat pisania? jeśli masz na myśli te linie '$ pdf-> Image ('../ images/tcpdf_signature.png', 180, 60, 15, 15, 'PNG'); $ pdf-> setSignatureAppearance (180, 60, 15, 15); 'Zrobiłem to bez powodzenia – Mithrand1r

+0

Przede wszystkim nie widzę w twoim kodzie wysłanego tutaj połączenia z' $ pdf-> Output ('name. pdf "," I ");' w celu rzeczywistego wysłania pdf do przeglądarki. Funkcja wyjściowa ma wiele opcji zapisywania lub wysyłania pliku PDF udokumentowanego pod adresem [link] (http://www.tcpdf.org/doc/code/classTCPDF.html#a3d6dcb62298ec9d42e9125ee2f5b23a1) –

Odpowiedz

9

Z tego co widzę, błąd, który otrzymujesz, nie jest spowodowany przez kod, który opublikowałeś w swoim pytaniu, ponieważ kod ten jest straignforward i dokładnie taki, jak ten znaleziony w dokumentacji TCPDF. Można znaleźć przykład wysyłając podpisany pdf na TCPDF Documentation

Kod nie jest w następujący sposób:

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

pamiętać, że trzeba dodawać strony do dokumentu, a następnie wywołać funkcję Output() w aby faktycznie uzyskać dane wyjściowe wysyłane do przeglądarki. W przeciwnym razie serwer nie będzie miał żadnych danych do wysłania, więc daje pustą odpowiedź powodującą ten błąd.

Ten błąd może być również przyczyną, jeśli tworzysz plik na serwerze i zapisujesz go w folderze, który skrypt nie ma uprawnień do uzyskiwania dostępu i wysyłania do przeglądarki.

Jeśli używasz Google Chrome do przeglądania plików PDF, może chcesz sprawdzić informacje tutaj o tym błędzie Chrome Empty Response Errors Group

Ponadto, istnieją doniesienia, że ​​ten błąd został spowodowany przez nieprawidłowo skonfigurowana Zend Optimizer/Zend Ustawienia strażnika. Jeśli żadne z powyższych nie dotyczy, upewnię się, że są one dezaktywowane, aby kontynuować rozwiązywanie problemów.

Jak widać, ten błąd jest nieco niespecyficzny i może być trudny do rozwiązania.

+0

Każdy pomysł, jak dodać sygnaturę czasową do podpisu? applyTSA nie jest zaimplementowana w bibliotece :( – h2odev

Powiązane problemy