UNPKG

@ironsoftware/ironpdf

Version:

IronPDF for Node

50 lines (47 loc) 1.65 kB
import {ServiceError} from "@grpc/grpc-js"; import {Access} from "../../access"; import {IronPdfServiceClient} from "../../generated_proto/ironpdfengineproto/IronPdfService"; import {PdfiumGetBookmarksDescriptorResultP__Output} from "../../generated_proto/ironpdfengineproto/PdfiumGetBookmarksDescriptorResultP"; import {Bookmark} from "../../../public/bookmark"; import {handleRemoteException} from "../util"; /** * Retrieve the document's outline bookmarks via the {@code Pdfium_Bookmark_GetBookmarksDescriptor} * unary RPC. Mirrors {@code IronPdf.PdfDocument.Bookmarks} on the C# side. */ export async function getBookmarks(id: string): Promise<Bookmark[]> { const client: IronPdfServiceClient = await Access.ensureConnection(); return new Promise( (resolve: (_: Bookmark[]) => void, reject: (errorMsg: string) => void) => { client.Pdfium_Bookmark_GetBookmarksDescriptor( {document: {documentId: id}}, ( err: ServiceError | null, value: PdfiumGetBookmarksDescriptorResultP__Output | undefined ) => { if (err) { reject(`${err.name}/n${err.message}`); return; } if (!value) { reject("No response from IronPdfEngine for getBookmarks"); return; } if (value.exception) { handleRemoteException(value.exception, reject); return; } const descriptors = value.result?.bookmarkDescriptors ?? []; resolve( descriptors.map(d => ({ text: d.text ?? "", pageIndex: d.pageIndex ?? 0, hierarchy: d.hierarchy ?? "", itemId: d.itemId ?? "", parentItemId: d.parentItemId ?? "", })) ); } ); } ); }