2017-12-07 27 views
0

tcpdf을 사용하여 PDF 파일을 생성하고 서명하십시오. 문제는 파일 Im이 "서명이 유효하지 않습니다"및 "이 문서에서 변경되었습니다"를 표시하므로 서명이 무효화됩니다.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입니다.

  1. openssl pkcs12 -in example_p12.p12 -out certificate.pem -nodes
  2. 빈 cert.crt 파일을 만듭니다

    나는 다음 단계를 수행하여 이러한 CRT와 키 파일을 생성합니다.
  3. 빈 cert_key.key 파일을 만듭니다.
  4. .pem의 인증서 영역을 crt 파일에 복사합니다.
  5. 인증서 키 영역을 .pem에서 키 파일로 복사합니다.

그래서 내가하는 일이 잘못되어있어,이 방법으로 작동해야하지만, 메신저가 올바른 인증서 파일을 사용하고 있는지, 아니면 두 개의 파일이나 다른 파일을 사용하고 있어야합니다. 다른 유형의 인증서 파일?

답변

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; 

그리고이 마법처럼 일했다 :)