使用PHP从PDF中提取图像

 l季莫_339 发布于 2023-02-12 17:05

问题是客户想要上传带有图像的pdf,作为一次批量处理多个图像的方式.

我已经环顾四周,开箱即用PHP无法阅读PDF文件.

我有什么选择?

我已经知道主机没有安装imageMagick或任何pdf库,并且该exec功能被禁用.我猜,这基本上让我无需工作.

有没有人知道是否有一个可以做到这一点的在线服务,有各种各样的api?

谢谢你

1 个回答
  • AFAIK,没有PHP模块可以做到.有一个命令行工具,pdfimages(xpdf的一部分).作为参考,这是如何工作的:

    pdfimages -j source.pdf image
    

    这将从source.pdf中提取所有图像为image-000.jpg,image-001.jpg等.请注意,输出格式始终为Jpeg.

    可能的选择

    作为一个命令行工具,你需要exec(或者system,passthru任何执行PHP内置函数命令).由于您的环境没有,我看到四个选项:

      请求为您打开exec(您的托管服务提供商可以限制您执行单个命令的操作)

      更改设计 - ZIP上传怎么样?

      使用pdfimages作为模型的源代码滚动您自己

      pdfimages做繁重的,由你控制远程主机上运行它

    关于#3,滚动你自己,我不认为滚动你自己,解决一个非常狭窄的要求定义,将太困难.我似乎记得PDF中的图像边界定义得很好:只需将文件读入边界,切割到边界的末尾,base64_decode,然后写入文件 - 重复.但是,这可能太多了......

    如果滚动你自己太复杂了,那么选项#4就像Joel Spolsky描述的使用复杂的Excel对象一样(参见大胆标题下的编号列表"让Office为你做繁重的工作").

    找到一个便宜的托管环境(例如亚马逊EC2)让你exec和你curl

    安装 pdfimages

    编写一个PHP脚本,将URL带到PDF,curl打开PDF,将其写入磁盘,将其传递给pdfimages,然后将URL返回到生成的图像.

    示例交换可能如下所示:

    GET http://www.cheaphost.com/pdfimages.php?extract=http://www.limitedhost.com/path/to/uploaded.pdf
    
    Content-type: text/html
    
    
    <html>
    <body>
    <ul>
    <li>http://www.cheaphost.com/pdfimages.php?retrieve=ab9895v/image-000.jpg</li>
    <li>http://www.cheaphost.com/pdfimages.php?retrieve=ab9895v/image-001.jpg</li>
    </ul>
    </body>
    </html>
    

    因此,您的单个pdfimages.php脚本(在具有该exec功能的主机上运行)可以提取图像,并允许您访问提取的图像.提取时,它会读取您告诉它的PDF,在其上运行pdfimages,并返回一个要调用的URL列表以检索提取的图像.检索时,它只会让您回到直线图像.

    您需要处理清理,或许要做的事情是在检索后删除图像.您还需要处理安全性 - 不知道这些图像中的内容,但内容可能需要包含在SSL中并采取其他预防措施.

    2023-02-12 17:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有