mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-09 09:45:42 +02:00
Don't store complex data in PDFDocument.formInfo
, and replace the fields
object with a hasFields
boolean instead
*This patch is based on a couple of smaller things that I noticed when working on PR 12479.* - Don't store the /Fields on the `formInfo` getter, since that feels like overloading it with unintended (and too complex) data, and utilize a `hasFields` boolean instead. This functionality was originally added in PR 12271, to help determine what kind of form data a PDF document contains, and I think that we should ensure that the return value of `formInfo` only consists of "simple" data. With these changes the `fieldObjects` getter instead has to look-up the /Fields manually, however that shouldn't be a problem since the access is guarded by a `formInfo.hasFields` check which ensures that the data both exists and is valid. Furthermore, most documents doesn't even have any /AcroForm data anyway. - Determine the `hasFields` property *first*, to ensure that it's always correct even if there's errors when checking e.g. the /XFA or /SigFlags entires, since the `fieldObjects` getter depends on it. - Simplify a loop in `fieldObjects`, since the object being accessed is a `Map` and those have built-in iteration support. - Use a higher logging level for errors in the `formInfo` getter, and include the actual error message, since that'd have helped with fixing PR 12479 a lot quicker. - Update the JSDoc comment in `src/display/api.js` to list the return values correctly, and also slightly extend/improve the description.
This commit is contained in:
parent
b710fbcb00
commit
3351d3476d
3 changed files with 22 additions and 24 deletions
|
@ -878,8 +878,9 @@ class PDFDocumentProxy {
|
|||
}
|
||||
|
||||
/**
|
||||
* @returns {Promise<Array<Object>>} A promise that is resolved with an
|
||||
* {Array<Object>} containing field data for the JS sandbox.
|
||||
* @returns {Promise<Array<Object> | null>} A promise that is resolved with an
|
||||
* {Array<Object>} containing /AcroForm field data for the JS sandbox,
|
||||
* or `null` when no field data is present in the PDF file.
|
||||
*/
|
||||
getFieldObjects() {
|
||||
return this._transport.getFieldObjects();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue