spatie / pdf-to-image
将PDF转换为图片
Requires
- php: ^8.2
- ext-imagick: *
Requires (Dev)
- pestphp/pest: ^2.34
This package is auto-updated.
Last update: 2024-09-14 17:04:06 UTC
README
此包提供了一种易于使用的类,用于将PDF转换为一张或多张图片。
需求
您应已安装Imagick和Ghostscript。有关Ghostscript相关问题和Imagick问题的更多信息,请参阅。
安装
该包可以通过composer安装,需要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 400px; height is calculated automatically ->save($pathToWhereImageShouldBeStored); // or: $pdf ->thumbnailSize(400, 300) // set thumbnail width to 400px and the height to 300px ->save($pathToWhereImageShouldBeStored);
设置输出图片宽度
$pdf->size(400) // set the width to 400px; height is calculated automatically ->save($pathToWhereImageShouldBeStored);
设置输出图片的宽度和高度
$pdf->size(400, 300) // set the width to 400px and the height to 300px ->save($pathToWhereImageShouldBeStored);
获取PDF的尺寸。这可以用来判断PDF是否具有极高的分辨率。
/** @var \Spatie\PdfToImage\DTOs\PageSize $size */ $size = $pdf->getSize(); $width = $size->width; $height = $size->height;
将所有页面保存为图片
$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使用Ghostscript。为此,Ghostscript的gs
命令应该可以从PHP进程访问。对于PHP CLI进程(例如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
二进制文件。
Imagick问题
如果您收到错误消息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
变更日志
请参阅 变更日志 了解最近更改的详细信息。
贡献
请参阅 贡献指南 了解详细信息。
安全漏洞
请查阅 我们的安全策略 了解如何报告安全漏洞。
鸣谢
许可证
MIT 许可证(MIT)。请参阅 许可证文件 了解更多信息。