用PHP从PDF中提取图像
问题是,客户端希望上传一个带有图像的pdf文件,作为一种一次性批量处理多个图像的方式 我已经环顾四周,发现现成的PHP无法阅读PDF 我的选择是什么 我已经知道主机没有安装用PHP从PDF中提取图像,php,image,pdf,Php,Image,Pdf,问题是,客户端希望上传一个带有图像的pdf文件,作为一种一次性批量处理多个图像的方式 我已经环顾四周,发现现成的PHP无法阅读PDF 我的选择是什么 我已经知道主机没有安装imageMagick或任何pdf库,并且exec功能被禁用。我想这基本上让我没有工作了 有人知道有没有一个在线服务可以通过某种api来实现这一点吗 感谢advAFAIK,这里没有PHP模块来做这件事。有一个命令行工具(的一部分)。以下是其工作原理,以供参考: pdfimages -j source.pdf image 它将
imageMagick
或任何pdf库,并且exec
功能被禁用。我想这基本上让我没有工作了
有人知道有没有一个在线服务可以通过某种api来实现这一点吗
感谢advAFAIK,这里没有PHP模块来做这件事。有一个命令行工具(的一部分)。以下是其工作原理,以供参考:
pdfimages -j source.pdf image
它将从source.pdf中提取所有图像,如image-000.jpg、image-001.jpg等。请注意,输出格式始终为Jpeg
可能的选项
作为一个命令行工具,您需要exec
(或system
,passthru
,PHP内置的任何命令执行函数)。由于您的环境没有这样的功能,我看到了四个选项:
pdfimages
的源代码作为模型,推出您自己的产品pdfimages
在您控制的远程主机上运行它,完成繁重的工作- 找到一个便宜的托管环境(如AmazonEC2),让您
和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>
GEThttp://www.cheaphost.com/pdfimages.php?extract=http://www.limitedhost.com/path/to/uploaded.pdf
内容类型:text/html
- http://www.cheaphost.com/pdfimages.php?retrieve=ab9895v/image-000.jpg
- http://www.cheaphost.com/pdfimages.php?retrieve=ab9895v/image-001.jpg
因此,您的单个pdfimages.php脚本(使用exec
功能在主机上运行)既可以提取图像,也可以访问提取的图像。提取时,它读取您告诉它的PDF,在其上运行pdfimages,并返回URL列表以调用以检索提取的图像。检索时,它只会返回一个直线图像
您需要处理清理,可能要做的事情是在检索后删除图像。您还需要处理安全性--不知道这些映像中包含什么,但内容可能需要用SSL包装,并采取其他预防措施。您可以使用pdfimages,并通过以下方式安装:
apt install poppler-utils
然后以这种方式获取所有图像作为PNG文件:
pdfimages -j mypdf.pdf image -png
图像将放在image-000.png、image-001.png等下的同一文件夹中
有许多选项可用,包括一些更改输出格式的选项,以及更多信息
我希望这有帮助 我提到了api,它是否在主题中/在主题中有所了解?我担心您将很难实现这一点,甚至在您提到的当前约束条件下,这也是可能的。也许你可以说服客户将图片上传到zip文件或类似文件中?至少会让你的工作更轻松!这从来都不是讨论的话题,但我现在可以提出来了。我将探讨Bishop给我的关于切割边界的建议。我不太清楚它应该如何使用,它不是PHP模块吗?它不是PHP模块:它是一个命令行程序,因此需要exec。(我用我最初的答案仔细阅读了这一部分:已经修改过了。)如果没有exec,我想你需要模仿pdfimages在PHP中的功能——即,自己翻滚。你在开玩笑吧,自己翻滚?我认为这并不简单。如果你没有exec,而且AFAIK没有一个PHP模块来做这件事,你也不能改变设计。。。除了手工,我没有别的办法。我编辑了我的原始答案,注意到PDF中的图像边界非常清晰,因此找到它们并切割它们应该不会太困难。我必须研究一下,但是创建自己的api听起来也很有趣,但我从来没有这样做过。我得考虑一下。你会用什么格式寄回去?