Skip to content

Commit 93e6390

Browse files
committed
Merge branch 'bogie-master'
2 parents 3d7f2b9 + f7e860a commit 93e6390

7 files changed

Lines changed: 68 additions & 6653 deletions

File tree

lib/pdf.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,10 @@ export default class PDFJSClass extends EventEmitter {
351351
return PDFField.getAllFieldsTypes({ Pages: this.pages || [] });
352352
}
353353

354+
getAllFieldData() {
355+
return PDFField.getAllFieldData({ Pages: this.pages || [] });
356+
}
357+
354358
getMergedTextBlocksIfNeeded() {
355359
for (let p = 0; p < this.pages.length; p++) {
356360
let prevText = null;

lib/pdfanno.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import nodeUtil from "util";
22

33
//BEGIN - MQZ 9/19/2012. Helper functions to parse acroForm elements
44
function setupRadioButton(annotation, item) {
5-
let asName = '';
5+
//let asName = '';
66
//PDF Spec p.689: parent item's DV holds the item's value that is selected by default
77
const po = annotation.get('Parent');
88
if (po) {
99
po.forEach((key, val) => {
1010
if (key === 'DV') {
11-
asName = val.name || '';
11+
//asName = val.name || '';
1212
}
1313
else if (key === 'TU') {
1414
//radio buttons use the alternative text from the parent
@@ -28,7 +28,8 @@ function setupRadioButton(annotation, item) {
2828
if (key.toLowerCase() !== "off") {
2929
//value if selected
3030
item.value = key; //export value
31-
item.checked = (key === asName); //initial selection state
31+
32+
item.checked = (item.fieldValue === item.value); //initial selection state
3233
}
3334
});
3435

lib/pdffield.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,7 @@ export default class PDFField {
270270
//static public method to generate fieldsType object based on parser result
271271
static getAllFieldsTypes(data) {
272272
const isFieldReadOnly = field => (field.AM & kFBANotOverridable) ? true : false;
273+
273274
const getFieldBase = field => ({
274275
id: field.id.Id,
275276
type: field.T.Name,
@@ -295,4 +296,45 @@ export default class PDFField {
295296
});
296297
return retVal;
297298
}
299+
300+
//static public method to generate data output for all field types
301+
static getAllFieldData(data) {
302+
const isFieldReadOnly = field => (field.AM & kFBANotOverridable) ? true : false;
303+
304+
function getFieldValue(field) {
305+
switch(field.T.Name) {
306+
case 'box':
307+
return field.checked === undefined ? false : field.checked;
308+
case 'alpha':
309+
case 'date':
310+
default:
311+
return field.V;
312+
}
313+
}
314+
const getFieldBase = field => ({
315+
id: field.id.Id,
316+
type: field.T.Name,
317+
calc: isFieldReadOnly(field),
318+
value: getFieldValue(field)
319+
});
320+
321+
const retVal = [];
322+
data.Pages.forEach( page => {
323+
page.Boxsets.forEach( boxsets => {
324+
if (boxsets.boxes.length > 1) { //radio button
325+
boxsets.boxes.forEach( box => {
326+
if(box.checked)
327+
retVal.push({ id: boxsets.id.Id, type: "radio", calc: isFieldReadOnly(box), value: box.id.Id });
328+
});
329+
}
330+
else { //checkbox
331+
retVal.push(getFieldBase(boxsets.boxes[0]));
332+
}
333+
});
334+
335+
page.Fields.forEach(field => retVal.push(getFieldBase(field)));
336+
337+
});
338+
return retVal;
339+
}
298340
}

0 commit comments

Comments
 (0)