Этот пакет предоставляет простой в использовании класс для преобразования PDF-файла в одно или несколько изображений.
У вас должны быть установлены Imagick и Ghostscript. Дополнительные сведения см. в разделе «Проблемы с Ghostscript и Imagick».
Пакет можно установить через композитор и требует PHP 8.2+:
composer require spatie/pdf-to-image
Если вы используете PHP < 8.2, используйте версию 2.0 этого пакета.
Преобразовать PDF в изображение очень просто.
$ pdf = new Spatie PdfToImage Pdf ( $ pathToPdf );
$ pdf -> save ( $ pathToWhereImageShouldBeStored );
Если имя файла, которое вы передаете в saveImage
имеет расширения jpg
, jpeg
, png
или webp
, изображение будет сохранено в этом формате; в противном случае выходной формат будет jpg
.
Метод save()
возвращает массив с именами файлов сохраненных изображений, если сохранено несколько изображений, в противном случае возвращает строку с путем к сохраненному изображению.
Получите общее количество страниц в PDF:
/** @var int $numberOfPages */
$ numberOfPages = $ pdf -> pageCount ();
Проверьте, является ли тип файла поддерживаемым выходным форматом:
/** @var bool $isSupported */
$ isSupported = $ pdf -> isValidOutputFormat ( ' jpg ' );
По умолчанию будет отображаться только первая страница PDF-файла. Чтобы отобразить другую страницу, вызовите метод selectPage()
:
$ pdf -> selectPage ( 2 )
-> save ( $ pathToWhereImageShouldBeStored ); //saves the second page
Или выберите несколько страниц с помощью метода selectPages()
:
$ pdf -> selectPages ( 2 , 4 , 5 )
-> save ( $ directoryToWhereImageShouldBeStored ); //saves the 2nd, 4th and 5th pages
Измените формат вывода:
$ pdf -> format ( Spatie PdfToImage Enums OutputFormat :: Webp )
-> save ( $ pathToWhereImageShouldBeStored ); //the saved image will be in webp format
Установите качество вывода (качество сжатия) от 0 до 100:
$ pdf -> quality ( 90 ) // set an output quality of 90 %
-> save ( $ pathToWhereImageShouldBeStored );
Установите выходное разрешение DPI:
$ pdf -> resolution ( 300 ) // resolution of 300 dpi
-> save ( $ pathToWhereImageShouldBeStored );
Укажите размер миниатюры выходного изображения:
$ pdf
-> thumbnailSize ( 400 ) // set thumbnail width to 400 px; height is calculated automatically
-> save ( $ pathToWhereImageShouldBeStored );
// or:
$ pdf
-> thumbnailSize ( 400 , 300 ) // set thumbnail width to 400 px and the height to 300 px
-> save ( $ pathToWhereImageShouldBeStored );
Установите ширину выходного изображения:
$ pdf -> size ( 400 ) // set the width to 400 px; height is calculated automatically
-> save ( $ pathToWhereImageShouldBeStored );
Установите ширину и высоту выходного изображения:
$ pdf -> size ( 400 , 300 ) // set the width to 400 px and the height to 300 px
-> save ( $ pathToWhereImageShouldBeStored );
Получите размеры PDF-файла. Это можно использовать для определения того, имеет ли PDF-файл чрезвычайно высокое разрешение.
/** @var SpatiePdfToImageDTOsPageSize $size */
$ size = $ pdf -> getSize ();
$ width = $ size -> width ;
$ height = $ size -> height ;
Примечание
$directoryToWhereImagesShouldBeStored должен быть существующим каталогом.
Сохраните все страницы в изображения:
$ pdf -> saveAllPages ( $ directoryToWhereImagesShouldBeStored );
Установите метод объединения слоев для Imagick:
$ pdf -> layerMethod ( Spatie PdfToImage Enums LayerMethod :: Merge );
// or disable layer merging:
$ pdf -> layerMethod ( Spatie PdfToImage Enums LayerMethod :: None );
Установите цвет фона выходного изображения:
$ pdf -> backgroundColor ( ' white ' ) // simple text for ' white ' color
-> save ( $ pathToWhereImageShouldBeStored );
$ pdf -> backgroundColor ( ' #fff ' ) // code for ' white ' color
-> save ( $ pathToWhereImageShouldBeStored );
$ pdf -> backgroundColor ( ' rgb(255,255,255) ' ) // rgb for ' white ' color
-> save ( $ pathToWhereImageShouldBeStored );
Этот пакет использует Ghostscript через Imagick. Чтобы это работало, команда Ghostscripts gs
должна быть доступна из процесса PHP. Для процесса CLI PHP (например, асинхронных заданий, команд и т. д. Laravel) это обычно уже так.
Однако для PHP на FPM (например, при запуске этого пакета «в браузере») вы можете столкнуться со следующей проблемой:
Uncaught ImagickException: FailedToExecuteCommand 'gs'
Это можно исправить, добавив следующую строку в конец файла php-fpm.conf
и перезапустив PHP FPM. Если вы не уверены, где находится файл php-fpm.conf
вы можете проверить phpinfo()
. Если вы используете Laravel Valet, файл php-fpm.conf
будет расположен в каталоге /usr/local/etc/php/YOUR-PHP-VERSION
.
env[PATH] = /usr/local/bin:/usr/bin:/bin
Это укажет PHP FPM искать двоичный файл gs
в нужных местах.
Если вы получаете сообщение об ошибке с сообщением attempt to perform an operation not allowed by the security policy 'PDF'
, вам может потребоваться добавить следующую строку в файл policy.xml
. Этот файл обычно находится в /etc/ImageMagick-[VERSION]/policy.xml
, например /etc/ImageMagick-7/policy.xml
.
< policy domain = " coder " rights = " read | write " pattern = " PDF " />
spatie/pdf-to-image
использует структуру PEST для модульных тестов. Их можно запустить с помощью следующей команды:
./vendor/bin/pest
Пожалуйста, посетите CHANGELOG для получения дополнительной информации о том, что изменилось за последнее время.
Пожалуйста, смотрите ВКЛАД для получения подробной информации.
Пожалуйста, ознакомьтесь с нашей политикой безопасности, чтобы узнать, как сообщать об уязвимостях безопасности.
Лицензия MIT (MIT). Пожалуйста, смотрите файл лицензии для получения дополнительной информации.