php TCPDF 将数字签名添加到创建的 pdf
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/16100109/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
TCPDF adding digital signature to the created pdf
提问by Mithrand1r
I have kind of weird problem.
I'm struggling with a pdf
digital signature problem since a while and it did't working as I expect. Actually it doesn't work at all.
I used exacly same code as is posted in the Examples 52
page:
我有一些奇怪的问题。一段时间以来,
我一直在努力解决pdf
数字签名问题,但它没有按我预期的那样工作。实际上它根本不起作用。
我使用了与Examples 52
页面中发布的完全相同的代码:
// 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);
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
It was caused because I did not set privileges to execute cert
directory. But after I set 777
magic happen.
From now on I do not see what is the error, and I do not see the error track but:
这是因为我没有设置执行cert
目录的权限。但是在我设置777
魔法之后。
从现在开始,我看不到错误是什么,也看不到错误轨迹,但是:
HTTP ERROR 324 (net::ERR_EMPTY_RESPONSE)
anyone can suggest me something?
任何人都可以给我建议吗?
回答by Reid Johnson
From what I see, the error you are recieving is not caused by the code that you have posted in your question as that code is straignforward and exactly like that found in the TCPDF documentation. You can find an example of sending a signed pdf at TCPDF Documentation
从我看来,您收到的错误不是由您在问题中发布的代码引起的,因为该代码很直接,并且与 TCPDF 文档中的代码完全一样。您可以在TCPDF 文档中找到发送签名 pdf 的示例
The code there 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 in order to actually get any output sent to the browser. Otherwise, the server will not have any data to send and so give you an empty response causing this error.
请注意,您需要向文档添加页面,然后调用 Output() 函数,以便实际将任何输出发送到浏览器。否则,服务器将没有任何数据要发送,因此会给您一个导致此错误的空响应。
This error can also be cause if you are creating the file on the server and saving it in a folder that your script then doesn't have the permissions to access and output to the browser.
如果您在服务器上创建文件并将其保存在您的脚本没有权限访问和输出到浏览器的文件夹中,也可能导致此错误。
If you are using Google Chrome to view your pdf, you might want to check out the information here on this error Chrome Empty Response Errors Group
如果您使用谷歌浏览器查看您的 pdf,您可能需要在此处查看有关此错误Chrome Empty Response Errors Group 的信息
Also, there are reports that this error has been caused by incorrectly configured Zend Optimizer/Zend Guardian setups. If neither of the above is the case, I would make sure these are deactivated to continue troubleshooting.
此外,有报告称此错误是由错误配置的 Zend Optimizer/Zend Guardian 设置引起的。如果以上两种情况都不是,我会确保禁用这些以继续进行故障排除。
As you can see, this error is a bit non-specific and so can be difficult to troubleshoot.
如您所见,此错误有点不具体,因此很难排除故障。