All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ironsoftware.ironpdf.bookmark.BookmarkManager Maven / Gradle / Ivy

package com.ironsoftware.ironpdf.bookmark;

import com.ironsoftware.ironpdf.PdfDocument;
import com.ironsoftware.ironpdf.internal.staticapi.Bookmark_Api;
import com.ironsoftware.ironpdf.internal.staticapi.InternalPdfDocument;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;


/**
 * Class used to add , edit and remove bookmarks from a {@link com.ironsoftware.ironpdf.PdfDocument} outline.
 * 

Bookmarks are arranged and navigated in a parent/child node hierarchy, similar to an HTML DOM.

*

See: {@link com.ironsoftware.ironpdf.PdfDocument#getBookmark()}

*

See: {@link Bookmark}

*/ public class BookmarkManager { private final InternalPdfDocument internalPdfDocument; /** * Please get BookmarkManager by {@link PdfDocument#getBookmark()} instead. * * @param internalPdfDocument the internal pdf document */ public BookmarkManager(InternalPdfDocument internalPdfDocument) { this.internalPdfDocument = internalPdfDocument; } /** * Total number of bookmarks, including all nested bookmarks */ public final int getCount() { return this.getBookmarks().size(); } /** * Retrieve all bookmarks within this PDF, recursively retrieve all children of bookmarks within * this collection, and return as a flat list * * @return A flattened list of all bookmark ojects in this collection and all of their children */ public final List getBookmarks() { return Bookmark_Api.getBookmarks(internalPdfDocument) .stream().peek(x -> x.setBookmarkManager(this)).collect(Collectors.toList()); } /** * Add a new bookmark at the end of the bookmark collection * * @param text The display text for the link. * @param pageIndex The zero based page number to link to. E.g. Page 1 has a PageIndex of 0 */ public final void addBookMarkAtEnd(String text, int pageIndex) { List bookmarks = this.getBookmarks(); com.ironsoftware.ironpdf.bookmark.Bookmark lastBookmarks = bookmarks.size() == 0 ? null : bookmarks.get(bookmarks.size() - 1); if (lastBookmarks == null) { Bookmark_Api.insertBookmarkAtStart(internalPdfDocument, pageIndex, text); } else { Bookmark_Api.insertBookmark(internalPdfDocument, pageIndex, text, lastBookmarks.getParentBookmarkText(), lastBookmarks.getText()); } } /** * Add a new bookmark at the start of the document collection * * @param text The display text for the link. * @param pageIndex The zero based page number to link to. E.g. Page 1 has a PageIndex of 0 */ public final void addBookMarkAtStart(String text, int pageIndex) { List bookmarks = this.getBookmarks(); com.ironsoftware.ironpdf.bookmark.Bookmark firstBookmarks = bookmarks.size() == 0 ? null : bookmarks.get(0); Bookmark_Api.insertBookmarkAtStart(internalPdfDocument, pageIndex, text); } /** * Insert a new bookmark * * @param text The display text for the link. * @param pageIndex The zero based page number to link to. E.g. Page 1 has a * PageIndex of 0 * @param parentText parent bookmark text. set to null for insert at the top * @param previousText previous bookmark text. set to null for insert at first of its * siblings */ public final void insertBookmark(String text, int pageIndex, String parentText, String previousText) { Bookmark_Api.insertBookmark(internalPdfDocument, pageIndex, text, parentText, previousText); } /** * Insert a new bookmark * * @param bookmark a bookmark object. */ public final void insertBookmark(Bookmark bookmark) { Bookmark_Api.insertBookmark(internalPdfDocument, bookmark.getPageIndex(), bookmark.getText(), bookmark.getParentBookmarkText(), bookmark.getPreviousBookmarkText()); } /** * Add a new bookmark as a first child of this bookmark. To add a bookmark as a second child, * please navigate to the childBookmark object and call AddNextBookmark. * * @param text The display text for the link. * @param pageIndex The zero based page number to link to. E.g. Page 1 has a PageIndex of 0 * @return a new child bookmark */ public final com.ironsoftware.ironpdf.bookmark.Bookmark addChildBookmark(String text, int pageIndex, String parentBookmarkText) { Bookmark_Api.insertBookmark(internalPdfDocument, pageIndex, text, parentBookmarkText, null); //hacks to get the new bookmark, as the static api doesn't return it. Optional optNewBookmark = Bookmark_Api.getBookmarks( internalPdfDocument).stream().filter(x -> x.getText().equals(text) && x.getPageIndex() == pageIndex && x.getParentBookmarkText().equals(parentBookmarkText)) .findFirst(); optNewBookmark.ifPresent(x -> x.setBookmarkManager(this)); return optNewBookmark.orElse(null); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy