编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

php将pdf文件转为图片格式

wxchong 2024-06-14 13:30:59 开源技术 12 ℃ 0 评论


背景

近期遇到了多个需求都涉及到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的路径。

执行结果:


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表