Как создать миниатюру из загрузки PDF в laravel

Я пытаюсь создать миниатюру PDF-файла, который я загружаю в laravel, миниатюра должна быть первой страницей PDF-файла. Прямо сейчас я вручную загружаю изображение, чтобы сделать миниатюру такой:

if (request()->has('pdf')) {
            $pdfuploaded = request()->file('pdf');
            $pdfname = $request->book_name . time() . '.' . $pdfuploaded->getClientOriginalExtension();
            $pdfpath = public_path('/uploads/pdf');
            $pdfuploaded->move($pdfpath, $pdfname);
            $book->book_file = '/uploads/pdf/' . $pdfname;
            $pdf = $book->book_file;
        }

if (request()->has('cover')) {
            $coveruploaded = request()->file('cover');
            $covername = $request->book_name . time() . '.' . $coveruploaded->getClientOriginalExtension();
            $coverpath = public_path('/uploads/cover');
            $coveruploaded->move($coverpath, $covername);
            $book->card_image = '/uploads/cover/' . $covername;
            
        }

Это может быть утомительно при вводе многих данных, которые я хочу создать автоматически. Я искал много ответов, но не могу найти конкретный laravel. Я пытался использовать скрипт ImageMagic и Ghost, но не смог найти решение и подходящую роль для реализации.


person Riwaj Chalise    schedule 14.09.2020    source источник


Ответы (1)


Извините, пока не могу комментировать! Вы можете использовать spatie/pdf-to-image для анализа первой страницы как изображения, когда файл загружен и сохраните его в своем хранилище, а ссылку сохраните в своей базе данных.

Сначала вам нужно установить и настроить php-imagick и ghostscript. При возникновении проблем с установкой ghostscript вы можете обратиться к этому. Затем добавьте пакет composer require spatie/pdf-to-image.

Согласно вашему образцу кода:

if (request()->has('pdf')) {
  $pdfuploaded = request()->file('pdf');
  $pdfname = $request->book_name . time() . '.' . $pdfuploaded->getClientOriginalExtension();
  $pdfpath = public_path('/uploads/pdf');
  $pdfuploaded->move($pdfpath, $pdfname);
  $book->book_file = '/uploads/pdf/' . $pdfname;
  $pdf = $book->book_file;

  $pdfO = new Spatie\PdfToImage\Pdf($pdfpath . '/' . $pdfname);
  $thumbnailPath = public_path('/uploads/thumbnails');
  $thumbnail = $pdfO->setPage(1)
    ->setOutputFormat('png')
    ->saveImage($thumbnailPath . '/' . 'YourFileName.png');
  // This is where you save the cover path to your database.
}
person Suraj Jadhav    schedule 14.09.2020
comment
Да, я тоже сталкивался с этим, но я получил ошибку. Можете ли вы отредактировать и написать правильный ответ с кодом, пожалуйста, это поможет мне понять. Спасибо. - person Riwaj Chalise; 14.09.2020