我想添加一個索引頁面到現有的PDF文件。並將頁碼添加到PDF文件的頁面。
所有建議的解決方案都指向創建一個新的pdf並將現有的pdf文件與新文件合併。不使用iText編輯現有的PDF
有沒有其他的方式呢? 另外我不想使用itext,因爲它不是免費的商業用途。
我想添加一個索引頁面到現有的PDF文件。並將頁碼添加到PDF文件的頁面。
所有建議的解決方案都指向創建一個新的pdf並將現有的pdf文件與新文件合併。不使用iText編輯現有的PDF
有沒有其他的方式呢? 另外我不想使用itext,因爲它不是免費的商業用途。
根據您的意見,原來的問題,您認爲在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);
在原來的答案的代碼頁面被添加在前面。
謝謝!我們是否也可以在特定索引(頁碼)處插入新頁面? – 2013-05-07 05:43:28
Btw確實PDFbox或任何其他免費開源庫支持在PDF文檔中創建內部鏈接? – 2013-05-07 07:01:41
感謝您的詳細代碼 – 2013-05-07 13:13:51
還有其他一些PDF庫,也有一些商業的,有些是免費的。由於您似乎不想爲PDF庫花錢,PDFBox可能適合您。或者,如果您不需要先進的技術,iText到4.2版可能是您需要查看的東西;新版本是AGPL或商業版本。 – mkl 2013-05-06 13:29:40
PDFBox的問題是它不支持編輯現有的pdf。您需要在每次要將頁面添加到現有PDF文件時創建一個新的pdf文件。 – 2013-05-06 13:32:58
如果通過*編輯現有的pdf *,你的意思是你必須用不同的文件名來保存操作的結果......那又如何?否則請解釋。 – mkl 2013-05-06 13:41:05