Редактирование метаданных в PDF-файлах для ADA с помощью PHP

#php #pdf #exiftool

#php #PDF #exiftool

Вопрос:

У меня есть несколько PDF-файлов, в которые мне нужно добавить основной язык (который для нас всегда английский, so (en-us) в качестве словарной записи каталога документа) и поля заголовка, чтобы я мог заставить эти PDF-файлы проходить проверки ADA.

Мне немного повезло в PDF версии 1.4 с заменой строк во всем документе (через file_get_contents ) и переписыванием файла, чтобы я не потерял в нем то, что в нем есть, но в стандартах 1.5 и 1.6 PDF, похоже, внутренности даже чувствительны к пробелам и табуляции.

Я попытался использовать exiftool через shell_exec(), но, похоже, это работает только в PDF версии 1.4, все остальное будет установлено внутри PDF, но все равно не удастся выполнить сканирование из-за таких флагов, /Type/Catalog/ViewerPreferences<</DisplayDocTitle true>> которые, похоже, устанавливаются случайным образом внутри документа в версии 1.6.

Кто-нибудь пытался решить эту проблему до веб-версии? Я надеялся создать что-то, что решило бы некоторые проблемы, чтобы сократить необходимость открывать каждый отдельный из них в Adobe и повторно сохранять их.

Я попытался найти Adobe API или библиотеку, которые я мог бы подключить для внесения этих незначительных изменений. Все фреймворки, которые я видел, создают новые PDF-файлы, что означает, что все теги и альтернативный текст, которые мы вводим, будут потеряны, поэтому я, конечно, не хочу идти по пути Zend или чего-либо, что не будет ПРОСТО редактировать метаданные.

 <?php

 $dir = getcwd();   
 $files = scandir($dir);

 foreach($files as $file)
 {
    if(strpos($file, '.pdf') !== false)
    {
        $pdf = file_get_contents($dir.'/'.$file);
                // This seems to work for 1.4, but not anything else
        if(strpos($pdf,'/Lang') === false)
        {
            echo "Changing Lang on " .$file.PHP_EOL;
            $pdf_str = preg_replace("//Type /Catalog/", "/Type /Catalogn/Lang (en-us)", $pdf);
            file_put_contents($dir.'/'.$file, $pdf_str);
        }else{
            echo "Lang passed on ".$file.PHP_EOL;
        }
    }
 }


?>
  

Ответ №1:

Вы никогда не должны заменять строки в файлах PDF, потому что вы разрушите всю структуру файла, и приложение для чтения должно восстановить его во время открытия.

Мы предлагаем коммерческие инструменты для редактирования PDF-файлов на PHP. Ваша задача может быть выполнена с помощью компонента SetaPDF-Core:

 require_once('library/SetaPDF/Autoload.php');

$writer = new SetaPDF_Core_Writer_File('result.pdf');
$document = SetaPDF_Core_Document::loadByFilename('example.odf', $writer);

$catalog = $document->getCatalog();
$dict = $catalog->getDictionary();
$dict['Lang'] = new SetaPDF_Core_Type_String('en-us');

$document->save()->finish();
  

Комментарии:

1. Это выглядит очень многообещающе. Большое спасибо за ваш ответ!