mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-08 09:20:06 +02:00
JS - Handle correctly hierarchy of fields (#13133)
* JS - Handle correctly hierarchy of fields - it aims to fix #13132; - annotations can inherit their actions from the parent field; - there are some fields which act as a container for other fields: - they can be access through js so need to add them with an empty type (nothing in the spec about that but checked in Acrobat); - calculation order list (CO) can reference them so need make them through this.getField; - getArray method must return kids. - field values are number, string, ... depending of their type but nothing in the spec on how to know what's the type: - according to the comment for Canonical Format: https://www.adobe.com/content/dam/acom/en/devnet/pdf/pdfs/PDF32000_2008.pdf#page=461 - it seems that this "type" can be guessed from js action Format (when setting a type in Acrobat DC, the only affected thing is this action). - util.scand with an empty string returns the current date.
This commit is contained in:
parent
75a6b2fa13
commit
84d7cccb1d
13 changed files with 337 additions and 106 deletions
|
@ -13,8 +13,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { createActionsMap, FieldType, getFieldType } from "./common.js";
|
||||
import { Color } from "./color.js";
|
||||
import { createActionsMap } from "./common.js";
|
||||
import { PDFObject } from "./pdf_object.js";
|
||||
|
||||
class Field extends PDFObject {
|
||||
|
@ -82,8 +82,11 @@ class Field extends PDFObject {
|
|||
this._textColor = data.textColor || ["G", 0];
|
||||
this._value = data.value || "";
|
||||
this._valueAsString = data.valueAsString;
|
||||
this._kidIds = data.kidIds || null;
|
||||
this._fieldType = getFieldType(this._actions);
|
||||
|
||||
this._globalEval = data.globalEval;
|
||||
this._appObjects = data.appObjects;
|
||||
}
|
||||
|
||||
get currentValueIndices() {
|
||||
|
@ -200,7 +203,23 @@ class Field extends PDFObject {
|
|||
}
|
||||
|
||||
set value(value) {
|
||||
this._value = value;
|
||||
if (value === "") {
|
||||
this._value = "";
|
||||
} else if (typeof value === "string") {
|
||||
switch (this._fieldType) {
|
||||
case FieldType.number:
|
||||
case FieldType.percent:
|
||||
value = parseFloat(value);
|
||||
if (!isNaN(value)) {
|
||||
this._value = value;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
this._value = value;
|
||||
}
|
||||
} else {
|
||||
this._value = value;
|
||||
}
|
||||
if (this._isChoice) {
|
||||
if (this.multipleSelection) {
|
||||
const values = new Set(value);
|
||||
|
@ -332,6 +351,10 @@ class Field extends PDFObject {
|
|||
}
|
||||
|
||||
getArray() {
|
||||
if (this._kidIds) {
|
||||
return this._kidIds.map(id => this._appObjects[id].wrapped);
|
||||
}
|
||||
|
||||
if (this._children === null) {
|
||||
this._children = this._document.obj._getChildren(this._fieldPath);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue