Управление большими файлами PDF в php и / или в symfony - PullRequest
0 голосов
/ 11 июля 2019

У меня проблема с 2 недель. Я работаю над новостной системой онлайн. Файлы новостей PDF имеют большой размер (например, 150 МБ). В результате из-за проблемы с объемом подключения пользователи не смогут легко загрузить эти файлы для чтения. В качестве решения я решил разделить файл PDF на несколько сжатых изображений небольших размеров (в среднем 150 КБ) и создать новый файл PDF небольшого размера. Вот скрипт с библиотекой PdfToImage и Imagick:

<?php

ini_set('max_execution_time', 1000);

require __DIR__.'/vendor/autoload.php';


function compress($path) {
    $im = new Imagick($path);

    $im->optimizeImageLayers();

    $im->setImageCompression(Imagick::COMPRESSION_JPEG);
    $im->setImageCompressionQuality(25);

    $im->writeImages($path, true);
}


$pdf = new Spatie\PdfToImage\Pdf('filePDF.pdf');

foreach (range(1, $pdf->getNumberOfPages()) as $pageNumber) {
    $path = './images/page'.$pageNumber.'jpg';

    $pdf->setPage($pageNumber)
        ->saveImage($path);

    compress($path);
} 

// Images to pdf
$i = 1;
$path = './images/page';
$images = array();

while(true) {
    $filename = $path . $i . 'jpg';
    if(!file_exists($filename)) {
        break;
    }

    $images[] = $filename;
    $i++;
}

$pdf = new Imagick($images);
$pdf->setImageFormat('pdf');
$pdf->writeImages('output.pdf', true);

echo "Completed...";
?>

С этим решением я столкнулся с несколькими проблемами:

  • Для больших файлов этот скрипт занимает много времени
  • Качество изображений внутри файла PDF (созданного файла PDF) теряется, а содержание неясно.
  • Максимальное время выполнения сценария php зависит от размера изображения.

Пожалуйста, я хотел бы получить вашу помощь для решения этой проблемы. Пожалуйста, я бы хотел, чтобы вы посоветовали мне возможное решение. Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...