背景
近期碰着了多个需求都涉及到pdf转为图片格式:医疗器材的PDF发票转图片展示和预览,体检报告转图片页面展示,互联网电子处方转图片移动端展示等。
在PHP中将PDF文件转换为图片格式,可以利用一些开源库,如Imagick和FPDF。下面是利用Imagick扩展的一个例子,它可以将PDF文件转换为图片。
把稳:Imagick在处理PDF时可能会受到Ghostscript的影响,下文有提到。

首先,请确保你的做事器上安装了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的路径。
实行结果: