2009-08-09 60 views
40

嗨,我知道幾個PDF 發電機爲PHP(fpdf,dompdf等) 我想知道的是關於一個解析器。是否有PHP的解析器?

由於我無法控制的原因,我需要的某些信息僅在pdf 中的表中,我需要提取該表並將其轉換爲數組。

有什麼建議嗎?

+2

我可以給予我們一個關於如何提取PDF文本的實例的任何人的賞金。該解決方案必須使用免費庫(無xPDF或PDF2Text)和獨立平臺(必須在win和unix上工作,因此不需要PDF2Text)。它可以使用PHP的exec()或shell()函數。 – 2ndkauboy 2010-08-31 11:50:46

+0

謝謝Kau-Boy。也許賞金將有助於激發更詳細的答案。 – elviejo79 2010-09-01 04:39:58

回答

1

看看GhostScript或ITextSharp,這裏有各種各樣的跨平臺版本。

1

Zend_PdfZend Framework的一部分。其手冊指出:

Zend_Pdf組分是PDF (便攜式文檔格式) 操縱引擎。它可以加載, 創建,修改和保存文件。 因此,它可以幫助任何PHP應用程序 動態創建PDF文檔 修改現有文檔或 從頭開始生成新文檔。

+0

+1 - Zend Framework組件可靠地按照他們所說的去做。 – karim79 2009-08-09 22:50:23

+5

我不相信你可以閱讀使用Zend_Pdf的PDF文件中的文本 – 2010-03-18 14:14:03

+0

除了Zend_Pdf不支持PDF格式> 1.4 – 2013-05-09 01:12:28

0

它實際上可能沒有爲PDF失去那種信息的PDF裏面的一張桌子......

3

你是否已經看xPDF?在那裏有一個名爲pdftotext的程序可以完成轉換。您可以從PHP中調用它,然後閱讀PDF的文本版本。你需要能夠從php運行exec()或system(),所以這可能不適用於所有託管的解決方案。

另外,PHP site上有一些例子可以將PDF轉換爲文本,雖然它很粗糙。你也可以嘗試一些這樣的例子。在PHP page上,在phpt dot org處搜索luc。

+0

我根據您的建議嘗試了xpdf,並且很驚訝它的工作原理 - 謝謝! – Tomba 2011-02-04 17:07:59

0

This是PHP PDF解析器,它存在於兩種形式:

  1. 免費版本可以解析PDF文件多達格式PDF 1.5
  2. 商業插件能夠解析任何PDF格式(最高電流1.9)
+0

該鏈接已死,但我認爲這是它的一個分支:https://github.com/mark9000/FPDI – nullability 2013-09-24 18:47:46

29

我以前寫過一個(對於類似的需求),我可以這樣說:玩得開心。這是一項相當複雜的任務。 PDF specification是龐大而笨拙的。有幾種存儲文本的方法。最引人注目的是每個PDF生成器在工作方式上都有所不同。因此,雖然像TFPDF或DOMPDF這樣的東西創建真正容易閱讀PDF(從機器的角度來看),但Acrobat製作了一些非常地獄般的文檔。

原因是它如何寫文本。大多數基於DOM的渲染器 - 我已經用它 - 將整行寫成一個字符串,並將其定位一次(這非常容易閱讀)。 Acrobat試圖通過一次只寫入一個或幾個字符來更高效地(並且是),並獨立地定位它們。雖然這真的簡化了渲染,但它使閱讀更加困難。

這裏的優勢在於PDF格式本身非常簡單。你有遵循常規語法的「對象」。然後,您可以將它們鏈接在一起以生成內容。該規範在描述文件格式方面做得很好。但現實世界讀書是要採取一些腦力...

建議一些有用的作品,我有學習困難的方式,如果你要自己編寫:

  1. 的Adobe喜歡重新映射字體。所以字符65可能不會是A ...您需要找到一個地圖對象並根據其中的字符推斷它正在做什麼。而且它是有效的,因爲如果一個字符沒有出現在該字體的文檔中,它就不包含它(如果你嘗試以編程方式編輯一個PDF,這會使生活變得困難)...
  2. 把它寫成抽象可能。爲每個對象類型和每個本地類型(字符串,數字等)編寫類。讓這些類爲你解析。在那裏會有一些重複,但是當你意識到你只需要調整某種特定類型的東西時,你就可以節省自己)...
  3. 寫一個特定的版本或兩個PDF規範,並執行它。檢查版本號,如果它比預期的高,請保釋......並且不要試圖「使其工作」。如果你想支持更新的版本,請打破規範並從那裏升級解析器。不要試圖嘗試錯誤的方式(這不是很好玩)...
  4. 祝你好運壓縮的流。我發現通常你不能相信長度參數來驗證你正在解壓的東西。有時(對於某些生成器)它工作的很好......其他的它關閉了一個或多個字節。如果過濾器匹配,我只是嘗試縮小它,然後強制長度...
  5. 測試長度時,請勿使用strlen。使用mb_strlen($string, '8bit'),因爲它會補償不同的字符集(並允許其他字符集中的潛在無效字符)。

否則,好運...

+2

+1我甚至可以稱之爲噩夢。規範很大,一個PDF文件幾乎類似於一個文件系統,在這個文件系統中有許多不同的選項和選擇......你當然可以看到他們如何在那裏隱藏破解破解能力。 – Rudu 2010-08-31 22:07:19

+2

您是否期望Adobe提供更少的內容? – bpeterson76 2010-09-02 15:49:16

+0

@ bpeterson76,是的..我不希望我的PDF可以下載:( – 2014-02-13 10:32:54

相關問題