如何用PHP与dompdf将动态生成的PDF转为JPG并实现下载
需求:将动态生成的HTML转为JPG并直接下载
当前通过dompdf可将HTML生成PDF并自动下载,现需改为生成JPG并触发下载。现有代码如下:
按钮页面(button.php)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Button download</title> </head> <body> <?php $name = "Mike"; ?> <button><a href="generate.php?name=<?php echo $name; ?>">BUTTON</a></button> </body> </html>
原生成页面(generate.php)
<?php $name = $_GET['name']; ?> <?php ob_start(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Generate file</title> </head> <body> <?php echo $name; ?> </body> </html> <?php $html = ob_get_clean(); require_once 'dompdf/autoload.inc.php'; use Dompdf\Dompdf; $dompdf = new Dompdf(); $options = $dompdf->getOptions(); $options->set(array('isRemoteEnabled' => true)); $dompdf->setOptions($options); $dompdf->loadHtml($html); $dompdf->render(); $dompdf->stream("file.pdf", array("Attachment" => true)); ?>
解决方案
Dompdf本身不支持直接将PDF转为JPG,需借助ImageMagick(需提前在服务器安装)完成转换,步骤如下:
前置准备
- 服务器端安装ImageMagick工具
- 安装并启用PHP的Imagick扩展(修改php.ini确保扩展加载)
修改generate.php代码
替换原PDF输出逻辑为PDF转JPG并下载的代码:
<?php $name = $_GET['name']; ob_start(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Generate file</title> </head> <body> <?php echo $name; ?> </body> </html> <?php $html = ob_get_clean(); require_once 'dompdf/autoload.inc.php'; use Dompdf\Dompdf; $dompdf = new Dompdf(); $options = $dompdf->getOptions(); $options->set(array('isRemoteEnabled' => true)); $dompdf->setOptions($options); $dompdf->loadHtml($html); $dompdf->render(); // 获取生成的PDF内容 $pdfContent = $dompdf->output(); // 创建临时PDF文件 $tempPdfPath = tempnam(sys_get_temp_dir(), 'pdf_temp'); file_put_contents($tempPdfPath, $pdfContent); // 使用Imagick转换PDF为JPG $imagick = new Imagick(); $imagick->readImage($tempPdfPath); $imagick->setImageFormat('jpg'); $imagick->setImageCompressionQuality(90); // 调整JPG质量,范围0-100 // 输出JPG并触发下载 header('Content-Type: image/jpeg'); header('Content-Disposition: attachment; filename="file.jpg"'); echo $imagick; // 清理临时文件与资源 unlink($tempPdfPath); $imagick->clear(); $imagick->destroy(); ?>
- 注意事项
- 若服务器未安装ImageMagick或Imagick扩展,转换逻辑会失效
- 临时文件通过
tempnam生成,避免文件名冲突,使用后立即删除 - 可根据需求调整
setImageCompressionQuality的参数值,平衡图片质量与大小
内容的提问来源于stack exchange,提问作者emiliorivas16
相关产品推荐
相关产品推荐

