TCPDF adds digital signature to generated pdf

I have some kind of weird problem.
I am struggling with the pdf digital signature problem, as it does not work as I expect. In fact, this does not work at all.

I used exacly the same code as published on Examples 52 page:

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

The first problem was about

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

This is because I did not set privileges to execute the cert directory. But after I installed 777 , magic will happen.
From now on, I don’t see what the error is, and I don’t see the error track, but:

 HTTP ERROR 324 (net::ERR_EMPTY_RESPONSE) 

Can anyone suggest something for me?

+5
source share
1 answer

From what I see, the error you are getting is not caused by the code you posted in your question, as this code is strict and exactly the same as in the TCPDF documentation. You can find an example of sending a signed pdf in the TCPDF Documentation

The code is as follows:

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

Note that you need to add pages to your document, and then call the Output () function to actually get any output sent to the browser. Otherwise, the server will not have any data to send and therefore will give you an empty answer that causes this error.

This error can also be the reason if you create a file on the server and save it in a folder in which the script does not have access and output permissions to the browser.

If you use Google Chrome to view your PDF file, you can check here for information about this error. Chrome Blank Response Error Group

There are also reports that this error was caused by improperly configured Zend Optimizer / Zend Guardian settings. If none of the above cases occur, I would make sure they are deactivated to continue troubleshooting.

As you can see, this error is a little non-specific and therefore it can be difficult to troubleshoot.

+9
source

Source: https://habr.com/ru/post/957817/


All Articles