Browse Source

PDF.js version 1.0.229

master v1.0.229
Yury Delendik 11 years ago
parent
commit
6453c81676
  1. 2
      bower.json
  2. 313
      build/pdf.combined.js
  3. 30
      build/pdf.js
  4. 313
      build/pdf.worker.js
  5. 2
      package.json

2
bower.json

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
{
"name": "pdfjs-dist",
"version": "1.0.226",
"version": "1.0.229",
"keywords": [
"Mozilla",
"pdf",

313
build/pdf.combined.js

@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') { @@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') {
(typeof window !== 'undefined' ? window : this).PDFJS = {};
}
PDFJS.version = '1.0.226';
PDFJS.build = '09b24d5';
PDFJS.version = '1.0.229';
PDFJS.build = '7079992';
(function pdfjsWrapper() {
// Use strict in our context only - users might not want it
@ -3386,11 +3386,9 @@ var Annotation = (function AnnotationClosure() { @@ -3386,11 +3386,9 @@ var Annotation = (function AnnotationClosure() {
},
getOperatorList: function Annotation_getOperatorList(evaluator) {
var capability = createPromiseCapability();
if (!this.appearance) {
capability.resolve(new OperatorList());
return capability.promise;
return Promise.resolve(new OperatorList());
}
var data = this.data;
@ -3409,18 +3407,18 @@ var Annotation = (function AnnotationClosure() { @@ -3409,18 +3407,18 @@ var Annotation = (function AnnotationClosure() {
var bbox = appearanceDict.get('BBox') || [0, 0, 1, 1];
var matrix = appearanceDict.get('Matrix') || [1, 0, 0, 1, 0 ,0];
var transform = getTransformMatrix(data.rect, bbox, matrix);
var self = this;
resourcesPromise.then(function(resources) {
return resourcesPromise.then(function(resources) {
var opList = new OperatorList();
opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]);
evaluator.getOperatorList(this.appearance, resources, opList);
return evaluator.getOperatorList(self.appearance, resources, opList).
then(function () {
opList.addOp(OPS.endAnnotation, []);
capability.resolve(opList);
this.appearance.reset();
}.bind(this), capability.reject);
return capability.promise;
self.appearance.reset();
return opList;
});
});
}
};
@ -3679,8 +3677,10 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() { @@ -3679,8 +3677,10 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
}
var stream = new Stream(stringToBytes(data.defaultAppearance));
evaluator.getOperatorList(stream, this.fieldResources, opList);
return Promise.resolve(opList);
return evaluator.getOperatorList(stream, this.fieldResources, opList).
then(function () {
return opList;
});
}
});
@ -9632,13 +9632,6 @@ var Page = (function PageClosure() { @@ -9632,13 +9632,6 @@ var Page = (function PageClosure() {
getOperatorList: function Page_getOperatorList(handler, intent) {
var self = this;
var capability = createPromiseCapability();
function reject(e) {
capability.reject(e);
}
var pageListCapability = createPromiseCapability();
var pdfManager = this.pdfManager;
var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
@ -9660,9 +9653,8 @@ var Page = (function PageClosure() { @@ -9660,9 +9653,8 @@ var Page = (function PageClosure() {
this.idCounters,
this.fontCache);
var dataPromises = Promise.all([contentStreamPromise, resourcesPromise],
reject);
dataPromises.then(function(data) {
var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
var pageListPromise = dataPromises.then(function(data) {
var contentStream = data[0];
var opList = new OperatorList(intent, handler, self.pageIndex);
@ -9671,31 +9663,30 @@ var Page = (function PageClosure() { @@ -9671,31 +9663,30 @@ var Page = (function PageClosure() {
pageIndex: self.pageIndex,
intent: intent
});
partialEvaluator.getOperatorList(contentStream, self.resources, opList);
pageListCapability.resolve(opList);
return partialEvaluator.getOperatorList(contentStream, self.resources,
opList).then(function () {
return opList;
});
});
var annotationsPromise = pdfManager.ensure(this, 'annotations');
Promise.all([pageListCapability.promise, annotationsPromise]).then(
return Promise.all([pageListPromise, annotationsPromise]).then(
function(datas) {
var pageOpList = datas[0];
var annotations = datas[1];
if (annotations.length === 0) {
pageOpList.flush(true);
capability.resolve(pageOpList);
return;
return pageOpList;
}
var annotationsReadyPromise = Annotation.appendToOperatorList(
annotations, pageOpList, pdfManager, partialEvaluator, intent);
annotationsReadyPromise.then(function () {
return annotationsReadyPromise.then(function () {
pageOpList.flush(true);
capability.resolve(pageOpList);
}, reject);
}, reject);
return capability.promise;
return pageOpList;
});
});
},
extractTextContent: function Page_extractTextContent() {
@ -10496,11 +10487,17 @@ var Catalog = (function CatalogClosure() { @@ -10496,11 +10487,17 @@ var Catalog = (function CatalogClosure() {
},
cleanup: function Catalog_cleanup() {
this.fontCache.forEach(function (font) {
delete font.sent;
delete font.translated;
var promises = [];
this.fontCache.forEach(function (promise) {
promises.push(promise);
});
return Promise.all(promises).then(function (fonts) {
for (var i = 0, ii = fonts.length; i < ii; i++) {
delete fonts[i].sent;
delete fonts[i].translated;
}
this.fontCache.clear();
}.bind(this));
},
getPage: function Catalog_getPage(pageIndex) {
@ -20096,6 +20093,28 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20096,6 +20093,28 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
this.fontCache = fontCache;
}
// Trying to minimize Date.now() usage and check every 100 time
var TIME_SLOT_DURATION_MS = 20;
var CHECK_TIME_EVERY = 100;
function TimeSlotManager() {
this.reset();
}
TimeSlotManager.prototype = {
check: function TimeSlotManager_check() {
if (++this.checked < CHECK_TIME_EVERY) {
return false;
}
this.checked = 0;
return this.endTime <= Date.now();
},
reset: function TimeSlotManager_reset() {
this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
this.checked = 0;
}
};
var deferred = Promise.resolve();
var TILING_PATTERN = 1, SHADING_PATTERN = 2;
PartialEvaluator.prototype = {
@ -20179,13 +20198,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20179,13 +20198,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
operatorList.addOp(OPS.paintFormXObjectBegin, [matrix, bbox]);
this.getOperatorList(xobj, (xobj.dict.get('Resources') || resources),
operatorList, initialState);
return this.getOperatorList(xobj,
(xobj.dict.get('Resources') || resources), operatorList, initialState).
then(function () {
operatorList.addOp(OPS.paintFormXObjectEnd, []);
if (group) {
operatorList.addOp(OPS.endGroup, [groupOptions]);
}
});
},
buildPaintImageXObject:
@ -20294,7 +20315,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20294,7 +20315,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
subtype: smask.get('S').name,
backdrop: smask.get('BC')
};
this.buildFormXObject(resources, smaskContent, smaskOptions,
return this.buildFormXObject(resources, smaskContent, smaskOptions,
operatorList, stateManager.state.clone());
},
@ -20303,15 +20324,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20303,15 +20324,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
pattern, patternDict,
operatorList) {
// Create an IR of the pattern code.
var tilingOpList = this.getOperatorList(pattern,
(patternDict.get('Resources') || resources));
// Add the dependencies to the parent operator list so they are resolved
// before sub operator list is executed synchronously.
var tilingOpList = new OperatorList();
return this.getOperatorList(pattern,
(patternDict.get('Resources') || resources), tilingOpList).
then(function () {
// Add the dependencies to the parent operator list so they are
// resolved before sub operator list is executed synchronously.
operatorList.addDependencies(tilingOpList.dependencies);
operatorList.addOp(fn, getTilingPatternIR({
fnArray: tilingOpList.fnArray,
argsArray: tilingOpList.argsArray
}, patternDict, args));
});
},
handleSetFont:
@ -20324,8 +20348,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20324,8 +20348,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
fontName = fontArgs[0].name;
}
var self = this;
var font = this.loadFont(fontName, fontRef, this.xref, resources,
operatorList);
return this.loadFont(fontName, fontRef, this.xref, resources,
operatorList).then(function (font) {
state.font = font;
var loadedName = font.loadedName;
if (!font.sent) {
@ -20340,6 +20364,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20340,6 +20364,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
return loadedName;
});
},
handleText: function PartialEvaluator_handleText(chars, state) {
@ -20382,7 +20407,6 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20382,7 +20407,6 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
operatorList, xref,
stateManager) {
var self = this;
// TODO(mack): This should be rewritten so that this function returns
// what should be added to the queue during each iteration
function setGStateForKey(gStateObj, key, value) {
@ -20401,11 +20425,14 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20401,11 +20425,14 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
gStateObj.push([key, value]);
break;
case 'Font':
var loadedName = self.handleSetFont(resources, null, value[0],
operatorList,
stateManager.state);
promise = promise.then(function () {
return self.handleSetFont(resources, null, value[0],
operatorList, stateManager.state).
then(function (loadedName) {
operatorList.addDependency(loadedName);
gStateObj.push([key, [loadedName, value[1]]]);
});
});
break;
case 'BM':
gStateObj.push([key, value]);
@ -20417,7 +20444,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20417,7 +20444,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
var dict = xref.fetchIfRef(value);
if (isDict(dict)) {
self.handleSMask(dict, resources, operatorList, stateManager);
promise = promise.then(function () {
return self.handleSMask(dict, resources, operatorList,
stateManager);
});
gStateObj.push([key, true]);
} else {
warn('Unsupported SMask type');
@ -20452,12 +20482,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20452,12 +20482,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
// This array holds the converted/processed state data.
var gStateObj = [];
var gStateMap = gState.map;
var self = this;
var promise = Promise.resolve();
for (var key in gStateMap) {
var value = gStateMap[key];
setGStateForKey(gStateObj, key, value);
}
return promise.then(function () {
operatorList.addOp(OPS.setGState, [gStateObj]);
});
},
loadFont: function PartialEvaluator_loadFont(fontName, font, xref,
@ -20465,10 +20498,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20465,10 +20498,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
parentOperatorList) {
function errorFont() {
return {
return Promise.resolve({
translated: new ErrorFont('Font ' + fontName + ' is not available'),
loadedName: 'g_font_error'
};
});
}
var fontRef;
@ -20493,6 +20526,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20493,6 +20526,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
return errorFont();
}
var fontCapability = createPromiseCapability();
var preEvaluatedFont = this.preEvaluateFont(font, xref);
var descriptor = preEvaluatedFont.descriptor;
var fontID = fontRef.num + '_' + fontRef.gen;
@ -20529,7 +20564,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20529,7 +20564,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
// fontName in font.loadedName below.
var fontRefIsDict = isDict(fontRef);
if (!fontRefIsDict) {
this.fontCache.put(fontRef, font);
this.fontCache.put(fontRef, fontCapability.promise);
}
// Keep track of each font we translated so the caller can
@ -20548,27 +20583,38 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20548,27 +20583,38 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
font.translated = translated;
}
var loadCharProcsPromise = Promise.resolve();
if (font.translated.loadCharProcs) {
var charProcs = font.get('CharProcs').getAll();
var fontResources = (font.get('Resources') || resources);
var charProcKeys = Object.keys(charProcs);
var charProcOperatorList = {};
for (var i = 0, n = charProcKeys.length; i < n; ++i) {
var key = charProcKeys[i];
loadCharProcsPromise = loadCharProcsPromise.then(function (key) {
var glyphStream = charProcs[key];
var operatorList = this.getOperatorList(glyphStream, fontResources);
var operatorList = new OperatorList();
return this.getOperatorList(glyphStream, fontResources,
operatorList).
then(function () {
charProcOperatorList[key] = operatorList.getIR();
if (!parentOperatorList) {
continue;
}
// Add the dependencies to the parent operator list so they are
// resolved before sub operator list is executed synchronously.
parentOperatorList.addDependencies(charProcOperatorList.dependencies);
if (parentOperatorList) {
parentOperatorList.addDependencies(operatorList.dependencies);
}
});
}.bind(this, charProcKeys[i]));
}
loadCharProcsPromise = loadCharProcsPromise.then(function () {
font.translated.charProcOperatorList = charProcOperatorList;
});
}
return loadCharProcsPromise.then(function () {
font.loaded = true;
return font;
fontCapability.resolve(font);
return fontCapability.promise;
}, fontCapability.reject);
},
buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) {
@ -20592,19 +20638,23 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20592,19 +20638,23 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
var xref = this.xref;
var imageCache = {};
operatorList = (operatorList || new OperatorList());
assert(operatorList);
resources = (resources || Dict.empty);
var xobjs = (resources.get('XObject') || Dict.empty);
var patterns = (resources.get('Pattern') || Dict.empty);
var stateManager = new StateManager(initialState || new EvalState());
var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
var shading;
var timeSlotManager = new TimeSlotManager();
var operation, i, ii;
while ((operation = preprocessor.read())) {
return new Promise(function next(resolve, reject) {
timeSlotManager.reset();
var stop, operation, i, ii;
while (!(stop = timeSlotManager.check()) &&
(operation = preprocessor.read())) {
var args = operation.args;
var fn = operation.fn;
var shading;
switch (fn | 0) {
case OPS.setStrokeColorN:
@ -20622,10 +20672,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20622,10 +20672,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
var typeNum = dict.get('PatternType');
if (typeNum == TILING_PATTERN) {
self.handleTilingType(fn, args, resources, pattern, dict,
operatorList);
args = [];
continue;
return self.handleTilingType(fn, args, resources, pattern,
dict, operatorList).then(
function() {
next(resolve, reject);
}, reject);
} else if (typeNum == SHADING_PATTERN) {
shading = dict.get('Shading');
var matrix = dict.get('Matrix');
@ -20633,7 +20684,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20633,7 +20684,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
resources);
args = pattern.getIR();
} else {
error('Unkown PatternType ' + typeNum);
error('Unknown PatternType ' + typeNum);
}
}
break;
@ -20659,11 +20710,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20659,11 +20710,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
if ('Form' == type.name) {
stateManager.save();
self.buildFormXObject(resources, xobj, null, operatorList,
stateManager.state.clone());
args = [];
return self.buildFormXObject(resources, xobj, null,
operatorList,
stateManager.state.clone()).
then(function () {
stateManager.restore();
continue;
next(resolve, reject);
}, reject);
} else if ('Image' == type.name) {
self.buildPaintImageXObject(resources, xobj, false,
operatorList, name, imageCache);
@ -20675,13 +20728,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20675,13 +20728,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
break;
case OPS.setFont:
var fontSize = args[1];
// eagerly collect all fonts
var loadedName = self.handleSetFont(resources, args, null,
operatorList,
stateManager.state);
return self.handleSetFont(resources, args, null,
operatorList, stateManager.state).
then(function (loadedName) {
operatorList.addDependency(loadedName);
args[0] = loadedName;
break;
operatorList.addOp(OPS.setFont, [loadedName, fontSize]);
next(resolve, reject);
}, reject);
case OPS.endInlineImage:
var cacheKey = args[0].cacheKey;
if (cacheKey && imageCache.key === cacheKey) {
@ -20694,22 +20749,22 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20694,22 +20749,22 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
args = [];
continue;
case OPS.showText:
args[0] = this.handleText(args[0], stateManager.state);
args[0] = self.handleText(args[0], stateManager.state);
break;
case OPS.showSpacedText:
var arr = args[0];
var arrLength = arr.length;
for (i = 0; i < arrLength; ++i) {
if (isString(arr[i])) {
arr[i] = this.handleText(arr[i], stateManager.state);
arr[i] = self.handleText(arr[i], stateManager.state);
}
}
break;
case OPS.nextLineShowText:
args[0] = this.handleText(args[0], stateManager.state);
args[0] = self.handleText(args[0], stateManager.state);
break;
case OPS.nextLineSetSpacingShowText:
args[2] = this.handleText(args[2], stateManager.state);
args[2] = self.handleText(args[2], stateManager.state);
break;
case OPS.setTextRenderingMode:
stateManager.state.textRenderingMode = args[0];
@ -20745,10 +20800,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20745,10 +20800,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
var gState = extGState.get(dictName.name);
self.setGState(resources, gState, operatorList, xref,
stateManager);
args = [];
continue;
return self.setGState(resources, gState, operatorList, xref,
stateManager).then(function() {
next(resolve, reject);
}, reject);
case OPS.moveTo:
case OPS.lineTo:
case OPS.curveTo:
@ -20760,14 +20815,19 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20760,14 +20815,19 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
operatorList.addOp(fn, args);
}
if (stop) {
deferred.then(function () {
next(resolve, reject);
});
return;
}
// Some PDFs don't close all restores inside object/form.
// Closing those for them.
for (i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
operatorList.addOp(OPS.restore, []);
}
return operatorList;
resolve();
});
},
getTextContent: function PartialEvaluator_getTextContent(stream, resources,
@ -20825,10 +20885,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20825,10 +20885,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
function handleSetFont(fontName, fontRef) {
var font = textState.font = self.loadFont(fontName, fontRef, xref,
resources, null).translated;
textState.fontMatrix = font.fontMatrix ? font.fontMatrix :
return self.loadFont(fontName, fontRef, xref, resources, null).
then(function (font) {
var fontTranslated = textState.font = font.translated;
textState.fontMatrix = fontTranslated.fontMatrix ?
fontTranslated.fontMatrix :
FONT_IDENTITY_MATRIX;
});
}
function buildTextGeometry(chars, textChunk) {
@ -20923,15 +20986,22 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20923,15 +20986,22 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
return textChunk;
}
while ((operation = preprocessor.read())) {
var timeSlotManager = new TimeSlotManager();
return new Promise(function next(resolve, reject) {
timeSlotManager.reset();
var stop;
while (!(stop = timeSlotManager.check()) &&
(operation = preprocessor.read())) {
textState = stateManager.state;
var fn = operation.fn;
var args = operation.args;
switch (fn | 0) {
case OPS.setFont:
handleSetFont(args[0].name);
textState.fontSize = args[1];
break;
return handleSetFont(args[0].name).then(function() {
next(resolve, reject);
}, reject);
case OPS.setTextRise:
textState.textRise = args[0];
break;
@ -20984,7 +21054,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -20984,7 +21054,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
textState.translateTextMatrix(offset, 0);
textChunk.width += offset;
} else {
offset = -val * textState.fontSize * textState.textMatrix[3];
offset = -val * textState.fontSize *
textState.textMatrix[3];
textState.translateTextMatrix(0, offset);
textChunk.height += offset;
}
@ -21056,18 +21127,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -21056,18 +21127,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
stateManager.transform(matrix);
}
var formTextContent = this.getTextContent(
xobj,
xobj.dict.get('Resources') || resources,
stateManager
);
return self.getTextContent(xobj,
xobj.dict.get('Resources') || resources, stateManager).
then(function (formTextContent) {
Util.concatenateToArray(bidiTexts, formTextContent.items);
Util.extendObj(textContent.styles, formTextContent.styles);
stateManager.restore();
xobjsCache.key = name;
xobjsCache.texts = formTextContent;
break;
next(resolve, reject);
}, reject);
case OPS.setGState:
var dictName = args[0];
var extGState = resources.get('ExtGState');
@ -21076,18 +21147,31 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -21076,18 +21147,31 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
break;
}
var gsState = extGState.get(dictName.name);
for (var i = 0; i < gsState.length; i++) {
if (gsState[i] === 'Font') {
handleSetFont(args[0].name);
var gsStateMap = extGState.get(dictName.name);
var gsStateFont = null;
for (var key in gsStateMap) {
if (key === 'Font') {
assert(!gsStateFont);
gsStateFont = gsStateMap[key];
}
}
if (gsStateFont) {
textState.fontSize = gsStateFont[1];
return handleSetFont(gsStateFont[0]).then(function() {
next(resolve, reject);
}, reject);
}
break;
} // switch
} // while
return textContent;
if (stop) {
deferred.then(function () {
next(resolve, reject);
});
return;
}
resolve(textContent);
});
},
extractDataStructures: function
@ -42411,8 +42495,7 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = { @@ -42411,8 +42495,7 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
});
handler.on('Cleanup', function wphCleanup(data) {
pdfManager.cleanup();
return true;
return pdfManager.cleanup();
});
handler.on('Terminate', function wphTerminate(data) {

30
build/pdf.js

@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') { @@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') {
(typeof window !== 'undefined' ? window : this).PDFJS = {};
}
PDFJS.version = '1.0.226';
PDFJS.build = '09b24d5';
PDFJS.version = '1.0.229';
PDFJS.build = '7079992';
(function pdfjsWrapper() {
// Use strict in our context only - users might not want it
@ -3386,11 +3386,9 @@ var Annotation = (function AnnotationClosure() { @@ -3386,11 +3386,9 @@ var Annotation = (function AnnotationClosure() {
},
getOperatorList: function Annotation_getOperatorList(evaluator) {
var capability = createPromiseCapability();
if (!this.appearance) {
capability.resolve(new OperatorList());
return capability.promise;
return Promise.resolve(new OperatorList());
}
var data = this.data;
@ -3409,18 +3407,18 @@ var Annotation = (function AnnotationClosure() { @@ -3409,18 +3407,18 @@ var Annotation = (function AnnotationClosure() {
var bbox = appearanceDict.get('BBox') || [0, 0, 1, 1];
var matrix = appearanceDict.get('Matrix') || [1, 0, 0, 1, 0 ,0];
var transform = getTransformMatrix(data.rect, bbox, matrix);
var self = this;
resourcesPromise.then(function(resources) {
return resourcesPromise.then(function(resources) {
var opList = new OperatorList();
opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]);
evaluator.getOperatorList(this.appearance, resources, opList);
return evaluator.getOperatorList(self.appearance, resources, opList).
then(function () {
opList.addOp(OPS.endAnnotation, []);
capability.resolve(opList);
this.appearance.reset();
}.bind(this), capability.reject);
return capability.promise;
self.appearance.reset();
return opList;
});
});
}
};
@ -3679,8 +3677,10 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() { @@ -3679,8 +3677,10 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
}
var stream = new Stream(stringToBytes(data.defaultAppearance));
evaluator.getOperatorList(stream, this.fieldResources, opList);
return Promise.resolve(opList);
return evaluator.getOperatorList(stream, this.fieldResources, opList).
then(function () {
return opList;
});
}
});

313
build/pdf.worker.js vendored

@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') { @@ -21,8 +21,8 @@ if (typeof PDFJS === 'undefined') {
(typeof window !== 'undefined' ? window : this).PDFJS = {};
}
PDFJS.version = '1.0.226';
PDFJS.build = '09b24d5';
PDFJS.version = '1.0.229';
PDFJS.build = '7079992';
(function pdfjsWrapper() {
// Use strict in our context only - users might not want it
@ -3386,11 +3386,9 @@ var Annotation = (function AnnotationClosure() { @@ -3386,11 +3386,9 @@ var Annotation = (function AnnotationClosure() {
},
getOperatorList: function Annotation_getOperatorList(evaluator) {
var capability = createPromiseCapability();
if (!this.appearance) {
capability.resolve(new OperatorList());
return capability.promise;
return Promise.resolve(new OperatorList());
}
var data = this.data;
@ -3409,18 +3407,18 @@ var Annotation = (function AnnotationClosure() { @@ -3409,18 +3407,18 @@ var Annotation = (function AnnotationClosure() {
var bbox = appearanceDict.get('BBox') || [0, 0, 1, 1];
var matrix = appearanceDict.get('Matrix') || [1, 0, 0, 1, 0 ,0];
var transform = getTransformMatrix(data.rect, bbox, matrix);
var self = this;
resourcesPromise.then(function(resources) {
return resourcesPromise.then(function(resources) {
var opList = new OperatorList();
opList.addOp(OPS.beginAnnotation, [data.rect, transform, matrix]);
evaluator.getOperatorList(this.appearance, resources, opList);
return evaluator.getOperatorList(self.appearance, resources, opList).
then(function () {
opList.addOp(OPS.endAnnotation, []);
capability.resolve(opList);
this.appearance.reset();
}.bind(this), capability.reject);
return capability.promise;
self.appearance.reset();
return opList;
});
});
}
};
@ -3679,8 +3677,10 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() { @@ -3679,8 +3677,10 @@ var TextWidgetAnnotation = (function TextWidgetAnnotationClosure() {
}
var stream = new Stream(stringToBytes(data.defaultAppearance));
evaluator.getOperatorList(stream, this.fieldResources, opList);
return Promise.resolve(opList);
return evaluator.getOperatorList(stream, this.fieldResources, opList).
then(function () {
return opList;
});
}
});
@ -5039,13 +5039,6 @@ var Page = (function PageClosure() { @@ -5039,13 +5039,6 @@ var Page = (function PageClosure() {
getOperatorList: function Page_getOperatorList(handler, intent) {
var self = this;
var capability = createPromiseCapability();
function reject(e) {
capability.reject(e);
}
var pageListCapability = createPromiseCapability();
var pdfManager = this.pdfManager;
var contentStreamPromise = pdfManager.ensure(this, 'getContentStream',
@ -5067,9 +5060,8 @@ var Page = (function PageClosure() { @@ -5067,9 +5060,8 @@ var Page = (function PageClosure() {
this.idCounters,
this.fontCache);
var dataPromises = Promise.all([contentStreamPromise, resourcesPromise],
reject);
dataPromises.then(function(data) {
var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]);
var pageListPromise = dataPromises.then(function(data) {
var contentStream = data[0];
var opList = new OperatorList(intent, handler, self.pageIndex);
@ -5078,31 +5070,30 @@ var Page = (function PageClosure() { @@ -5078,31 +5070,30 @@ var Page = (function PageClosure() {
pageIndex: self.pageIndex,
intent: intent
});
partialEvaluator.getOperatorList(contentStream, self.resources, opList);
pageListCapability.resolve(opList);
return partialEvaluator.getOperatorList(contentStream, self.resources,
opList).then(function () {
return opList;
});
});
var annotationsPromise = pdfManager.ensure(this, 'annotations');
Promise.all([pageListCapability.promise, annotationsPromise]).then(
return Promise.all([pageListPromise, annotationsPromise]).then(
function(datas) {
var pageOpList = datas[0];
var annotations = datas[1];
if (annotations.length === 0) {
pageOpList.flush(true);
capability.resolve(pageOpList);
return;
return pageOpList;
}
var annotationsReadyPromise = Annotation.appendToOperatorList(
annotations, pageOpList, pdfManager, partialEvaluator, intent);
annotationsReadyPromise.then(function () {
return annotationsReadyPromise.then(function () {
pageOpList.flush(true);
capability.resolve(pageOpList);
}, reject);
}, reject);
return capability.promise;
return pageOpList;
});
});
},
extractTextContent: function Page_extractTextContent() {
@ -5903,11 +5894,17 @@ var Catalog = (function CatalogClosure() { @@ -5903,11 +5894,17 @@ var Catalog = (function CatalogClosure() {
},
cleanup: function Catalog_cleanup() {
this.fontCache.forEach(function (font) {
delete font.sent;
delete font.translated;
var promises = [];
this.fontCache.forEach(function (promise) {
promises.push(promise);
});
return Promise.all(promises).then(function (fonts) {
for (var i = 0, ii = fonts.length; i < ii; i++) {
delete fonts[i].sent;
delete fonts[i].translated;
}
this.fontCache.clear();
}.bind(this));
},
getPage: function Catalog_getPage(pageIndex) {
@ -15503,6 +15500,28 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15503,6 +15500,28 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
this.fontCache = fontCache;
}
// Trying to minimize Date.now() usage and check every 100 time
var TIME_SLOT_DURATION_MS = 20;
var CHECK_TIME_EVERY = 100;
function TimeSlotManager() {
this.reset();
}
TimeSlotManager.prototype = {
check: function TimeSlotManager_check() {
if (++this.checked < CHECK_TIME_EVERY) {
return false;
}
this.checked = 0;
return this.endTime <= Date.now();
},
reset: function TimeSlotManager_reset() {
this.endTime = Date.now() + TIME_SLOT_DURATION_MS;
this.checked = 0;
}
};
var deferred = Promise.resolve();
var TILING_PATTERN = 1, SHADING_PATTERN = 2;
PartialEvaluator.prototype = {
@ -15586,13 +15605,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15586,13 +15605,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
operatorList.addOp(OPS.paintFormXObjectBegin, [matrix, bbox]);
this.getOperatorList(xobj, (xobj.dict.get('Resources') || resources),
operatorList, initialState);
return this.getOperatorList(xobj,
(xobj.dict.get('Resources') || resources), operatorList, initialState).
then(function () {
operatorList.addOp(OPS.paintFormXObjectEnd, []);
if (group) {
operatorList.addOp(OPS.endGroup, [groupOptions]);
}
});
},
buildPaintImageXObject:
@ -15701,7 +15722,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15701,7 +15722,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
subtype: smask.get('S').name,
backdrop: smask.get('BC')
};
this.buildFormXObject(resources, smaskContent, smaskOptions,
return this.buildFormXObject(resources, smaskContent, smaskOptions,
operatorList, stateManager.state.clone());
},
@ -15710,15 +15731,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15710,15 +15731,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
pattern, patternDict,
operatorList) {
// Create an IR of the pattern code.
var tilingOpList = this.getOperatorList(pattern,
(patternDict.get('Resources') || resources));
// Add the dependencies to the parent operator list so they are resolved
// before sub operator list is executed synchronously.
var tilingOpList = new OperatorList();
return this.getOperatorList(pattern,
(patternDict.get('Resources') || resources), tilingOpList).
then(function () {
// Add the dependencies to the parent operator list so they are
// resolved before sub operator list is executed synchronously.
operatorList.addDependencies(tilingOpList.dependencies);
operatorList.addOp(fn, getTilingPatternIR({
fnArray: tilingOpList.fnArray,
argsArray: tilingOpList.argsArray
}, patternDict, args));
});
},
handleSetFont:
@ -15731,8 +15755,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15731,8 +15755,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
fontName = fontArgs[0].name;
}
var self = this;
var font = this.loadFont(fontName, fontRef, this.xref, resources,
operatorList);
return this.loadFont(fontName, fontRef, this.xref, resources,
operatorList).then(function (font) {
state.font = font;
var loadedName = font.loadedName;
if (!font.sent) {
@ -15747,6 +15771,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15747,6 +15771,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
return loadedName;
});
},
handleText: function PartialEvaluator_handleText(chars, state) {
@ -15789,7 +15814,6 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15789,7 +15814,6 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
operatorList, xref,
stateManager) {
var self = this;
// TODO(mack): This should be rewritten so that this function returns
// what should be added to the queue during each iteration
function setGStateForKey(gStateObj, key, value) {
@ -15808,11 +15832,14 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15808,11 +15832,14 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
gStateObj.push([key, value]);
break;
case 'Font':
var loadedName = self.handleSetFont(resources, null, value[0],
operatorList,
stateManager.state);
promise = promise.then(function () {
return self.handleSetFont(resources, null, value[0],
operatorList, stateManager.state).
then(function (loadedName) {
operatorList.addDependency(loadedName);
gStateObj.push([key, [loadedName, value[1]]]);
});
});
break;
case 'BM':
gStateObj.push([key, value]);
@ -15824,7 +15851,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15824,7 +15851,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
var dict = xref.fetchIfRef(value);
if (isDict(dict)) {
self.handleSMask(dict, resources, operatorList, stateManager);
promise = promise.then(function () {
return self.handleSMask(dict, resources, operatorList,
stateManager);
});
gStateObj.push([key, true]);
} else {
warn('Unsupported SMask type');
@ -15859,12 +15889,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15859,12 +15889,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
// This array holds the converted/processed state data.
var gStateObj = [];
var gStateMap = gState.map;
var self = this;
var promise = Promise.resolve();
for (var key in gStateMap) {
var value = gStateMap[key];
setGStateForKey(gStateObj, key, value);
}
return promise.then(function () {
operatorList.addOp(OPS.setGState, [gStateObj]);
});
},
loadFont: function PartialEvaluator_loadFont(fontName, font, xref,
@ -15872,10 +15905,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15872,10 +15905,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
parentOperatorList) {
function errorFont() {
return {
return Promise.resolve({
translated: new ErrorFont('Font ' + fontName + ' is not available'),
loadedName: 'g_font_error'
};
});
}
var fontRef;
@ -15900,6 +15933,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15900,6 +15933,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
return errorFont();
}
var fontCapability = createPromiseCapability();
var preEvaluatedFont = this.preEvaluateFont(font, xref);
var descriptor = preEvaluatedFont.descriptor;
var fontID = fontRef.num + '_' + fontRef.gen;
@ -15936,7 +15971,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15936,7 +15971,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
// fontName in font.loadedName below.
var fontRefIsDict = isDict(fontRef);
if (!fontRefIsDict) {
this.fontCache.put(fontRef, font);
this.fontCache.put(fontRef, fontCapability.promise);
}
// Keep track of each font we translated so the caller can
@ -15955,27 +15990,38 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15955,27 +15990,38 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
font.translated = translated;
}
var loadCharProcsPromise = Promise.resolve();
if (font.translated.loadCharProcs) {
var charProcs = font.get('CharProcs').getAll();
var fontResources = (font.get('Resources') || resources);
var charProcKeys = Object.keys(charProcs);
var charProcOperatorList = {};
for (var i = 0, n = charProcKeys.length; i < n; ++i) {
var key = charProcKeys[i];
loadCharProcsPromise = loadCharProcsPromise.then(function (key) {
var glyphStream = charProcs[key];
var operatorList = this.getOperatorList(glyphStream, fontResources);
var operatorList = new OperatorList();
return this.getOperatorList(glyphStream, fontResources,
operatorList).
then(function () {
charProcOperatorList[key] = operatorList.getIR();
if (!parentOperatorList) {
continue;
}
// Add the dependencies to the parent operator list so they are
// resolved before sub operator list is executed synchronously.
parentOperatorList.addDependencies(charProcOperatorList.dependencies);
if (parentOperatorList) {
parentOperatorList.addDependencies(operatorList.dependencies);
}
});
}.bind(this, charProcKeys[i]));
}
loadCharProcsPromise = loadCharProcsPromise.then(function () {
font.translated.charProcOperatorList = charProcOperatorList;
});
}
return loadCharProcsPromise.then(function () {
font.loaded = true;
return font;
fontCapability.resolve(font);
return fontCapability.promise;
}, fontCapability.reject);
},
buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) {
@ -15999,19 +16045,23 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -15999,19 +16045,23 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
var xref = this.xref;
var imageCache = {};
operatorList = (operatorList || new OperatorList());
assert(operatorList);
resources = (resources || Dict.empty);
var xobjs = (resources.get('XObject') || Dict.empty);
var patterns = (resources.get('Pattern') || Dict.empty);
var stateManager = new StateManager(initialState || new EvalState());
var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager);
var shading;
var timeSlotManager = new TimeSlotManager();
var operation, i, ii;
while ((operation = preprocessor.read())) {
return new Promise(function next(resolve, reject) {
timeSlotManager.reset();
var stop, operation, i, ii;
while (!(stop = timeSlotManager.check()) &&
(operation = preprocessor.read())) {
var args = operation.args;
var fn = operation.fn;
var shading;
switch (fn | 0) {
case OPS.setStrokeColorN:
@ -16029,10 +16079,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16029,10 +16079,11 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
var typeNum = dict.get('PatternType');
if (typeNum == TILING_PATTERN) {
self.handleTilingType(fn, args, resources, pattern, dict,
operatorList);
args = [];
continue;
return self.handleTilingType(fn, args, resources, pattern,
dict, operatorList).then(
function() {
next(resolve, reject);
}, reject);
} else if (typeNum == SHADING_PATTERN) {
shading = dict.get('Shading');
var matrix = dict.get('Matrix');
@ -16040,7 +16091,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16040,7 +16091,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
resources);
args = pattern.getIR();
} else {
error('Unkown PatternType ' + typeNum);
error('Unknown PatternType ' + typeNum);
}
}
break;
@ -16066,11 +16117,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16066,11 +16117,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
if ('Form' == type.name) {
stateManager.save();
self.buildFormXObject(resources, xobj, null, operatorList,
stateManager.state.clone());
args = [];
return self.buildFormXObject(resources, xobj, null,
operatorList,
stateManager.state.clone()).
then(function () {
stateManager.restore();
continue;
next(resolve, reject);
}, reject);
} else if ('Image' == type.name) {
self.buildPaintImageXObject(resources, xobj, false,
operatorList, name, imageCache);
@ -16082,13 +16135,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16082,13 +16135,15 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
break;
case OPS.setFont:
var fontSize = args[1];
// eagerly collect all fonts
var loadedName = self.handleSetFont(resources, args, null,
operatorList,
stateManager.state);
return self.handleSetFont(resources, args, null,
operatorList, stateManager.state).
then(function (loadedName) {
operatorList.addDependency(loadedName);
args[0] = loadedName;
break;
operatorList.addOp(OPS.setFont, [loadedName, fontSize]);
next(resolve, reject);
}, reject);
case OPS.endInlineImage:
var cacheKey = args[0].cacheKey;
if (cacheKey && imageCache.key === cacheKey) {
@ -16101,22 +16156,22 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16101,22 +16156,22 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
args = [];
continue;
case OPS.showText:
args[0] = this.handleText(args[0], stateManager.state);
args[0] = self.handleText(args[0], stateManager.state);
break;
case OPS.showSpacedText:
var arr = args[0];
var arrLength = arr.length;
for (i = 0; i < arrLength; ++i) {
if (isString(arr[i])) {
arr[i] = this.handleText(arr[i], stateManager.state);
arr[i] = self.handleText(arr[i], stateManager.state);
}
}
break;
case OPS.nextLineShowText:
args[0] = this.handleText(args[0], stateManager.state);
args[0] = self.handleText(args[0], stateManager.state);
break;
case OPS.nextLineSetSpacingShowText:
args[2] = this.handleText(args[2], stateManager.state);
args[2] = self.handleText(args[2], stateManager.state);
break;
case OPS.setTextRenderingMode:
stateManager.state.textRenderingMode = args[0];
@ -16152,10 +16207,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16152,10 +16207,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
var gState = extGState.get(dictName.name);
self.setGState(resources, gState, operatorList, xref,
stateManager);
args = [];
continue;
return self.setGState(resources, gState, operatorList, xref,
stateManager).then(function() {
next(resolve, reject);
}, reject);
case OPS.moveTo:
case OPS.lineTo:
case OPS.curveTo:
@ -16167,14 +16222,19 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16167,14 +16222,19 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
operatorList.addOp(fn, args);
}
if (stop) {
deferred.then(function () {
next(resolve, reject);
});
return;
}
// Some PDFs don't close all restores inside object/form.
// Closing those for them.
for (i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) {
operatorList.addOp(OPS.restore, []);
}
return operatorList;
resolve();
});
},
getTextContent: function PartialEvaluator_getTextContent(stream, resources,
@ -16232,10 +16292,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16232,10 +16292,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
}
function handleSetFont(fontName, fontRef) {
var font = textState.font = self.loadFont(fontName, fontRef, xref,
resources, null).translated;
textState.fontMatrix = font.fontMatrix ? font.fontMatrix :
return self.loadFont(fontName, fontRef, xref, resources, null).
then(function (font) {
var fontTranslated = textState.font = font.translated;
textState.fontMatrix = fontTranslated.fontMatrix ?
fontTranslated.fontMatrix :
FONT_IDENTITY_MATRIX;
});
}
function buildTextGeometry(chars, textChunk) {
@ -16330,15 +16393,22 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16330,15 +16393,22 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
return textChunk;
}
while ((operation = preprocessor.read())) {
var timeSlotManager = new TimeSlotManager();
return new Promise(function next(resolve, reject) {
timeSlotManager.reset();
var stop;
while (!(stop = timeSlotManager.check()) &&
(operation = preprocessor.read())) {
textState = stateManager.state;
var fn = operation.fn;
var args = operation.args;
switch (fn | 0) {
case OPS.setFont:
handleSetFont(args[0].name);
textState.fontSize = args[1];
break;
return handleSetFont(args[0].name).then(function() {
next(resolve, reject);
}, reject);
case OPS.setTextRise:
textState.textRise = args[0];
break;
@ -16391,7 +16461,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16391,7 +16461,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
textState.translateTextMatrix(offset, 0);
textChunk.width += offset;
} else {
offset = -val * textState.fontSize * textState.textMatrix[3];
offset = -val * textState.fontSize *
textState.textMatrix[3];
textState.translateTextMatrix(0, offset);
textChunk.height += offset;
}
@ -16463,18 +16534,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16463,18 +16534,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
stateManager.transform(matrix);
}
var formTextContent = this.getTextContent(
xobj,
xobj.dict.get('Resources') || resources,
stateManager
);
return self.getTextContent(xobj,
xobj.dict.get('Resources') || resources, stateManager).
then(function (formTextContent) {
Util.concatenateToArray(bidiTexts, formTextContent.items);
Util.extendObj(textContent.styles, formTextContent.styles);
stateManager.restore();
xobjsCache.key = name;
xobjsCache.texts = formTextContent;
break;
next(resolve, reject);
}, reject);
case OPS.setGState:
var dictName = args[0];
var extGState = resources.get('ExtGState');
@ -16483,18 +16554,31 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { @@ -16483,18 +16554,31 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
break;
}
var gsState = extGState.get(dictName.name);
for (var i = 0; i < gsState.length; i++) {
if (gsState[i] === 'Font') {
handleSetFont(args[0].name);
var gsStateMap = extGState.get(dictName.name);
var gsStateFont = null;
for (var key in gsStateMap) {
if (key === 'Font') {
assert(!gsStateFont);
gsStateFont = gsStateMap[key];
}
}
if (gsStateFont) {
textState.fontSize = gsStateFont[1];
return handleSetFont(gsStateFont[0]).then(function() {
next(resolve, reject);
}, reject);
}
break;
} // switch
} // while
return textContent;
if (stop) {
deferred.then(function () {
next(resolve, reject);
});
return;
}
resolve(textContent);
});
},
extractDataStructures: function
@ -37818,8 +37902,7 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = { @@ -37818,8 +37902,7 @@ var WorkerMessageHandler = PDFJS.WorkerMessageHandler = {
});
handler.on('Cleanup', function wphCleanup(data) {
pdfManager.cleanup();
return true;
return pdfManager.cleanup();
});
handler.on('Terminate', function wphTerminate(data) {

2
package.json

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
{
"name": "pdfjs-dist",
"version": "1.0.226",
"version": "1.0.229",
"description": "Generic build of Mozilla's PDF.js library.",
"keywords": [
"Mozilla",

Loading…
Cancel
Save