You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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(需提前在服务器安装)完成转换,步骤如下:

  1. 前置准备

    • 服务器端安装ImageMagick工具
    • 安装并启用PHP的Imagick扩展(修改php.ini确保扩展加载)
  2. 修改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();
?>
  1. 注意事项
    • 若服务器未安装ImageMagick或Imagick扩展,转换逻辑会失效
    • 临时文件通过tempnam生成,避免文件名冲突,使用后立即删除
    • 可根据需求调整setImageCompressionQuality的参数值,平衡图片质量与大小

内容的提问来源于stack exchange,提问作者emiliorivas16

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:25:31