2013-05-06 59 views
0

我想添加一個索引頁面到現有的PDF文件。並將頁碼添加到PDF文件的頁面。
所有建議的解決方案都指向創建一個新的pdf並將現有的pdf文件與新文件合併。不使用iText編輯現有的PDF

有沒有其他的方式呢? 另外我不想使用itext,因爲它不是免費的商業用途。

+1

還有其他一些PDF庫,也有一些商業的,有些是免費的。由於您似乎不想爲PDF庫花錢,PDFBox可能適合您。或者,如果您不需要先進的技術,iText到4.2版可能是您需要查看的東西;新版本是AGPL或商業版本。 – mkl 2013-05-06 13:29:40

+0

PDFBox的問題是它不支持編輯現有的pdf。您需要在每次要將頁面添加到現有PDF文件時創建一個新的pdf文件。 – 2013-05-06 13:32:58

+0

如果通過*編輯現有的pdf *,你的意思是你必須用不同的文件名來保存操作的結果......那又如何?否則請解釋。 – mkl 2013-05-06 13:41:05

回答

1

根據您的意見,原來的問題,您認爲在PDFBox的

添加新&頁面的內容,你需要創建一個新的PDF添加新的內容,然後合併現有的PDF。我想避免合併步驟。重命名不是問題

你可能想嘗試這樣的事:

PDDocument doc = PDDocument.load(new FileInputStream(new File("original.pdf"))); 
PDPage page = new PDPage(); 
// fill page 
doc.addPage(page); 
doc.save("original-plus-page.pdf"); 

編輯:在這個問題出現瞭如何插入特定索引的新頁答案評論(頁碼)。要做到這一點,顯然doc.addPage(page)必須改變。

本來這PDDocument方法的定義如下:

/** 
* This will add a page to the document. This is a convenience method, that 
* will add the page to the root of the hierarchy and set the parent of the 
* page to the root. 
* 
* @param page The page to add to the document. 
*/ 
public void addPage(PDPage page) 
{ 
    PDPageNode rootPages = getDocumentCatalog().getPages(); 
    rootPages.getKids().add(page); 
    page.setParent(rootPages); 
    rootPages.updateCount(); 
} 

我們只是需要一個類似的功能,只是不只是add頁面給孩子,而是將其添加定索引處。因此,就像我們的代碼如下所示的helper方法就可以了:

public static void addPage(PDDocument doc, int index, PDPage page) 
{ 
    PDPageNode rootPages = doc.getDocumentCatalog().getPages(); 
    rootPages.getKids().add(index, page); 
    page.setParent(rootPages); 
    rootPages.updateCount(); 
} 

如果你現在

addPage(doc, page, 0); 

空更換線

doc.addPage(page); 

在原來的答案的代碼頁面被添加在前面。

+0

謝謝!我們是否也可以在特定索引(頁碼)處插入新頁面? – 2013-05-07 05:43:28

+0

Btw確實PDFbox或任何其他免費開源庫支持在PDF文檔中創建內部鏈接? – 2013-05-07 07:01:41

+0

感謝您的詳細代碼 – 2013-05-07 13:13:51