diff --git a/src/core/module/module.js b/src/core/module/module.js index 2c15162d8929d4..19c24a6723213e 100644 --- a/src/core/module/module.js +++ b/src/core/module/module.js @@ -172,6 +172,16 @@ export class Module { } async getPageLabels() { - return getPageLabels(this._pdfDocument, this._structuredCharsProvider); + if (this._pageLabelsPromise) { + await this._pageLabelsPromise; + return this._pageLabels; + } + let resolvePageLabelsPromise; + this._pageLabelsPromise = new Promise((resolve) => { + resolvePageLabelsPromise = resolve; + }); + this._pageLabels = await getPageLabels(this._pdfDocument, this._structuredCharsProvider); + resolvePageLabelsPromise(); + return this._pageLabels; } } diff --git a/src/core/worker.js b/src/core/worker.js index 720b79a51f29f2..d4146ea98820d1 100644 --- a/src/core/worker.js +++ b/src/core/worker.js @@ -850,6 +850,19 @@ class WorkerMessageHandler { return pageData; }); + handler.on("GetPageLabels2", async function (data) { + let task = new WorkerTask('GetPageLabels2: '); + startWorkerTask(task); + let pageLabels; + try { + pageLabels = await pdfManager.pdfDocument.module.getPageLabels(data); + } catch (e) { + console.log(e); + } + finishWorkerTask(task); + return pageLabels; + }); + handler.on("GetOutline2", async function (data) { let task = new WorkerTask('GetOutline2'); startWorkerTask(task); diff --git a/src/display/api.js b/src/display/api.js index 0a9ba2359cb545..9d672b8d099386 100644 --- a/src/display/api.js +++ b/src/display/api.js @@ -953,6 +953,10 @@ class PDFDocumentProxy { return this._transport.messageHandler.sendWithPromise("GetProcessedData", data); } + getPageLabels2(data) { + return this._transport.messageHandler.sendWithPromise("GetPageLabels2", data); + } + getOutline2(data) { return this._transport.messageHandler.sendWithPromise("GetOutline2", data); }