mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-25 09:38: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
|
@ -287,19 +287,34 @@ function _collectJS(entry, xref, list, parents) {
|
|||
|
||||
function collectActions(xref, dict, eventType) {
|
||||
const actions = Object.create(null);
|
||||
if (dict.has("AA")) {
|
||||
const additionalActions = dict.get("AA");
|
||||
for (const key of additionalActions.getKeys()) {
|
||||
const action = eventType[key];
|
||||
if (!action) {
|
||||
const additionalActionsDicts = getInheritableProperty({
|
||||
dict,
|
||||
key: "AA",
|
||||
stopWhenFound: false,
|
||||
});
|
||||
if (additionalActionsDicts) {
|
||||
// additionalActionsDicts contains dicts from ancestors
|
||||
// as they're found in the tree from bottom to top.
|
||||
// So the dicts are visited in reverse order to guarantee
|
||||
// that actions from elder ancestors will be overwritten
|
||||
// by ones from younger ancestors.
|
||||
for (let i = additionalActionsDicts.length - 1; i >= 0; i--) {
|
||||
const additionalActions = additionalActionsDicts[i];
|
||||
if (!(additionalActions instanceof Dict)) {
|
||||
continue;
|
||||
}
|
||||
const actionDict = additionalActions.getRaw(key);
|
||||
const parents = new RefSet();
|
||||
const list = [];
|
||||
_collectJS(actionDict, xref, list, parents);
|
||||
if (list.length > 0) {
|
||||
actions[action] = list;
|
||||
for (const key of additionalActions.getKeys()) {
|
||||
const action = eventType[key];
|
||||
if (!action) {
|
||||
continue;
|
||||
}
|
||||
const actionDict = additionalActions.getRaw(key);
|
||||
const parents = new RefSet();
|
||||
const list = [];
|
||||
_collectJS(actionDict, xref, list, parents);
|
||||
if (list.length > 0) {
|
||||
actions[action] = list;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue