背景
近期遇到了多个需求都涉及到pdf转为图片格式:医疗器材的PDF发票转图片展示和预览,体检报告转图片页面展示,互联网电子处方转图片移动端展示等。
在PHP中将PDF文件转换为图片格式,可以使用一些开源库,如Imagick和FPDF。下面是使用Imagick扩展的一个例子,它可以将PDF文件转换为图片。
注意:Imagick在处理PDF时可能会受到Ghostscript的影响,下文有提到。
Imagick扩展
首先,请确保你的服务器上安装了Imagick扩展,并且支持PDF格式。安装Imagick通常可以通过PECL或者直接从源代码编译。
以下是一个通用的函数,用于将PDF文件转换为图片:
function pdfToImage($pdfPath,$outputPath, $format = 'png',$resolution = 300) {
if (!extension_loaded('imagick')) {
throw new Exception('Imagick extension not installed.');
}
if (!file_exists($pdfPath)) {
throw new Exception("File not found: $pdfPath");
}
$imagick = new Imagick();
// 设置Imagick的PDF分辨率
$imagick->setResolution($resolution, $resolution);
// 读取PDF文件
$imagick->readImage($pdfPath);
// 循环处理每一页
foreach ($imagick as$index => $image) {
// 设置输出格式
$image->setImageFormat($format);
// 保存图片
$image->writeImage($outputPath . DIRECTORY_SEPARATOR . "page-$index.$format");
}
// 清理内存
$imagick->destroy();
}
// 使用示例
$pdfPath = 'path/to/your/pdf/file.pdf';$outputPath = 'path/to/output/folder';
pdfToImage($pdfPath,$outputPath);
这个函数接受PDF文件的路径、输出图片的目录、图片格式和分辨率作为参数。它将PDF的每一页转换成单独的图片,并保存在指定的目录中。
// 将pdf文件转化为多张png图片
function pdf2png(string $pdf, string $path)
{
$return = [];
if (!extension_loaded('imagick')) {
return false;
}
if (!file_exists($pdf)) {
return false;
}
$im = new Imagick();
$im->setResolution(120, 120);
$im->setCompressionQuality(100);
$im->readImage($pdf);
foreach ($im as $k => $v) {
$v->setImageFormat('png');
$fileName = $path . md5($k . time()) . '.png';
if ($v->writeImage($fileName)) {
$return[] = $fileName;
}
}
return $return;
}
Ghostscript
注意:Imagick在处理PDF时可能会受到Ghostscript的影响,因为Imagick底层使用Ghostscript来渲染PDF。确保你的服务器上安装了Ghostscript,并且Imagick与之版本兼容。
如何在服务器上如何安装与Imagick兼容的Ghostscript
更新系统包列表:
sudo apt-get update # 对于Debian/Ubuntu系统
sudo yum update # 对于RedHat/CentOS系统
安装Ghostscript
sudo apt-get install ghostscript # 对于Debian/Ubuntu系统
sudo yum install ghostscript # 对于RedHat/CentOS系统
确认安装
ghostscript --version
安装Imagick: 如果你的服务器上还没有安装Imagick,你可以通过PECL或者源代码编译来安装它。
sudo pecl install imagick
安装完成后,你需要在php.ini文件中启用Imagick扩展。
测试:
通过运行一个简单的PHP脚本测试Imagick是否能够正确地使用
<?php
$imagick = new Imagick();
$imagick->setResolution(300, 300);
$imagick->readImage('example.pdf');
$imagick->writeImage('output.png');
$imagick->destroy();
?>
如果你遇到了兼容性问题,可能需要安装特定版本的Ghostscript或者重新编译Imagick。确保你查看Imagick和Ghostscript的官方文档以获取最新的兼容性信息和建议。
在Windows服务器上,你可能需要下载Ghostscript的二进制安装程序并安装它。然后,你需要确保Imagick能够找到Ghostscript的安装位置。这可能需要编辑环境变量或者在Imagick的配置文件中指定Ghostscript的路径。
执行结果:
本文暂时没有评论,来添加一个吧(●'◡'●)