问题是客户想要上传包含多个图像的PDF作为批处理多个图像的方式。
我已经搜索过,但PHP不能直接读取PDF文件。
我的替代选择是什么?
我已经知道主机没有安装imageMagick
或任何PDF库,并且exec
函数被禁用了。这基本上让我没有什么可使用的东西,难道不是吗?
有人知道是否有在线服务可以做到这一点,并带有一定的API吗?
谢谢提前。
问题是客户想要上传包含多个图像的PDF作为批处理多个图像的方式。
我已经搜索过,但PHP不能直接读取PDF文件。
我的替代选择是什么?
我已经知道主机没有安装imageMagick
或任何PDF库,并且exec
函数被禁用了。这基本上让我没有什么可使用的东西,难道不是吗?
有人知道是否有在线服务可以做到这一点,并带有一定的API吗?
谢谢提前。
pdfimages -j source.pdf image
这将从source.pdf中提取所有图像,命名为image-000.jpg、image-001.jpg等。请注意,输出格式始终为Jpeg。
可能的选项
作为一个命令行工具,您需要使用exec
(或system
、passthru
等PHP内置的任何命令执行函数)。由于您的环境没有这个功能,我看到了四个选项:
pdfimages
的源代码为模板pdfimages
完成繁重的工作,通过在您控制的远程主机上运行它关于#3,自己编写代码,我认为为了解决非常狭窄的需求定义而编写代码并不太困难。我记得PDF中的图像边界是定义良好的:只需读入文件到边界,剪切到边界的末尾,进行base64解码,并写入文件 - 重复即可。但是,这可能太麻烦了...
如果自己制作过于复杂,那么选项 #4 就有点像 Joel Spolsky 描述的处理复杂 Excel 对象的方法(请参见粗体标题下的编号列表“让 Office 为您完成繁重的工作”)。exec
和 curl
pdfimages
一个示例交互可能如下:
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>
exec
功能的主机上运行)可以提取图像并让您访问提取的图像。在提取时,它会读取您指定的PDF文件,运行pdfimages,并返回一个URL列表,以便调用以检索提取的图像。在检索时,它只会直接返回一张图像。apt install poppler-utils
然后使用以下方式将所有图片保存为PNG文件:
pdfimages -j mypdf.pdf image -png
图片将放置在同一文件夹下,文件名为image-000.png、image-001.png等。
有许多选项可供选择,包括更改输出格式的选项,更多信息在此处。
希望这可以帮助您!