TCPDF将数字签名添加到创建的pdf中 [英] TCPDF adding digital signature to the created pdf

查看:152
本文介绍了TCPDF将数字签名添加到创建的pdf中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个奇怪的问题.
一段时间以来,我一直在努力解决pdf数字签名问题,但它没有按我预期的那样工作.实际上,它根本不起作用.

我使用的代码与Examples 52页中发布的代码完全相同:

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:

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

第一个问题是关于

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

这是由于我没有设置执行cert目录的权限而引起的.但是在设置777魔术之后发生了.
从现在开始,我看不到错误是什么,并且看不到错误轨迹,但是:

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:

HTTP ERROR 324 (net::ERR_EMPTY_RESPONSE)

有人可以建议我一些事情吗?

anyone can suggest me something?

推荐答案

据我所知,您收到的错误不是由您在问题中张贴的代码引起的,因为该代码是明确的,并且与找到的代码完全相同在TCPDF文档中.您可以在 TCPDF文档

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

其中的代码如下:

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

请注意,您需要将页面添加到文档中,然后调用Output()函数,以便实际将任何输出发送到浏览器.否则,服务器将没有任何数据要发送,因此给您一个空响应,导致此错误.

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.

如果在服务器上创建文件并将其保存在脚本没有权限访问和输出到浏览器的文件夹中,也可能导致此错误.

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.

如果您正在使用Google Chrome浏览器查看pdf,则可能要在此查看有关此错误的信息

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

此外,有报告指出此错误是由错误配置的Zend Optimizer/Zend Guardian设置引起的.如果以上两种情况均不可行,我将确保将其停用以继续进行故障排除.

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.

如您所见,此错误不是特定于错误的,因此很难进行故障排除.

As you can see, this error is a bit non-specific and so can be difficult to troubleshoot.

这篇关于TCPDF将数字签名添加到创建的pdf中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