Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue 7613, Parse AcroForm Dictionary #8625

Closed
wants to merge 37 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
8fc65e0
https://github.com/mozilla/pdf.js/issues/7613, Parse AcroForm diction…
Jul 5, 2017
935b60c
https://github.com/mozilla/pdf.js/issues/7613, Parse AcroForm diction…
Jul 6, 2017
3d1562c
Merge remote-tracking branch 'upstream/master'
Jul 6, 2017
a0db250
Merge with master
Jul 11, 2017
836988d
Merge with master
dmitryskey Jul 11, 2017
589a3c1
Merge with the master branch
dmitryskey Jul 26, 2017
09f5aec
Fix annotation fonts initialization for pages after the first one
dmitryskey Aug 3, 2017
b806d5e
Merge remote-tracking branch 'upstream/master'
dmitryskey Aug 3, 2017
8f179f5
Merge remote-tracking branch 'upstream/master'
dmitryskey Aug 10, 2017
92cf274
Additional validation of parameters
dmitryskey Aug 12, 2017
0c169fe
Merge remote-tracking branch 'upstream/master'
dmitryskey Aug 30, 2017
6b7cd74
Merge with master
dmitryskey Aug 30, 2017
bcc9665
Merge with upstream/master
dmitryskey Sep 1, 2017
58200df
Merge with upstream/master
dmitryskey Sep 1, 2017
94a422a
merge with upstream/master
dmitryskey Sep 1, 2017
94380e0
Merge remote-tracking branch 'upstream/master'
dmitryskey Sep 8, 2017
f80e808
Merge remote-tracking branch 'upstream/master'
dmitryskey Sep 12, 2017
64c966d
Merge remote-tracking branch 'upstream/master'
dmitryskey Sep 19, 2017
7069267
Merge remote-tracking branch 'upstream/master'
dmitryskey Sep 21, 2017
a75993f
Merge remote-tracking branch 'upstream/master'
dmitryskey Oct 3, 2017
20849aa
Merge remote-tracking branch 'upstream/master'
dmitryskey Oct 4, 2017
3ef1098
Merge remote-tracking branch 'upstream/master'
dmitryskey Oct 17, 2017
0212ff3
Merge remote-tracking branch 'upstream/master'
dmitryskey Nov 5, 2017
710db0a
Merge remote-tracking branch 'upstream/master'
dmitryskey Nov 23, 2017
8e976a0
Merge with upstream/master
dmitryskey Nov 23, 2017
e3ae959
Add auto-sizing, more accurate DDL implementation, checkbox/radio but…
dmitryskey Nov 23, 2017
037a25c
Merge with upstream/master
dmitryskey Nov 28, 2017
9f3173a
Merge remote-tracking branch 'upstream/master'
dmitryskey Dec 13, 2017
78dff6f
Change header
dmitryskey Dec 19, 2017
759029d
Merge with upstream/master
dmitryskey Dec 19, 2017
264a82c
Code refactoring
dmitryskey Dec 23, 2017
3a0a056
Merge remote-tracking branch 'upstream/master'
dmitryskey Dec 23, 2017
c5ac86e
Merge remote-tracking branch 'upstream/master'
dmitryskey Jan 10, 2018
1cf339a
Merge with upstream
dmitryskey Jan 10, 2018
edadcb3
Add keyboard search to DDL
dmitryskey Jan 24, 2018
797f842
Merge remote-tracking branch 'upstream/master'
dmitryskey Jan 24, 2018
24ef8e6
Adjust DDL scrolling
dmitryskey Jan 25, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
279 changes: 224 additions & 55 deletions src/core/annotation.js

Large diffs are not rendered by default.

124 changes: 103 additions & 21 deletions src/core/document.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,10 @@
*/

