2017-12-07 30 views
0

Im tcpdfを使用してpdfファイルを生成して署名します。問題は、ファイルImが "署名は有効ではありません"と "変更がこの文書で行われました"と表示され、署名が無効になることです。TCPDFで署名する際の問題

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

およびIMを例としてthis例ページから生成されたP12を使用して次のようにコードがあります。 setSignatureに渡すパラメータは、$certificate_crt$certificate_keyです。

私は、これらのCRTや手順、次のキーファイルを生成:

  1. openssl pkcs12 -in example_p12.p12 -out certificate.pem -nodes
  2. が空cert.crtファイルを作成します。
  3. 空のcert_key.keyファイルを作成します。
  4. 証明書ゾーンを.pemファイルからcrtファイルにコピーします。
  5. 証明書キーゾーンを.pemからキーファイルにコピーします。

私は間違っていることを知っていません。この方法では動作するはずですが、私は正しい証明書ファイルを使用していますか、または2つの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; 

そして、これは魅力のように働いた:)

関連する問題