Как сгенерировать эскиз из загруженного PDF в laravel

#php #laravel #pdf #laravel-controller

#php #laravel #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 script, но не смог найти решение и подходящую роль для реализации.

Ответ №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 SpatiePdfToImagePdf($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.
}
  

Комментарии:

1. Да, я тоже сталкивался с этим, но я получил ошибку. Можете ли вы отредактировать и дать правильный ответ с кодом, пожалуйста, это поможет мне понять. Спасибо.