import { Catalog, ObjectLoader, XRef } from './obj';
import { createPromiseCapability, error, info, isArrayBuffer, isNum,
isSpace, isString, MissingDataException, OPS, shadow, stringToBytes,
stringToPDFString, Util, warn } from '../shared/util';
import { Dict, isDict, isName, isStream } from './primitives';
import {
info, isArrayBuffer, isNum, isSpace, isString, MissingDataException, OPS,
shadow, stringToBytes, stringToPDFString, Util, warn
} from '../shared/util';
import { NullStream, Stream, StreamsSequenceStream } from './stream';
import { AnnotationFactory } from './annotation';
import { calculateMD5 } from './crypto';
Expand Down Expand Up @@ -241,7 +240,7 @@ var Page = (function PageClosure() {

// Fetch the page's annotations and add their operator lists to the
// page's operator list to render them.
var annotationsPromise = this.pdfManager.ensure(this, 'annotations');
var annotationsPromise = this.annotations;
return Promise.all([pageListPromise, annotationsPromise]).then(
function ([pageOpList, annotations]) {
if (annotations.length === 0) {
Expand All @@ -255,7 +254,7 @@ var Page = (function PageClosure() {
for (i = 0, ii = annotations.length; i < ii; i++) {
if (isAnnotationRenderable(annotations[i], intent)) {
opListPromises.push(annotations[i].getOperatorList(
partialEvaluator, task, renderInteractiveForms));
partialEvaluator, task, true));
}
}

Expand Down Expand Up @@ -308,29 +307,112 @@ var Page = (function PageClosure() {
},

getAnnotationsData: function Page_getAnnotationsData(intent) {
var annotations = this.annotations;
var annotationsData = [];
for (var i = 0, n = annotations.length; i < n; ++i) {
if (!intent || isAnnotationRenderable(annotations[i], intent)) {
annotationsData.push(annotations[i].data);
var annotationsPromise = this.annotations;
return annotationsPromise.then(function (annotations) {
var annotationsData = [];
for (var i = 0, n = annotations.length; i < n; ++i) {
if (!intent || isAnnotationRenderable(annotations[i], intent)) {
annotationsData.push(annotations[i].data);
}
}
}
return annotationsData;
return annotationsData;
});
},

get annotations() {
var annotations = [];
var AnnotationWorkerTask = (function AnnotationWorkerTaskClosure() {
function AnnotationWorkerTask(name) {
this.name = name;
this.terminated = false;
this.capability = createPromiseCapability();
}

AnnotationWorkerTask.prototype = {
get finished() {
return this.capability.promise;
},

finish() {
this.capability.resolve();
},

terminate() {
this.terminated = true;
},

ensureNotTerminated() {
if (this.terminated) {
throw new Error('Annotation worker task was terminated');
}
},
};

return AnnotationWorkerTask;
})();

// create a blank annotation fonts array
// if it's not initialized yet
if (this.pdfManager && this.pdfManager.pdfDocument &&
this.pdfManager.pdfDocument.acroForm &&
!this.pdfManager.pdfDocument.acroForm.annotationFonts) {
this.pdfManager.pdfDocument.acroForm.annotationFonts = [];
}

var task = new AnnotationWorkerTask(
'GetAnnotationAppereances: page ' + this.pageIndex);

var handler = {};

var self = this;

handler.send = function (actionname, data) {
if (self.pdfManager && self.pdfManager.pdfDocument &&
self.pdfManager.pdfDocument.acroForm) {
self.pdfManager.pdfDocument.acroForm.annotationFonts.push(data);
}
};

var pageNum = this.pageIndex + 1;
var start = Date.now();

var partialEvaluator = new PartialEvaluator({
pdfManager: this.pdfManager,
xref: this.xref,
handler,
pageIndex: this.pageIndex,
idFactory: this.idFactory,
fontCache: this.fontCache,
builtInCMapCache: this.builtInCMapCache,
options: this.evaluatorOptions,
});

var annotationRefs = this.getInheritedPageProp('Annots') || [];
var annotationsPromise = [];
for (var i = 0, n = annotationRefs.length; i < n; ++i) {
var annotationRef = annotationRefs[i];
var annotation = AnnotationFactory.create(this.xref, annotationRef,
this.pdfManager,
this.idFactory);
if (annotation) {
annotations.push(annotation);
}
annotationsPromise.push(AnnotationFactory.create(
this.xref,
annotationRef,
this.pdfManager,
this.idFactory,
partialEvaluator,
task
));
}
return shadow(this, 'annotations', annotations);

return shadow(this, 'annotations',
Promise.all(annotationsPromise)).then(function (annotations) {

task.finish();
info('page=' + pageNum + ' - annotations: time=' +
(Date.now() - start) +
'ms, len=' + annotations.length);

return annotations;
}, function (reason) {
error('page=' + pageNum + 'error: ' + reason);
return [];
});
},
};

Expand Down
5 changes: 4 additions & 1 deletion src/core/worker.js
Original file line number Diff line number Diff line change
Expand Up @@ -725,7 +725,10 @@ var WorkerMessageHandler = {

handler.on('GetAnnotations', function wphSetupGetAnnotations(data) {
return pdfManager.getPage(data.pageIndex).then(function(page) {
return pdfManager.ensure(page, 'getAnnotationsData', [data.intent]);
var annotationsDataPromise = page.getAnnotationsData(data.intent);
return annotationsDataPromise.then(function (annotationsData) {
return annotationsData;
});
});
});

Expand Down
Loading