Better errors capturing at the core and stop rendering on error.
This commit is contained in:
parent
4784863ef7
commit
8ba413e761
@ -755,7 +755,16 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
|
||||
var timeSlotManager = new TimeSlotManager();
|
||||
|
||||
return new Promise(function next(resolve, reject) {
|
||||
return new Promise(function promiseBody(resolve, reject) {
|
||||
var next = function (promise) {
|
||||
promise.then(function () {
|
||||
try {
|
||||
promiseBody(resolve, reject);
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
}, reject);
|
||||
};
|
||||
task.ensureNotTerminated();
|
||||
timeSlotManager.reset();
|
||||
var stop, operation = {}, i, ii, cs;
|
||||
@ -798,13 +807,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
|
||||
if (type.name === 'Form') {
|
||||
stateManager.save();
|
||||
return self.buildFormXObject(resources, xobj, null,
|
||||
next(self.buildFormXObject(resources, xobj, null,
|
||||
operatorList, task,
|
||||
stateManager.state.clone()).
|
||||
then(function () {
|
||||
stateManager.restore();
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
}));
|
||||
return;
|
||||
} else if (type.name === 'Image') {
|
||||
self.buildPaintImageXObject(resources, xobj, false,
|
||||
operatorList, name, imageCache);
|
||||
@ -823,13 +832,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
case OPS.setFont:
|
||||
var fontSize = args[1];
|
||||
// eagerly collect all fonts
|
||||
return self.handleSetFont(resources, args, null, operatorList,
|
||||
next(self.handleSetFont(resources, args, null, operatorList,
|
||||
task, stateManager.state).
|
||||
then(function (loadedName) {
|
||||
operatorList.addDependency(loadedName);
|
||||
operatorList.addOp(OPS.setFont, [loadedName, fontSize]);
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
}));
|
||||
return;
|
||||
case OPS.endInlineImage:
|
||||
var cacheKey = args[0].cacheKey;
|
||||
if (cacheKey) {
|
||||
@ -929,10 +938,9 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
case OPS.setFillColorN:
|
||||
cs = stateManager.state.fillColorSpace;
|
||||
if (cs.name === 'Pattern') {
|
||||
return self.handleColorN(operatorList, OPS.setFillColorN,
|
||||
args, cs, patterns, resources, task, xref).then(function() {
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
next(self.handleColorN(operatorList, OPS.setFillColorN, args,
|
||||
cs, patterns, resources, task, xref));
|
||||
return;
|
||||
}
|
||||
args = cs.getRgb(args, 0);
|
||||
fn = OPS.setFillRGBColor;
|
||||
@ -940,10 +948,9 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
case OPS.setStrokeColorN:
|
||||
cs = stateManager.state.strokeColorSpace;
|
||||
if (cs.name === 'Pattern') {
|
||||
return self.handleColorN(operatorList, OPS.setStrokeColorN,
|
||||
args, cs, patterns, resources, task, xref).then(function() {
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
next(self.handleColorN(operatorList, OPS.setStrokeColorN, args,
|
||||
cs, patterns, resources, task, xref));
|
||||
return;
|
||||
}
|
||||
args = cs.getRgb(args, 0);
|
||||
fn = OPS.setStrokeRGBColor;
|
||||
@ -975,10 +982,9 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
}
|
||||
|
||||
var gState = extGState.get(dictName.name);
|
||||
return self.setGState(resources, gState, operatorList, task,
|
||||
xref, stateManager).then(function() {
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
next(self.setGState(resources, gState, operatorList, task, xref,
|
||||
stateManager));
|
||||
return;
|
||||
case OPS.moveTo:
|
||||
case OPS.lineTo:
|
||||
case OPS.curveTo:
|
||||
@ -1023,9 +1029,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
operatorList.addOp(fn, args);
|
||||
}
|
||||
if (stop) {
|
||||
deferred.then(function () {
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
next(deferred);
|
||||
return;
|
||||
}
|
||||
// Some PDFs don't close all restores inside object/form.
|
||||
@ -1301,7 +1305,16 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
|
||||
var timeSlotManager = new TimeSlotManager();
|
||||
|
||||
return new Promise(function next(resolve, reject) {
|
||||
return new Promise(function promiseBody(resolve, reject) {
|
||||
var next = function (promise) {
|
||||
promise.then(function () {
|
||||
try {
|
||||
promiseBody(resolve, reject);
|
||||
} catch (ex) {
|
||||
reject(ex);
|
||||
}
|
||||
}, reject);
|
||||
};
|
||||
task.ensureNotTerminated();
|
||||
timeSlotManager.reset();
|
||||
var stop, operation = {}, args = [];
|
||||
@ -1323,9 +1336,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
case OPS.setFont:
|
||||
flushTextContentItem();
|
||||
textState.fontSize = args[1];
|
||||
return handleSetFont(args[0].name).then(function() {
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
next(handleSetFont(args[0].name));
|
||||
return;
|
||||
case OPS.setTextRise:
|
||||
flushTextContentItem();
|
||||
textState.textRise = args[0];
|
||||
@ -1496,7 +1508,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
stateManager.transform(matrix);
|
||||
}
|
||||
|
||||
return self.getTextContent(xobj, task,
|
||||
next(self.getTextContent(xobj, task,
|
||||
xobj.dict.get('Resources') || resources, stateManager,
|
||||
normalizeWhitespace).then(function (formTextContent) {
|
||||
Util.appendToArray(textContent.items, formTextContent.items);
|
||||
@ -1505,9 +1517,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
|
||||
xobjsCache.key = name;
|
||||
xobjsCache.texts = formTextContent;
|
||||
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
}));
|
||||
return;
|
||||
case OPS.setGState:
|
||||
flushTextContentItem();
|
||||
var dictName = args[0];
|
||||
@ -1527,17 +1538,14 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
|
||||
}
|
||||
if (gsStateFont) {
|
||||
textState.fontSize = gsStateFont[1];
|
||||
return handleSetFont(gsStateFont[0]).then(function() {
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
next(handleSetFont(gsStateFont[0]));
|
||||
return;
|
||||
}
|
||||
break;
|
||||
} // switch
|
||||
} // while
|
||||
if (stop) {
|
||||
deferred.then(function () {
|
||||
next(resolve, reject);
|
||||
}, reject);
|
||||
next(deferred);
|
||||
return;
|
||||
}
|
||||
flushTextContentItem();
|
||||
|
@ -1716,11 +1716,20 @@ var WorkerTransport = (function WorkerTransportClosure() {
|
||||
|
||||
var page = this.pageCache[data.pageNum - 1];
|
||||
var intentState = page.intentStates[data.intent];
|
||||
|
||||
if (intentState.displayReadyCapability) {
|
||||
intentState.displayReadyCapability.reject(data.error);
|
||||
} else {
|
||||
error(data.error);
|
||||
}
|
||||
|
||||
if (intentState.operatorList) {
|
||||
// Mark operator list as complete.
|
||||
intentState.operatorList.lastChunk = true;
|
||||
for (var i = 0; i < intentState.renderTasks.length; i++) {
|
||||
intentState.renderTasks[i].operatorListChanged();
|
||||
}
|
||||
}
|
||||
}, this);
|
||||
|
||||
messageHandler.on('UnsupportedFeature',
|
||||
|
Loading…
Reference in New Issue
Block a user