#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. Да, я тоже сталкивался с этим, но я получил ошибку. Можете ли вы отредактировать и дать правильный ответ с кодом, пожалуйста, это поможет мне понять. Спасибо.