|
|
@ -18,7 +18,7 @@ |
|
|
|
isArrayBuffer, isDict, isName, isStream, isString, Lexer, |
|
|
|
isArrayBuffer, isDict, isName, isStream, isString, Lexer, |
|
|
|
Linearization, NullStream, PartialEvaluator, shadow, Stream, |
|
|
|
Linearization, NullStream, PartialEvaluator, shadow, Stream, |
|
|
|
StreamsSequenceStream, stringToPDFString, TODO, Util, warn, XRef, |
|
|
|
StreamsSequenceStream, stringToPDFString, TODO, Util, warn, XRef, |
|
|
|
MissingDataException, Promise, Annotation */ |
|
|
|
MissingDataException, Promise, Annotation, ObjectLoader */ |
|
|
|
|
|
|
|
|
|
|
|
'use strict'; |
|
|
|
'use strict'; |
|
|
|
|
|
|
|
|
|
|
@ -51,6 +51,7 @@ var Page = (function PageClosure() { |
|
|
|
font: 0, |
|
|
|
font: 0, |
|
|
|
obj: 0 |
|
|
|
obj: 0 |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
this.resourcesPromise = null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
Page.prototype = { |
|
|
|
Page.prototype = { |
|
|
@ -133,6 +134,22 @@ var Page = (function PageClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
return stream; |
|
|
|
return stream; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
loadResources: function(keys) { |
|
|
|
|
|
|
|
if (!this.resourcesPromise) { |
|
|
|
|
|
|
|
// TODO: add async inheritPageProp and remove this.
|
|
|
|
|
|
|
|
this.resourcesPromise = this.pdfManager.ensure(this, 'resources'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
var promise = new Promise(); |
|
|
|
|
|
|
|
this.resourcesPromise.then(function resourceSuccess() { |
|
|
|
|
|
|
|
var objectLoader = new ObjectLoader(this.resources.map, |
|
|
|
|
|
|
|
keys, |
|
|
|
|
|
|
|
this.xref); |
|
|
|
|
|
|
|
objectLoader.load().then(function objectLoaderSuccess() { |
|
|
|
|
|
|
|
promise.resolve(); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}.bind(this)); |
|
|
|
|
|
|
|
return promise; |
|
|
|
|
|
|
|
}, |
|
|
|
getOperatorList: function Page_getOperatorList(handler) { |
|
|
|
getOperatorList: function Page_getOperatorList(handler) { |
|
|
|
var self = this; |
|
|
|
var self = this; |
|
|
|
var promise = new Promise(); |
|
|
|
var promise = new Promise(); |
|
|
@ -146,7 +163,16 @@ var Page = (function PageClosure() { |
|
|
|
var pdfManager = this.pdfManager; |
|
|
|
var pdfManager = this.pdfManager; |
|
|
|
var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', |
|
|
|
var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', |
|
|
|
[]); |
|
|
|
[]); |
|
|
|
var resourcesPromise = pdfManager.ensure(this, 'resources'); |
|
|
|
var resourcesPromise = this.loadResources([ |
|
|
|
|
|
|
|
'ExtGState', |
|
|
|
|
|
|
|
'ColorSpace', |
|
|
|
|
|
|
|
'Pattern', |
|
|
|
|
|
|
|
'Shading', |
|
|
|
|
|
|
|
'XObject', |
|
|
|
|
|
|
|
'Font', |
|
|
|
|
|
|
|
// ProcSet
|
|
|
|
|
|
|
|
// Properties
|
|
|
|
|
|
|
|
]); |
|
|
|
|
|
|
|
|
|
|
|
var partialEvaluator = new PartialEvaluator( |
|
|
|
var partialEvaluator = new PartialEvaluator( |
|
|
|
pdfManager, this.xref, handler, |
|
|
|
pdfManager, this.xref, handler, |
|
|
@ -157,14 +183,10 @@ var Page = (function PageClosure() { |
|
|
|
[contentStreamPromise, resourcesPromise], reject); |
|
|
|
[contentStreamPromise, resourcesPromise], reject); |
|
|
|
dataPromises.then(function(data) { |
|
|
|
dataPromises.then(function(data) { |
|
|
|
var contentStream = data[0]; |
|
|
|
var contentStream = data[0]; |
|
|
|
var resources = data[1]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pdfManager.ensure(partialEvaluator, 'getOperatorList', |
|
|
|
partialEvaluator.getOperatorList(contentStream, self.resources).then( |
|
|
|
[contentStream, resources]).then( |
|
|
|
function(data) { |
|
|
|
function(opListPromise) { |
|
|
|
|
|
|
|
opListPromise.then(function(data) { |
|
|
|
|
|
|
|
pageListPromise.resolve(data); |
|
|
|
pageListPromise.resolve(data); |
|
|
|
}); |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
reject |
|
|
|
reject |
|
|
|
); |
|
|
|
); |
|
|
@ -175,6 +197,7 @@ var Page = (function PageClosure() { |
|
|
|
var pageData = datas[0]; |
|
|
|
var pageData = datas[0]; |
|
|
|
var pageQueue = pageData.queue; |
|
|
|
var pageQueue = pageData.queue; |
|
|
|
var annotations = datas[1]; |
|
|
|
var annotations = datas[1]; |
|
|
|
|
|
|
|
|
|
|
|
if (annotations.length === 0) { |
|
|
|
if (annotations.length === 0) { |
|
|
|
PartialEvaluator.optimizeQueue(pageQueue); |
|
|
|
PartialEvaluator.optimizeQueue(pageQueue); |
|
|
|
promise.resolve(pageData); |
|
|
|
promise.resolve(pageData); |
|
|
@ -186,6 +209,7 @@ var Page = (function PageClosure() { |
|
|
|
annotations, pageQueue, pdfManager, dependencies, partialEvaluator); |
|
|
|
annotations, pageQueue, pdfManager, dependencies, partialEvaluator); |
|
|
|
annotationsReadyPromise.then(function () { |
|
|
|
annotationsReadyPromise.then(function () { |
|
|
|
PartialEvaluator.optimizeQueue(pageQueue); |
|
|
|
PartialEvaluator.optimizeQueue(pageQueue); |
|
|
|
|
|
|
|
|
|
|
|
promise.resolve(pageData); |
|
|
|
promise.resolve(pageData); |
|
|
|
}, reject); |
|
|
|
}, reject); |
|
|
|
}, reject); |
|
|
|
}, reject); |
|
|
@ -205,27 +229,24 @@ var Page = (function PageClosure() { |
|
|
|
var pdfManager = this.pdfManager; |
|
|
|
var pdfManager = this.pdfManager; |
|
|
|
var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', |
|
|
|
var contentStreamPromise = pdfManager.ensure(this, 'getContentStream', |
|
|
|
[]); |
|
|
|
[]); |
|
|
|
var resourcesPromise = new Promise(); |
|
|
|
|
|
|
|
pdfManager.ensure(this, 'resources').then(function(resources) { |
|
|
|
var resourcesPromise = this.loadResources([ |
|
|
|
pdfManager.ensure(self.xref, 'fetchIfRef', [resources]).then( |
|
|
|
'ExtGState', |
|
|
|
function(resources) { |
|
|
|
'XObject', |
|
|
|
resourcesPromise.resolve(resources); |
|
|
|
'Font' |
|
|
|
} |
|
|
|
]); |
|
|
|
); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var dataPromises = Promise.all([contentStreamPromise, |
|
|
|
var dataPromises = Promise.all([contentStreamPromise, |
|
|
|
resourcesPromise]); |
|
|
|
resourcesPromise]); |
|
|
|
dataPromises.then(function(data) { |
|
|
|
dataPromises.then(function(data) { |
|
|
|
var contentStream = data[0]; |
|
|
|
var contentStream = data[0]; |
|
|
|
var resources = data[1]; |
|
|
|
|
|
|
|
var partialEvaluator = new PartialEvaluator( |
|
|
|
var partialEvaluator = new PartialEvaluator( |
|
|
|
pdfManager, self.xref, handler, |
|
|
|
pdfManager, self.xref, handler, |
|
|
|
self.pageIndex, 'p' + self.pageIndex + '_', |
|
|
|
self.pageIndex, 'p' + self.pageIndex + '_', |
|
|
|
self.idCounters); |
|
|
|
self.idCounters); |
|
|
|
|
|
|
|
|
|
|
|
partialEvaluator.getTextContent( |
|
|
|
partialEvaluator.getTextContent( |
|
|
|
contentStream, resources).then(function(bidiTexts) { |
|
|
|
contentStream, self.resources).then(function(bidiTexts) { |
|
|
|
textContentPromise.resolve({ |
|
|
|
textContentPromise.resolve({ |
|
|
|
bidiTexts: bidiTexts |
|
|
|
bidiTexts: bidiTexts |
|
|
|
}); |
|
|
|
}); |
|
|
@ -282,7 +303,7 @@ var PDFDocument = (function PDFDocumentClosure() { |
|
|
|
assertWellFormed(stream.length > 0, 'stream must have data'); |
|
|
|
assertWellFormed(stream.length > 0, 'stream must have data'); |
|
|
|
this.pdfManager = pdfManager; |
|
|
|
this.pdfManager = pdfManager; |
|
|
|
this.stream = stream; |
|
|
|
this.stream = stream; |
|
|
|
var xref = new XRef(this.stream, password); |
|
|
|
var xref = new XRef(this.stream, password, pdfManager); |
|
|
|
this.xref = xref; |
|
|
|
this.xref = xref; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|