沒有任何實際的方法來做到這一點。與任何類型的文檔一樣,理論上可能對PDF進行任何更改,但這樣做更像是試圖在沒有源代碼的情況下調試程序;即使目標代碼中的細微變化也會迫使你將所有東西都移動到一起,並且你不得不編輯所有類型的東西,這些東西不是人爲編輯的,所以作爲一個實際問題,唯一的解決方案是使源代碼中的更改,然後重新編譯它。
PDF是page description language;其目的是指定,確切地說該頁面將看起來像什麼,並且它必須這樣做,以致於每個平臺上的每個PDF閱讀器都會生成完全相同的產品。這不僅包括頁面內容(文本,圖像等)和格式(文本以粗體顯示,以中心爲準等),還包括字體本身,每個對象的精確XY座標以及各種其他這些細節非常神祕,我只能猜測它們可能是什麼,以及除非他們正在編寫PDF閱讀器,否則任何人都不應該對付它們。
要將一段文字添加到現有的PDF中,您必須知道其中的每一個細節,並且您必須重新計算大部分內容才能容納附加段落。除了令人頭腦麻木之外,它還會涉及重新創建大量不平凡的邏輯,以找出網頁上的所有內容。
這不值得。
如果您要處理的所有文檔具有完全相同的佈局,並且您有一個模板或以其他方式有能力創建與之類似的文檔,則可以通過編程從PDF中提取文本內容,然後使用它加上你的新段落來填充模板,然後把它作爲PDF格式。對於第一步(提取文本),Apache PDFBox是一個用於處理PDF文檔的開放源代碼Java庫,是一種流行的選擇。
如果文檔完全不同,那麼您必須堅持要求客戶以透明的格式爲您提供文檔;即描述文檔內容和格式的文檔,而不是描述文檔如何完成呈現的細節。您可以在全功能文字處理器(純文本,RTF格式,OpenDocument,Office Open XML)中編輯任何內容。所有這些格式都存在Java庫(儘管我不知道它們有多好),並且Microsoft Word和LibreOffice都支持它們,所以您的客戶可能首先使用其中一種格式創建文檔。
謝謝Taymon!三個問題:'1。是否有規範說現有的PDF格式,內容,字體等不能修改,因此我可以將其展示給客戶。 '2。'你有沒有從PDF中提取文本的例子?我認爲客戶的PDF只包含幾行文字,但不是很確定。 '3.'什麼樣的可編輯格式被廣泛使用,並且在Java中定義好了api庫? – 2012-03-02 02:58:41
@GrantZhu我已經擴展了我的答案。沒有說明這一點,因爲這不是編輯PDF的原因不切實際的原因,但我提供了一個解釋,希望能以某種形式給予您的客戶。 – Taymon 2012-03-02 04:48:00
再次感謝您寫下這些有價值的東西! – 2012-03-02 05:06:50