mirror of
https://github.com/zen-browser/pdf.js.git
synced 2025-07-10 10:15:37 +02:00
Fixing inheritable forms input control properties
This commit is contained in:
parent
1c18d054d5
commit
1d8a40b372
1 changed files with 40 additions and 13 deletions
53
src/core.js
53
src/core.js
|
@ -274,11 +274,22 @@ var Page = (function pagePage() {
|
||||||
},
|
},
|
||||||
getAnnotations: function pageGetAnnotations() {
|
getAnnotations: function pageGetAnnotations() {
|
||||||
var xref = this.xref;
|
var xref = this.xref;
|
||||||
|
function getInheritableProperty(annotation, name) {
|
||||||
|
var item = annotation;
|
||||||
|
while (item && !item.has(name)) {
|
||||||
|
item = xref.fetchIfRef(item.get('Parent'));
|
||||||
|
}
|
||||||
|
if (!item)
|
||||||
|
return null;
|
||||||
|
return item.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
var annotations = xref.fetchIfRef(this.annotations) || [];
|
var annotations = xref.fetchIfRef(this.annotations) || [];
|
||||||
var i, n = annotations.length;
|
var i, n = annotations.length;
|
||||||
var items = [];
|
var items = [];
|
||||||
for (i = 0; i < n; ++i) {
|
for (i = 0; i < n; ++i) {
|
||||||
var annotation = xref.fetch(annotations[i]);
|
var annotationRef = annotations[i];
|
||||||
|
var annotation = xref.fetch(annotationRef);
|
||||||
if (!isDict(annotation))
|
if (!isDict(annotation))
|
||||||
continue;
|
continue;
|
||||||
var subtype = annotation.get('Subtype');
|
var subtype = annotation.get('Subtype');
|
||||||
|
@ -315,30 +326,46 @@ var Page = (function pagePage() {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'Widget':
|
case 'Widget':
|
||||||
var fieldType = annotation.get('FT');
|
var fieldType = getInheritableProperty(annotation, 'FT');
|
||||||
if (!isName(fieldType))
|
if (!isName(fieldType))
|
||||||
break;
|
break;
|
||||||
item.fieldType = fieldType.name;
|
item.fieldType = fieldType.name;
|
||||||
|
// Building the full field name by collecting the field and
|
||||||
|
// its ancestors 'T' properties and joining them using '.'.
|
||||||
var fieldName = [];
|
var fieldName = [];
|
||||||
var name = stringToPDFString(annotation.get('T'));
|
var namedItem = annotation, ref = annotationRef;
|
||||||
if (name)
|
while (namedItem) {
|
||||||
fieldName.push(name);
|
var parentRef = namedItem.get('Parent');
|
||||||
var parent = xref.fetchIfRef(annotation.get('Parent'));
|
var parent = xref.fetchIfRef(parentRef);
|
||||||
while (parent) {
|
var name = namedItem.get('T');
|
||||||
name = stringToPDFString(parent.get('T'));
|
|
||||||
if (name)
|
if (name)
|
||||||
fieldName.unshift(name);
|
fieldName.unshift(stringToPDFString(name));
|
||||||
parent = xref.fetchIfRef(parent.get('Parent'));
|
else {
|
||||||
|
// The field name is absent, that means more than one field
|
||||||
|
// with the same name may exist. Replacing the empty name
|
||||||
|
// with the '`' plus index in the parent's 'Kids' array.
|
||||||
|
// This is not in the PDF spec but necessary to id the
|
||||||
|
// the input controls.
|
||||||
|
var kids = xref.fetchIfRef(parent.get('Kids'));
|
||||||
|
var j, jj;
|
||||||
|
for (j = 0, jj = kids.length; j < jj; j++) {
|
||||||
|
if (kids[j].num == ref.num && kids[j].gen == ref.gen)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fieldName.unshift('`' + j);
|
||||||
|
}
|
||||||
|
namedItem = parent;
|
||||||
|
ref = parentRef;
|
||||||
}
|
}
|
||||||
item.fullName = fieldName.join('.');
|
item.fullName = fieldName.join('.');
|
||||||
var alternativeText = stringToPDFString(annotation.get('TU') || '');
|
var alternativeText = stringToPDFString(annotation.get('TU') || '');
|
||||||
item.alternativeText = alternativeText;
|
item.alternativeText = alternativeText;
|
||||||
var da = annotation.get('DA') || '';
|
var da = getInheritableProperty(annotation, 'DA') || '';
|
||||||
var m = /([\d\.]+)\sTf/.exec(da);
|
var m = /([\d\.]+)\sTf/.exec(da);
|
||||||
if (m)
|
if (m)
|
||||||
item.fontSize = parseFloat(m[1]);
|
item.fontSize = parseFloat(m[1]);
|
||||||
item.textAlignment = annotation.get('Q');
|
item.textAlignment = getInheritableProperty(annotation, 'Q');
|
||||||
item.flags = annotation.get('Ff') || 0;
|
item.flags = getInheritableProperty(annotation, 'Ff') || 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
items.push(item);
|
items.push(item);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue