我正在使用tcpdf生成pdf文件并对其进行签名。问题是我得到的文件显示“符号无效”和“已在此文档中进行了更改”,因此符号无效。代码如下:
$pdf->SetProtection(array('copy'), '', null, 0, null);
$pdf->SetMargins(0, 0, 0, true);
$pdf->SetHeaderMargin(0);
$pdf->SetFooterMargin(0);
$pdf->SetAutoPageBreak(false, 0);
$pdf->AddPage('L');
$pdf->Image($imagen, -7, 1, 310, 210, '', '', '', false, 300, '', false, false, 0);
if(!empty($imagentrasera)){
$pdf->AddPage('L');
$pdf->Image($imagentrasera, -7, 1, 310, 210, '', '', '', false, 300, '', false, false, 0);
}
if(!empty($certificado_digital)){
// PENDIENTE DE TERMINAR
$info = array(
'Name' => __('Certificado PDF',true),
'Location' => '',
'Reason' => '',
'ContactInfo' => '',
);
//var_dump($_SERVER['DOCUMENT_ROOT']);
// HAY QUE RETOCAR¡¡¡
$certificado_crt = 'file://'.$_SERVER['DOCUMENT_ROOT'].Configure::read('directorioinstalacion').'app/webroot/Documentos/certificados/'.$certificado_digital;
$certificado_key = 'file://'.$_SERVER['DOCUMENT_ROOT'].Configure::read('directorioinstalacion').'app/webroot/Documentos/certificados/'.$certificado_key;
$pdf->setSignature($certificado_crt,$certificado_key, '', '', 1, $info);
}
echo $pdf->Output(__('Certificado',true).'.pdf', 'I');
我以this示例页面生成的p12为例。传递给setSignature
的参数是$certificate_crt
和$certificate_key
。
我按照以下步骤生成了这些crt和密钥文件:
openssl pkcs12 -in example_p12.p12 -out certificate.pem -nodes
所以,我不知道我做错了什么,它应该这样工作,但我不确定我使用正确的证书文件或我应该使用不同的像两个pem文件或别的东西..我应该使用其他类型的证书文件?
答案 0 :(得分:0)
解决方案是使用tcpdf在输出函数上使用S选项。
所以我做的是:
$content = $pdf->Output(__('Certificado',true).'.pdf', 'S');
$file = fopen("Certificado ".$id_usucert.".pdf", "w+");
fwrite($file, $content);
fclose($file);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename("Certificado ".$id_usucert.".pdf").'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize("Certificado ".$id_usucert.".pdf"));
readfile("Certificado5.pdf");
//Una vez lo hemos bajado lo eliminamos del servidor
unlink("Certificado ".$id_usucert.".pdf");
exit;
这就像一个魅力:)