2016-08-17 98 views
0

我有任务使用TCPDF/FPDI创建一个PHP工具,该工具在添加证书的同时将现有的PDF转换为PDF/A标准。TCPDF生成的PDF不符合PDF/A标准

不幸的是,所有生成的PDF不符合PDF/A标准。我也尝试生成一个随机测试文档,如https://tcpdf.org/examples/example_065/所示,但该文档不符合要求。

这是我的代码:

public static function convertPdf($path) 
{ 
    $pdf = new \FPDI(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false, true); 


    $pagecount = $pdf->setSourceFile(ROOT . $path); 

    for ($i = 1; $i <= $pagecount; $i++) { 
     $tpl = $pdf->importPage($i); 
     $size = $pdf->getTemplateSize($tpl); 
     $orientation = $size['h'] > $size['w'] ? 'P':'L'; 
     $pdf->AddPage($orientation); 
     $pdf->useTemplate($tpl, null, null, $size['w'], $size['h'], true); 
    } 

    $pdf->SetCreator("Creator"); 
    $pdf->SetAuthor('Nicola Asuni'); 
    $pdf->SetTitle('My PDFA example'); 
    $pdf->SetSubject('TCPDF Tutorial'); 

    $certificatePath = 'file://' . ROOT . '/libs/TCPDF-master/examples/data/cert/tcpdf.crt'; 
    // set additional information 
    $info = array(
     'Name' => 'TCPDF', 
     'Location' => 'Office', 
     'Reason' => 'Testing TCPDF', 
     'ContactInfo' => 'http://www.tcpdf.org', 
    ); 

    $pdf->setSignature($certificatePath, $certificatePath, 'tcpdfdemo', '', 2, $info); 
    $pdf->addEmptySignatureAppearance(0, 0, 0, 0); 

    $pdf->Output('example_065.pdf', 'I'); 
} 

我用这个https://www.pdf-online.com/osa/validate.aspx来验证我的PDF。它生成此输出:

符合性pdfa-1b结果文档不符合PDF/A。详细信息 验证文件“testerrrrrr.pdf”是否符合等级pdfa-1b有 是EOF标记之后的数据。 pdfaExtension:schemas/[0] ::缺少 值类型为'Schema'的必填字段'property'。 pdfaExtension:schemas/ [0] ::在 值类型'Schema'中缺少必填字段'valueType'。 pdfaExtension:schemas/[1] ::缺少必需 值类型为'Schema'的字段'valueType'。 pdfaExtension:schemas/ [2] ::值类型'Schema'中缺少必需字段'valueType'。 外观字典不包含条目。密钥S的值为 透明度被禁止。该文件不符合 要求的标准。文件格式(标题,预告片,对象,外部参照, 流)已损坏。该文件包含透明度。 文档包含注释或表单字段,其中含有或不含 适当的外观。该文档的元数据缺失或者不一致或者不完整。完成。

+0

什么验证程序认为它无效,它抱怨什么? –

回答

0

通常:如果通过FPDI导入的文档不符合PDF/A标准(例如透明度),则结果将不会被成功验证。只需通过TCPDF设置一些PDF/A标志,不会使导入的页面PDF/A保持一致。

TCPDF伪造签名外观,因为外观写入页面内容流而真实外观为空(鉴于“外观字典不包含条目”)。

应该在TCPDF代码中添加缺少的属性(其他“验证器”不要抱怨它们)。

+0

谢谢你的回复。 TCPDFs代码中缺少哪些属性并应添加? –

+0

嗯......也许验证也是错误的。因为缺少的字段在那里(并且第一个视图不是所有提到的都是必需的)。这些字段是例如记录在[这里](http://www.pdfa.org/wp-content/uploads/2011/09/tn0009_xmp_extension_schemas_in_pdfa-1_2008-03-20.pdf)(第9页及以​​下)。 –