@ironsoftware/ironpdf
Version:
IronPDF for Node
50 lines (47 loc) • 1.65 kB
text/typescript
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 ?? "",
}))
);
}
);
}
);
}