#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. Это выглядит очень многообещающе. Большое спасибо за ваш ответ!