簡體   English   中英

使用PHP從PDF中提取圖像

[英]extract images from PDF with PHP

問題是客戶想要上傳帶有圖像的pdf,作為一次批量處理多個圖像的方式。

我已經環顧四周,開箱即用PHP無法閱讀PDF文件。

我有什么選擇?

我已經知道主機沒有安裝imageMagick或任何pdf庫, exec功能被禁用。 我猜,這基本上讓我無需工作。

有沒有人知道是否有一個可以做到這一點的在線服務,有各種各樣的api?

謝謝你

AFAIK,沒有PHP模塊可以做到。 有一個命令行工具, pdfimagesxpdf的一部分)。 作為參考,這是如何工作的:

pdfimages -j source.pdf image

這將從source.pdf中提取所有圖像為image-000.jpg,image-001.jpg等。請注意,輸出格式始終為Jpeg。

可能的選擇

作為命令行工具,您需要exec (或systempassthru ,PHP內置的任何命令執行函數)。 由於您的環境沒有,我看到四個選項:

  1. 請求為您打開exec(您的托管服務提供商可以限制您執行單個命令的操作)
  2. 更改設計 - ZIP上傳怎么樣?
  3. 使用pdfimages的源代碼作為模型, pdfimages
  4. pdfimages通過在您控制的遠程主機上運行它來完成繁重的工作

關於#3,滾動你自己,我不認為滾動你自己,解決一個非常狹窄的要求定義,將是太困難了。 我似乎記得PDF中的圖像邊界定義得很好:只需將文件讀入邊界,切割到邊界的末尾,base64_decode,然后寫入文件 - 重復。 但是,這可能太多了......

如果滾動你自己太復雜了,那么選項#4就像Joel Spolsky描述的使用復雜的Excel對象一樣 (參見大膽標題下的編號列表“讓Office為你做繁重的工作”)。

  • 找到一個便宜的托管環境(例如亞馬遜EC2)讓你execcurl
  • 安裝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中並采取其他預防措施。

您可以使用pdfimages並以這種方式安裝它:

apt install poppler-utils

然后以這種方式使用它將所有圖像作為PNG文件:

pdfimages -j mypdf.pdf image -png

圖像將放在image-000.png,image-001.png等下的同一文件夾中。

有許多選項可供選擇,包括一些可以更改輸出格式的選項, 這里有更多信息。

我希望這有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM