Редактирование метаданных в PDF для ADA с помощью PHP - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть несколько PDF-файлов, мне нужно добавить основной язык (который для нас всегда английский, поэтому (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 и сохранять их заново.

Я попытался найти API-интерфейс Adobe или библиотеку, которую я мог бы подключитьчтобы сделать эти незначительные правки.Все фреймворки, которые я видел, создают новые 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 /Catalog\n/Lang (en-us)", $pdf);
            file_put_contents($dir.'/'.$file, $pdf_str);
        }else{
            echo "Lang passed on ".$file.PHP_EOL;
        }
    }
 }


?>

1 Ответ

0 голосов
/ 15 апреля 2019

Вы никогда не должны заменять строки в файлах 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();
...