2012-03-01 70 views
1

要求是: 我有一個現有的PDF文檔。我想在開頭(第一頁)插入一段是PDF文檔的摘要。如何順利添加內容到現有的PDF文檔?

我正在使用itext2.1.5庫導入現有的PDF文檔,並執行插入的東西。 我已經有一個解決方案,但不是很滿意。 我目前的方式正在縮小現有的第一頁,因此它看起來更小,佔用更少的空間,然後把它放在新的段落。但是客戶對這個解決方案並不滿意,他們認爲整個新的PDF文檔中字體大小不一致(由於縮小,第一頁的字體尺寸看起來比其他頁面小)。

所以我想知道是否有更好的方法來實現這個目標,即將一些內容順利地插入到現有PDF中,就像在Word文檔中這樣做一樣?

謝謝!

編輯: 爲什麼我得到一個反對票?

回答

3

沒有任何實際的方法來做到這一點。與任何類型的文檔一樣,理論上可能對PDF進行任何更改,但這樣做更像是試圖在沒有源代碼的情況下調試程序;即使目標代碼中的細微變化也會迫使你將所有東西都移動到一起,並且你不得不編輯所有類型的東西,這些東西不是人爲編輯的,所以作爲一個實際問題,唯一的解決方案是使源代碼中的更改,然後重新編譯它。

PDF是page description language;其目的是指定,確切地說該頁面將看起來像什麼,並且它必須這樣做,以致於每個平臺上的每個PDF閱讀器都會生成完全相同的產品。這不僅包括頁面內容(文本,圖像等)和格式(文本以粗體顯示,以中心爲準等),還包括字體本身,每個對象的精確XY座標以及各種其他這些細節非常神祕,我只能猜測它們可能是什麼,以及除非他們正在編寫PDF閱讀器,否則任何人都不應該對付它們。

要將一段文字添加到現有的PDF中,您必須知道其中的每一個細節,並且您必須重新計算大部分內容才能容納附加段落。除了令人頭腦麻木之外,它還會涉及重新創建大量不平凡的邏輯,以找出網頁上的所有內容。

這不值得。

如果您要處理的所有文檔具有完全相同的佈局,並且您有一個模板或以其他方式有能力創建與之類似的文檔,則可以通過編程從PDF中提取文本內容,然後使用它加上你的新段落來填充模板,然後把它作爲PDF格式。對於第一步(提取文本),Apache PDFBox是一個用於處理PDF文檔的開放源代碼Java庫,是一種流行的選擇。

如果文檔完全不同,那麼您必須堅持要求客戶以透明的格式爲您提供文檔;即描述文檔內容和格式的文檔,而不是描述文檔如何完成呈現的細節。您可以在全功能文字處理器(純文本,RTF格式,OpenDocument,Office Open XML)中編輯任何內容。所有這些格式都存在Java庫(儘管我不知道它們有多好),並且Microsoft Word和LibreOffice都支持它們,所以您的客戶可能首先使用其中一種格式創建文檔。

+0

謝謝Taymon!三個問題:'1。是否有規範說現有的PDF格式,內容,字體等不能修改,因此我可以將其展示給客戶。 '2。'你有沒有從PDF中提取文本的例子?我認爲客戶的PDF只包含幾行文字,但不是很確定。 '3.'什麼樣的可編輯格式被廣泛使用,並且在Java中定義好了api庫? – 2012-03-02 02:58:41

+0

@GrantZhu我已經擴展了我的答案。沒有說明這一點,因爲這不是編輯PDF的原因不切實際的原因,但我提供了一個解釋,希望能以某種形式給予您的客戶。 – Taymon 2012-03-02 04:48:00

+0

再次感謝您寫下這些有價值的東西! – 2012-03-02 05:06:50

1

如果您必須縮小現有的PDF內容以適應新的內容,並且客戶不喜歡字體縮小,那麼您無法以這種方式解決問題。提供相互衝突的要求將是一項相當大的成就。

如果源PDF是靜態的(或很少發生更改),那麼您可能應該模仿它們,並根據需要簡單地生成完整的PDF,從而允許添加所需的內容(插入段落)。如果您可以編寫必要的佈局或DocmosisJODReports,則可以擴展您對iText的使用。

如果您的源PDF格式不同或者是動態的,那麼Taymon表示您沒有太多機會。 如果您使用搜索字符串(如「PDF的用途」)搜索網絡,您會發現一些很好的參考信息,說明爲什麼它不容易編輯。

+0

謝謝jowierun。收縮不是要求的一部分,這是我的實施,因爲我找不到更好的方法。客戶只關心結果。感謝您的推薦。 – 2012-03-02 03:48:49

相關問題