2010-08-06 125 views
15

我有一堆帶有表格數據的PDF文檔,我需要將其提取爲更易讀的格式以存儲在電子表格,數據庫或其他內容中。以編程方式提取PDF表格

有什麼列世界(最好是免費),其能夠獲得表格數據出PDF的成更可讀的格式散裝或者與一個應用程序或通過命令行或循環被動原生集成代碼進程(.net)?

只要表格被保留,就可以是任何格式(doc,html)。

到目前爲止,我發現的任何東西都是一次性的(一次只能做一個文檔,我有數百個,但沒有發生)或者不維護表結構。

任何想法請發佈。

+0

如果您可以通過源PDF的具體示例來擴展此問題,這將有所幫助,因爲這是以任何精度回答問題所必需的。 – andersoj 2010-10-17 20:14:36

+0

@Thilo - 你對這個問題附加了一個賞金,並且@markdigi沒有注意。您是否有一些示例數據可以指出您想要解決的問題? – andersoj 2010-10-18 15:48:49

+0

@andersoj這是與http://stackoverflow.com/questions/3929793/how-can-i-extract-parse-tabular-data-from-a-text-file-in-perl(我得到的文本數據從pdftotext)。 – Thilo 2010-10-20 04:15:22

回答

10

這是一個巨大的麻煩。一般來說,提取PDF文件的文本內容是針對PDF要求你做的。

從試圖獲取文本開始。這可能或多或少取決於PDF的構建方式。一個地方開始是GhostScript或pstotext。如果你失敗了,這個人有一個list of text extraction tools。一旦你有了文本流,你就可以嘗試以編程方式重新組裝表格結構。最後,如果你的狀態嚴重不好,如果PDF不合作,你可以做OCR的事情。正確的長期解決方案是一開始就將數據轉化爲正確的格式,無論是通過單一的,大規模的,痛苦的,可能是部分手動的過程;或去信息來源,並建議以更可用的形式提供數據。

如果您可以給出更具體的PDF示例文件,可能會有更好或更精確的答案......沒有一般的解決方案,如果可能的話,它將需要針對您的特定源數據。

注意這個rather pointed response to the general question ......並沒有幫助你解決你面前的問題,但是當向你的老闆解釋爲什麼沒有明顯的答案時,它可能會提供有用的頂蓋。 ;-)

彈出一個新的SO問題,並提到這個庫 - iTextSharp - 看起來可能相關。SO問題:Best way to extract...

0

當你說

什麼我迄今發現...只做一次在一個文檔

我假設你的意思是「是一個GUI應用程序,沒有一個編程接口「。

在這種情況下,您可以使用Microsoft UI Automation以編程方式控制應用程序並使其按照自己的需要進行操作。

UIA ...提供了公開和收集有關用戶界面元素和控件信息的方法,以支持用戶界面可訪問性和軟件測試自動化......並且與Win32和.NET Framework兼容。

0

考慮到您的要求,直接向您的問題的答案是它是不可能的。原因是,與word/excel不同,PDF規範沒有名爲Table的對象。您在這些PDF文檔中看到的表格只是一系列矩形,它看起來像表格,它取決於創建這些PDF文件的PDF Writer,因爲有些可能會使用Line of Line來繪製表格類型的結構。

但可能你可以根據PDF File Specification寫自己的解析器,但它仍然是,如果你選擇實現自己的解析器,是一項艱鉅的任務,這將需要幾個月的時間才能得到一個這正與不少PDF文檔

Incase,你決定寫你自己的解析器。下面的文章會給你一個開始。 Code Project Article

+0

有一堆PDF工具集在那裏...我不知道這是如何幫助回答這個問題。 – andersoj 2010-10-17 20:13:12

+0

@andersoj,感謝您的反饋。過去兩年來我一直在開發商業PDF解決方案。基於我的知識和多年的PDF文件格式的經驗,這個問題過去曾被我們的幾個客戶問過。所以我給了我直截了當的迴應。而且,據我所知,市場上沒有這樣的組件。但是有一些商業解決方案可以將PDF導出爲Word Document,我知道它們的可靠程度;)乾杯, – 2010-10-18 04:52:00

+0

啊,這與LaTeX to Word方法類似嗎?爲每個頁面生成一個位圖,放置在頁面上,準備好是您的文字文檔? – 2010-10-18 14:52:39

1

PDF格式是建立爲一個字母集合,它沒有固有的格式或任何東西。您可以將PDF視爲通過OCR進入的頁面,並且您可以從那裏獲取PDF(字母和它們的座標) - 其餘的由您決定 - 來計算佈局,格式,列和最終表格。

1

如果所有的數據都是文本數據,您可以隨時使用iTextSharp。它是免費的,你只需要「itextsharp.dll」。

http://sourceforge.net/projects/itextsharp/

這裏是閱讀的文本了PDF的簡單功能。

Public Shared Function GetTextFromPDF(PdfFileName As String) As String 
    Dim oReader As New iTextSharp.text.pdf.PdfReader(PdfFileName) 

    Dim sOut = "" 

    For i = 1 To oReader.NumberOfPages 
     Dim its As New iTextSharp.text.pdf.parser.SimpleTextExtractionStrategy 

     sOut &= iTextSharp.text.pdf.parser.PdfTextExtractor.GetTextFromPage(oReader, i, its) 
    Next 

    Return sOut 
End Function 

這將至少讓你開始的文字。

+0

它不是免費的商業用途。 – Paparazzi 2011-12-27 23:03:37

0

我試過使用類似pdf2text的工具從PDF中提取純文本,但是太多的表格和格式以及佈局信息會丟失,無法準確重建原始版本。

使用PDF API提取文本框和行的x,y位置並使用該信息重構表格可能會更成功。

似乎有是一些第三方工具和API試試這個方法:

Solid Framework付費版本似乎能夠從我的PDF文件自動較好地提取從PDF表格,Excel和CSV已經拋出了它。

免費PDF Mechanic似乎是一個圍繞Solid Framework的小型GUI程序,您可以使用它來試用其PDF提取技術。

還有免費的工具pdf2table,你可以從你的程序中調用,但我還沒有嘗試過。

3
  1. 對於有關爲什麼PDF文件格式應該永遠不會被託管提取,結構化數據認爲是合適的背景,看到這篇文章:

  2. 對於一個驚人的工具系列,每週都會從PDF中提取表格數據(除非它們是掃描的頁面),它們會逐漸變得更好,更好,矛盾點'1'。上述看到這些鏈接:

0

我最近遇到了這個問題。

我發現的另一種解決方案是在Adobe中打開PDF文檔並將其導出到xml。至少在我的PDF文件中保存了表格信息,然後我就可以通過編程方式使用XML生成表格文件,例如excel等。

我遇到的另一個問題是Adobe只允許您在時間和我有很多文件。幸運的是,Adobe也有合併功能。我最終將所有文件合併在一起,然後將它們導出爲一個大XML文件並使用該文件生成我需要的文件。