Merge pull request #15805 from Snuffleupagus/XfaLayerBuilder-render-async

Change the `XfaLayerBuilder.render` method to be asynchronous
This commit is contained in:
Tim van der Meij 2022-12-11 14:02:45 +01:00 committed by GitHub
commit 6c2f34b6bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -55,9 +55,9 @@ class XfaLayerBuilder {
* @param {string} intent (default value is 'display') * @param {string} intent (default value is 'display')
* @returns {Promise<Object | void>} A promise that is resolved when rendering * @returns {Promise<Object | void>} A promise that is resolved when rendering
* of the XFA layer is complete. The first rendering will return an object * of the XFA layer is complete. The first rendering will return an object
* with a `textDivs` property that can be used with the TextHighlighter. * with a `textDivs` property that can be used with the TextHighlighter.
*/ */
render(viewport, intent = "display") { async render(viewport, intent = "display") {
if (intent === "print") { if (intent === "print") {
const parameters = { const parameters = {
viewport: viewport.clone({ dontFlip: true }), viewport: viewport.clone({ dontFlip: true }),
@ -73,39 +73,33 @@ class XfaLayerBuilder {
this.pageDiv.append(div); this.pageDiv.append(div);
parameters.div = div; parameters.div = div;
const result = XfaLayer.render(parameters); return XfaLayer.render(parameters);
return Promise.resolve(result);
} }
// intent === "display" // intent === "display"
return this.pdfPage const xfaHtml = await this.pdfPage.getXfa();
.getXfa() if (this._cancelled || !xfaHtml) {
.then(xfaHtml => { return { textDivs: [] };
if (this._cancelled || !xfaHtml) { }
return { textDivs: [] };
}
const parameters = { const parameters = {
viewport: viewport.clone({ dontFlip: true }), viewport: viewport.clone({ dontFlip: true }),
div: this.div, div: this.div,
xfaHtml, xfaHtml,
annotationStorage: this.annotationStorage, annotationStorage: this.annotationStorage,
linkService: this.linkService, linkService: this.linkService,
intent, intent,
}; };
if (this.div) { if (this.div) {
return XfaLayer.update(parameters); return XfaLayer.update(parameters);
} }
// Create an xfa layer div and render the form // Create an xfa layer div and render the form
this.div = document.createElement("div"); this.div = document.createElement("div");
this.pageDiv.append(this.div); this.pageDiv.append(this.div);
parameters.div = this.div; parameters.div = this.div;
return XfaLayer.render(parameters);
}) return XfaLayer.render(parameters);
.catch(error => {
console.error(error);
});
} }
cancel() { cancel() {