2011-03-11 72 views
2

我需要編輯幾個PDF文件的標題信息。 我想實現的是在%PDF-X.Y.Z之前刪除所有標題數據。編輯或刪除C中的PDF標題信息

我想出了一個可能的解決方案是二進制模式來打開PDF,直到%PDF-X.Y.Z找到閱讀的每個字符。 然後繼續閱讀流的其餘部分並將其保存到新文件。我認爲這樣我會得到一個精確的二進制PDF副本,只是不同的頭文件信息。

C中最簡單/最好的方法是什麼? 有沒有可以幫助我做到這一點的圖書館? 我也有興趣聽到解決這個問題的不同方法。

謝謝。

回答

2

假設剝離文件的開頭確實解決你的問題,你所需要的的fopen,FREAD,FWRITE和FCLOSE。

打開文件以二進制模式讀取。閱讀,直到找到神奇的%PDF字符串。打開二進制寫入的輸出文件。寫出該文件,從你的新%PDF字符串開始。寫完後,關閉這兩個文件。

+0

好吧,我正確的方式。當文件以二進制模式打開時,使用'fread'在字節後面讀取字節並將該值與字符進行比較的最佳方法是什麼? – Dominik 2011-03-11 09:15:49

+0

天真的方法是將其讀入緩衝區,然後逐字節地前進通過緩衝區調用memcmp,以檢查匹配。這可能有一個庫函數。這在C++中會更容易,並且在更高級別的語言中是微不足道的! – 2011-03-11 09:25:23

+0

我明白了。將整個文件讀入緩衝區對於我而言可能有點危險,因爲PDF文件的大小可能爲幾GB。我其實選擇C是因爲我認爲這可能是操縱/處理二進制數據的最簡單方法。所以你認爲我會更好地使用例如C#或Python? – Dominik 2011-03-11 09:36:46

3

其實你可以前%PDF標籤特羅了所有的信息,但你讓外部參照表在文件無效的結束。此表包含對PDF對象的偏移引用。

最簡單的方法是:%PDF之前刪除的部分,算,你有多少特羅之遙,按照減少外部參照值。

+0

或者只是用空格替換'%PDF'之前的內容! – 2011-03-11 09:04:32

+0

感謝您指出這一點。 – Dominik 2011-03-11 09:07:20

+0

@大衛赫弗南:是的,如果量不是太大,可以接受,但有點髒,解決 – p4553d 2011-03-11 09:32:18