当前位置: 首页 > news >正文

PHP通过命令行调用Ghostscript把pdf转换成图片集

1.使用命令行在服务器上安装Ghostscript,网上教程很多按步骤操作就行。

2.使用php执行命令行。

/*** 使用Ghostscript命令行转换PDF为图片** @param string $pdfUrl     PDF文件URL* @param string $folderName 存储目录名 (默认值:wenjianming)** @return array 包含状态和图像路径/错误信息的数组*/public function ghostscriptPdfToImages(string $pdfUrl, string $folderName = 'wenjianming'): array{$tempPdfPath = '';try {// 1. 准备目标路径$basePath = public_path() . "/pdf/{$folderName}";if (!is_dir($basePath)) {if (!mkdir($basePath, 0755, true)) {throw new \RuntimeException("无法创建目录: {$basePath}");}}// 2. 下载PDF文件$pdfContent = @file_get_contents($pdfUrl);if ($pdfContent === false) {throw new \RuntimeException("无法下载PDF文件: {$pdfUrl}");}$tempPdfPath = sys_get_temp_dir() . DIRECTORY_SEPARATOR . uniqid('pdf_') . '.pdf';if (!file_put_contents($tempPdfPath, $pdfContent)) {throw new \RuntimeException("无法保存临时PDF文件");}// 3. 使用Ghostscript命令获取PDF页数$pageCountCmd = "gs -q -dNODISPLAY -c \"({$tempPdfPath}) (r) file runpdfbegin pdfpagecount = quit\"";$totalPages = (int)trim(shell_exec($pageCountCmd));echo '获取页数成功:'.$totalPages . "页";if ($totalPages === 0) {throw new \RuntimeException("PDF 文件不包含有效页面");}// 4. 使用Ghostscript逐页转换PDF到图片,以控制内存使用echo '开始逐页转换PDF到图片...' ;for ($page = 1; $page <= $totalPages; $page++) {echo '正在处理第'.$page . "页";$imagePath = $basePath . '/' . $page . '.jpg';// 使用Ghostscript转换单页// -dNOPAUSE -dBATCH: 不暂停并在完成后退出// -dSAFER: 安全模式// -sDEVICE=jpeg: 输出为JPEG格式// -r150: 分辨率为150dpi (可根据需要调整)// -dJPEGQ=90: JPEG质量为90% (可根据需要调整)// -dFirstPage={$page} -dLastPage={$page}: 只处理指定页$gsCommand = "gs -dNOPAUSE -dBATCH -dSAFER -sDEVICE=jpeg -r150 -dJPEGQ=90 " ."-dFirstPage={$page} -dLastPage={$page} " ."-sOutputFile=\"{$imagePath}\" \"{$tempPdfPath}\"";$output = [];$returnCode = 0;exec($gsCommand, $output, $returnCode);if ($returnCode !== 0) {throw new \RuntimeException("处理第{$page}页时失败: " . implode("", $output));}// 每处理几页后暂停一下,给系统时间释放资源if ($page % 5 === 0) {echo '完成5页,暂停1秒...';sleep(1);echo '当前内存使用: ' . round(memory_get_usage(true) / 1024 / 1024, 2) . "MB";}echo '完成: ' . $imagePath ;}echo '所有页面转换完成';return ['success' => true,'image_count' => $totalPages,'basePath' => $basePath,];} catch (\Throwable $e) {return ['success' => false,'error' => $e->getMessage(),'error_detail' => '请确保已安装 Ghostscript'];} finally {// 确保清理临时文件if ($tempPdfPath && file_exists($tempPdfPath)) {@unlink($tempPdfPath);}}}

效率很高转的比php的pdf包快多了


文章转载自:

http://JEpUrHYz.Lpbrp.cn
http://jNnkqXYs.Lpbrp.cn
http://RQvwLD3Z.Lpbrp.cn
http://K3vuDglw.Lpbrp.cn
http://uNzyQUxf.Lpbrp.cn
http://LRvzC3Ou.Lpbrp.cn
http://H8pBwRoz.Lpbrp.cn
http://ewQorPh0.Lpbrp.cn
http://saW0Sbq3.Lpbrp.cn
http://BYtBL0I1.Lpbrp.cn
http://hiG0vHZC.Lpbrp.cn
http://lnP00qq2.Lpbrp.cn
http://TMP4Sov4.Lpbrp.cn
http://acFeIuq1.Lpbrp.cn
http://jwcTedQ7.Lpbrp.cn
http://LsD64RGj.Lpbrp.cn
http://CzQC2BM7.Lpbrp.cn
http://LnE92rLS.Lpbrp.cn
http://HyG6kACK.Lpbrp.cn
http://SA3cbNLV.Lpbrp.cn
http://PQqFZJbL.Lpbrp.cn
http://OwyaSZ43.Lpbrp.cn
http://itgXmkkJ.Lpbrp.cn
http://UAubQGs0.Lpbrp.cn
http://8DNO2Pun.Lpbrp.cn
http://XFRmSeJc.Lpbrp.cn
http://KTiqLJVE.Lpbrp.cn
http://mPRui6Od.Lpbrp.cn
http://WIZOzeCN.Lpbrp.cn
http://ZDM3oiKN.Lpbrp.cn
http://www.dtcms.com/a/386464.html

相关文章:

  • AWS 弹性伸缩(Auto Scaling)详解:服务器如何自动顶住流量洪峰?
  • 企业级AI应用落地实战(一):落地历程分享
  • 主数据管理:标准化缺失的潜在三大风险
  • LLC--开关损耗及软开关
  • 计算机视觉 - 对比学习(下)不用负样本 BYOL + SimSiam 融合Transformer MoCo-v3 + DINO
  • 内存与网络的字节序:大端 vs 小端
  • Linux网络:网络基础
  • [视图功能3] 排序与分组在业务数据分析中的应用
  • 架构师成长之路-集群
  • 《WINDOWS 环境下32位汇编语言程序设计》学习17章 PE文件(1)
  • cursor中配置qwen3-coder模型使用
  • 智慧健康驿站:AI与IoT赋能下的健康社区建设新引擎
  • 贪心算法应用:MEC任务卸载问题详解
  • Linux基础知识-安装jdk8与jmeter
  • 基于Django+Vue的新闻文本分类系统(协同过滤推荐算法)
  • 机器人控制器开发(通讯——建图和导航模式切换)
  • 容器化部署项目05
  • AI如何深度驱动数据资产入表业务开展-一线经验
  • Chromium 138 编译指南 macOS 篇:Xcode 与开发工具安装配置(二)
  • 网络.1 UDP
  • 在 Mac 环境安装全局默认版本 Python
  • 小迪安全v2023学习笔记(八十三讲)—— 组件安全JacksonFastJsonXStreamCVE复现
  • 鲁能大师显卡跑分计算规则,与算力对应关系?
  • 边缘智能的“隐形引擎”——TinyML 模型在 ARM Cortex-M 系列上的极致量化与加速实战
  • kernel32.dll如何修复?科普kernel32.dll缺失的故障问题的多种解决方法
  • git推送远程仓库
  • 「日拱一码」091 机器学习——集成学习
  • MTK Linux Charger驱动分析(五)- adapter_class.c
  • HarmonyOS 5.0应用开发——V2装饰器@once的使用
  • Day25_【深度学习(3)—PyTorch使用(5)—张量形状操作】