【问题标题】:Problems signing pdf with TCPDF使用 TCPDF 签署 pdf 的问题
【发布时间】:2017-12-07 11:31:21
【问题描述】:

我正在使用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 和密钥文件:

  1. openssl pkcs12 -in example_p12.p12 -out certificate.pem -nodes
  2. 创建一个空的 cert.crt 文件。
  3. 创建一个空的 cert_key.key 文件。
  4. 将证书区域从 .pem 复制到 crt 文件中。
  5. 将证书密钥区域从 .pem 复制到密钥文件中。

所以,我不知道我做错了什么,它应该以这种方式工作,但我不确定我是否使用了正确的证书文件,或者我应该使用不同的证书文件,比如两个 pem 文件或其他文件。我应该使用其他类型的证书文件?

【问题讨论】:

    标签: php pdf ssl tcpdf


    【解决方案1】:

    解决方案是使用 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;
    

    这就像一个魅力:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 2019-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 2016-02-19
      相关资源
      最近更新 更多