2013-12-11 58 views
1

我想構建一個實用程序從PDF中提取嵌入文件(請參閱the spec的7.11.4節)。不過,我希望該實用程序「小」,而不依賴於完整的PDF解析框架。我想知道如果文件格式是這樣的,一個簡單的工具可以掃描文檔中的某些標記或序列,並從中知道從哪裏開始提取嵌入文件。提取嵌入PDF文件沒有完全解析

潛在的困難包括您掃描的標記或序​​列可能有效地存在於文檔的其他地方,導致虛假或損壞的文檔提取。

我不是那熟悉的PDF規範,所以我在尋找

  • 確認這是可能的
  • 的一般方法,將工作
+1

至少有兩種情況會讓你的生活變得困難:加密文件和對象流(包含內部對象集合的壓縮對象)。 – yms

+2

*我不太熟悉PDF規範* - 在這種情況下,在嘗試類似的任何操作之前,先要熟悉它。 – mkl

+0

@yms:沒關係處理加密文件(我假設你的意思是PDF和密碼?),但是你能說更多關於對象流的信息嗎? – brooks94

回答

1

有至少有兩種情況會讓你的生活變得困難:加密文件和對象流(包含內部對象集合的壓縮對象)。

關於第二項(對象流),一些PDF生成工具會將PDF文件中的大部分對象(字典)放在一個對象中,並壓縮這個對象(通常是放氣壓縮)。這意味着你不能只瀏覽一個PDF文件尋找某個特定的標記,以便提取一些你需要的信息,而忽略其他的信息。您將需要至少部分解釋PDF文件的結構。

請注意,即使未使用對象流,您要提取的嵌入文件也很可能會被壓縮。

你的程序將需要能夠做至少有以下:
- 處理外部參照表
- 處理對象流
- 應用解碼/解壓縮過濾器的數據流。

一旦您能夠從文件中獲取所有對象,理論上可以通過它們查找EmbeddedFile類型的字典。這種方法的缺點是,您可能會提取文檔內部任何未引用的文件(例如,用戶在文件歷史記錄的某個點刪除了它)

另一種方法可能是實際瀏覽結構該文件在PDF規範指定的位置上查找嵌入式文件。你可以找到嵌入文件中至少包含以下元素(這個列表是從我的頭頂,有可能是多了很多,這些):
- 名字字典
- 文件概述
- 頁註釋

+1

+1;另一個困難可能是多修訂版文件增加和刪除文件附件。 – mkl