mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-09 09:45:42 +02:00
XFA - Add a layer to display XFA forms (#13069)
- add an option to enable XFA rendering if any; - for now, let the canvas layer: it could be useful to implement XFAF forms (embedded pdf in xml stream for the background and xfa form for the foreground); - ui elements in template DOM are pretty close to their html counterpart so we generate a fake html DOM from template one: - it makes easier to translate template properties to html ones; - it makes faster the creation of the html element in the main thread.
This commit is contained in:
parent
a164941351
commit
24e598a895
20 changed files with 760 additions and 27 deletions
|
@ -162,6 +162,8 @@ function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
|
|||
* parsed font data from the worker-thread. This may be useful for debugging
|
||||
* purposes (and backwards compatibility), but note that it will lead to
|
||||
* increased memory usage. The default value is `false`.
|
||||
* @property {boolean} [enableXfa] - Render Xfa forms if any.
|
||||
* The default value is `false`.
|
||||
* @property {HTMLDocument} [ownerDocument] - Specify an explicit document
|
||||
* context to create elements with and to load resources, such as fonts,
|
||||
* into. Defaults to the current document.
|
||||
|
@ -284,6 +286,7 @@ function getDocument(src) {
|
|||
params.ignoreErrors = params.stopAtErrors !== true;
|
||||
params.fontExtraProperties = params.fontExtraProperties === true;
|
||||
params.pdfBug = params.pdfBug === true;
|
||||
params.enableXfa = params.enableXfa === true;
|
||||
|
||||
if (!Number.isInteger(params.maxImageSize)) {
|
||||
params.maxImageSize = -1;
|
||||
|
@ -438,6 +441,7 @@ function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
|
|||
ignoreErrors: source.ignoreErrors,
|
||||
isEvalSupported: source.isEvalSupported,
|
||||
fontExtraProperties: source.fontExtraProperties,
|
||||
enableXfa: source.enableXfa,
|
||||
})
|
||||
.then(function (workerId) {
|
||||
if (worker.destroyed) {
|
||||
|
@ -674,6 +678,13 @@ class PDFDocumentProxy {
|
|||
return this._pdfInfo.fingerprint;
|
||||
}
|
||||
|
||||
/**
|
||||
* @type {boolean} True if only XFA form.
|
||||
*/
|
||||
get isPureXfa() {
|
||||
return this._pdfInfo.isPureXfa;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {number} pageNumber - The page number to get. The first page is 1.
|
||||
* @returns {Promise<PDFPageProxy>} A promise that is resolved with
|
||||
|
@ -1165,6 +1176,16 @@ class PDFPageProxy {
|
|||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @returns {Promise<Object | null>} A promise that is resolved with
|
||||
* an {Object} with a fake DOM object (a tree structure where elements
|
||||
* are {Object} with a name, attributes (class, style, ...), value and
|
||||
* children, very similar to a HTML DOM tree), or `null` if no XFA exists.
|
||||
*/
|
||||
getXfa() {
|
||||
return (this._xfaPromise ||= this._transport.getPageXfa(this._pageIndex));
|
||||
}
|
||||
|
||||
/**
|
||||
* Begins the process of rendering a page to the desired context.
|
||||
*
|
||||
|
@ -2709,6 +2730,12 @@ class WorkerTransport {
|
|||
});
|
||||
}
|
||||
|
||||
getPageXfa(pageIndex) {
|
||||
return this.messageHandler.sendWithPromise("GetPageXfa", {
|
||||
pageIndex,
|
||||
});
|
||||
}
|
||||
|
||||
getOutline() {
|
||||
return this.messageHandler.sendWithPromise("GetOutline", null);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue