需要先安装php的imagick扩展,两种方式,第一种是使用php,第二种是使用命令执行
随便用哪种执行需要修改nginx配置文件增加:proxy_read_timeout 600s;使其链接60秒后不断,不然pdf一旦过大60秒无法完成工作就断开链接了
$pdfFile = './public/123.pdf'; // PDF文件路径
$outputDir = './public/pdf/'; // 输出目录
// 确保Imagick扩展已启用
if (!extension_loaded('imagick')) {
return abort('需要启用Imagick扩展');
}
// 创建Imagick对象
$imagick = new \Imagick();
// 设置分辨率为300 DPI
$imagick->setResolution(300, 300);
// 打开PDF文件
$imagick->readImage($pdfFile);
// 遍历每一页并保存为图片
foreach ($imagick as $key => $imag) {
// 设置图片格式和质量
$imag->setImageFormat('jpeg');
$imag->setCompressionQuality(100);
// 构建图片输出路径
$outputFile = $outputDir . 'page-' . ($key + 1) . '.jpg';
// 写入图片文件
$imag->writeImage($outputFile);
}
// 清理资源
$imagick->clear();
$imagick->destroy();
return 'PDF转换成图片成功。';
// PDF文件路径
$pdfFile = './public/123456.pdf';
// 输出图片的路径(替换%d为页面索引,convert会自动处理)
$outputDir = './public/pdf/';
// 确保输出目录存在
if (!is_dir($outputDir)) {
mkdir($outputDir, 0777, true);
}
// 调用convert命令,将PDF转换为PNG图片
// 注意:这里使用了-density参数来设置DPI,你可以根据需要调整
$command = "convert -density 300 $pdfFile $outputDir/output_%d.jpg";
// 执行命令
exec($command, $output, $returnVar);
if ($returnVar === 0) {
return "pdf转图片成功";
} else {
echo "错误:";
print_r($output);
}