Я конвертирую PDF
файлы в jpg
, PDF-файлы довольно сложны и состоят из множества изображений. Когда я конвертирую PDF, некоторые слои или части страниц отсутствуют. Например:
Вот скриншот из настольного приложения для чтения PDF
И вот та же часть результата конвертации:
Как видите, фон и эта вещь в сером поле отсутствуют.
Я пытался объединить слои и flattenimages
, также ($i = $i->flattenimages())
и результат остается тем же, некоторые части изображений / слоев отсутствуют.
//Редактировать:
Итак, вот код:
ini_set('max_execution_time', 600);
$f = './f_big.pdf';
$I = new Imagick;
$I->setresolution(144, 144);
$p = 0;
while(true){
try {
$I->readimage($f.'[' . $p . ']');
$attrs = $I->identifyimage();
$dpi = 1600 / ($attrs['geometry']['height'] / $attrs['resolution']['y']);
$I->setresolution($dpi, $dpi);
$I->readimage($f.'[' . $p . ']');
} catch (Exception $E) {
break;
}
$I->writeimage('./big-'.$p.'.jpg');
$I->clear();
++$p;
}
Проблема возникает с большими файлами, например 8Mb и 46 страниц. Но когда я использую те же файлы, но только с первыми двумя страницами, все работает просто отлично.
Файлы создаются с помощью InDesign, а отсутствующие слои являются PSD-файлами внутри проекта InDesign со многими слоями.
// Редактировать:
Итак, я обнаружил, что проблема с самими файлами. Файлы, которые хранятся в PDF версии 1.5 или выше, кодируются / хранятся не так, как в старой версии. Если я сохраню тот же файл в версии PDF 1.4, все будет работать нормально. Так что дело не в размерах, а в версии.
Я думаю, что лучшим решением будет конвертировать файл на сервере. Кто-нибудь может порекомендовать какую-нибудь библиотеку или решение для этого? Может быть оплачено.
Задача ещё не решена.
Других решений пока нет …