, InsertAndAdaptOutlines. PdfStamper PdfCopy, , PdfOutline.
bookmarks.pdf:

"Hello World", 4 ( 4 10), bookmarks_hello.pdf

:
PdfReader insert = new PdfReader(INSERT);
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(DEST));
stamper.insertPage(4, insert.getPageSize(1));
PdfContentByte cb = stamper.getOverContent(4);
cb.addTemplate(stamper.getImportedPage(insert, 1), 0, 0);
...
stamper.close();
: ? PdfReader, entry, outlines, PdfStamper, setOutlines() . ( PdfCopy PdfSmartCopy):
List<HashMap<String, Object>> outlines = SimpleBookmark.getBookmark(reader);
HashMap<String, Object> entry = new HashMap<String, Object>();
entry.put("Title", "Hello");
entry.put("Action", "GoTo");
entry.put("Page", "4 Fit");
updateOutline(outlines, entry, 4);
stamper.setOutlines(outlines);
updateOutline() , GoTo:
public boolean updateOutline(List<HashMap<String, Object>> outlines, HashMap<String, Object> entry, int p) {
int index = 0;
for (HashMap<String, Object> outline : outlines) {
Object kids = outline.get("Kids");
if (kids != null) {
updateOutline((List<HashMap<String, Object>>)kids, entry, p);
}
else {
if (p < getPage(outline)) {
outlines.add(index, entry);
return true;
}
index++;
}
}
return false;
}
public int getPage(HashMap<String, Object> outline) {
Object page = outline.get("Page");
if (page == null) return -1;
String p = page.toString().substring(0, page.toString().indexOf(" "));
return Integer.parseInt(p);
}
-, updateOutline(), , , . entry . , PDF .