2016-08-17 8 views
0

У меня есть задача создать PHP-инструмент с использованием TCPDF/FPDI, который использует существующие 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. Подробности Подтверждающий файл "testerrrrr.pdf" для уровня соответствия pdfa-1b - это данные после маркера EOF. pdfaExtension: schemas/[0] :: Отсутствует Обязательное поле 'property' в типе значения 'Schema'. pdfaExtension: schemas/ [0] :: Отсутствует обязательное поле 'valueType' в тип значения 'Schema'. pdfaExtension: schemas/[1] :: Отсутствует необходимый Поле «valueType» в типе значения «Схема». pdfaExtension: schemas/ [2] :: Отсутствует обязательное поле 'valueType' в типе значения 'Schema'. Словарь внешнего вида не содержит записи. Ключ S имеет значение Прозрачность, которая запрещена. Документ не соответствует запрошенному стандарту . Формат файла (заголовок, трейлер, объекты, xref, потоков) поврежден. Документ содержит прозрачность. Документ содержит аннотации или поля формы с неопределенным или без соответствующих изображений. Метаданные документа отсутствуют или непоследовательны или повреждены. Готово.

+0

Какой валидатор говорит, что он недействителен и на что он жалуется? –

ответ

0

Обычно: если документ, импортированный через FPDI, не соответствует требованиям PDF/A (например, с прозрачностью), результат никогда не будет успешно проверен. Просто установив некоторые флаги PDF/A через TCPDF, не создайте импортированные страницы PDF/A.

TCPDF подделывает внешний вид подписи, поскольку внешний вид записывается в поток контента страниц, а реальный внешний вид пуст (см. «Словарь внешнего вида не содержит записи»).

Недопустимые атрибуты должны быть добавлены в код TCPDF (другие «валидаторы» не жалуются на них).

+0

Благодарим вас за ответ. Какие атрибуты отсутствуют и должны быть добавлены в код TCPDF? –

+0

Mmmhh ... может быть, и проверка неверна. Поскольку отсутствуют поля (и для первого вида не все упомянутые не требуются). Эти поля являются, например, документально [здесь] (http://www.pdfa.org/wp-content/uploads/2011/09/tn0009_xmp_extension_schemas_in_pdfa-1_2008-03-20.pdf) (страница 9 и далее). –