|
|
@ -19,15 +19,17 @@ |
|
|
|
IDENTITY_MATRIX, info, isArray, isCmd, isDict, isEOF, isName, isNum, |
|
|
|
IDENTITY_MATRIX, info, isArray, isCmd, isDict, isEOF, isName, isNum, |
|
|
|
isStream, isString, JpegStream, Lexer, Metrics, Name, Parser, |
|
|
|
isStream, isString, JpegStream, Lexer, Metrics, Name, Parser, |
|
|
|
Pattern, PDFImage, PDFJS, serifFonts, stdFontMap, symbolsFonts, |
|
|
|
Pattern, PDFImage, PDFJS, serifFonts, stdFontMap, symbolsFonts, |
|
|
|
TilingPattern, TODO, warn, Util, MissingDataException, globalScope */ |
|
|
|
TilingPattern, TODO, warn, Util, MissingDataException, Promise */ |
|
|
|
|
|
|
|
|
|
|
|
'use strict'; |
|
|
|
'use strict'; |
|
|
|
|
|
|
|
|
|
|
|
var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
function PartialEvaluator(xref, handler, pageIndex, uniquePrefix) { |
|
|
|
function PartialEvaluator(pdfManager, xref, handler, pageIndex, |
|
|
|
|
|
|
|
uniquePrefix) { |
|
|
|
this.state = new EvalState(); |
|
|
|
this.state = new EvalState(); |
|
|
|
this.stateStack = []; |
|
|
|
this.stateStack = []; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
this.pdfManager = pdfManager; |
|
|
|
this.xref = xref; |
|
|
|
this.xref = xref; |
|
|
|
this.handler = handler; |
|
|
|
this.handler = handler; |
|
|
|
this.pageIndex = pageIndex; |
|
|
|
this.pageIndex = pageIndex; |
|
|
@ -165,7 +167,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
buildFormXObject: function PartialEvaluator_buildFormXObject(resources, |
|
|
|
buildFormXObject: function PartialEvaluator_buildFormXObject(resources, |
|
|
|
xobj, smask) { |
|
|
|
xobj, smask) { |
|
|
|
var self = this; |
|
|
|
var self = this; |
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
var fnArray = []; |
|
|
|
var fnArray = []; |
|
|
|
var argsArray = []; |
|
|
|
var argsArray = []; |
|
|
|
|
|
|
|
|
|
|
@ -302,7 +304,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
fn, args, resources, pattern, patternDict) { |
|
|
|
fn, args, resources, pattern, patternDict) { |
|
|
|
var self = this; |
|
|
|
var self = this; |
|
|
|
// Create an IR of the pattern code.
|
|
|
|
// Create an IR of the pattern code.
|
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
var opListPromise = this.getOperatorList(pattern, |
|
|
|
var opListPromise = this.getOperatorList(pattern, |
|
|
|
patternDict.get('Resources') || resources); |
|
|
|
patternDict.get('Resources') || resources); |
|
|
|
opListPromise.then(function(data) { |
|
|
|
opListPromise.then(function(data) { |
|
|
@ -324,7 +326,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
handleSetFont: function PartialEvaluator_handleSetFont( |
|
|
|
handleSetFont: function PartialEvaluator_handleSetFont( |
|
|
|
resources, fontArgs, font) { |
|
|
|
resources, fontArgs, font) { |
|
|
|
|
|
|
|
|
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
// TODO(mack): Not needed?
|
|
|
|
// TODO(mack): Not needed?
|
|
|
|
var fontName; |
|
|
|
var fontName; |
|
|
|
if (fontArgs) { |
|
|
|
if (fontArgs) { |
|
|
@ -413,7 +415,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
gStateObj.push([key, value]); |
|
|
|
gStateObj.push([key, value]); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 'Font': |
|
|
|
case 'Font': |
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
self.handleSetFont(resources, null, value[0]).then(function(data) { |
|
|
|
self.handleSetFont(resources, null, value[0]).then(function(data) { |
|
|
|
var gState = ['Font', data.loadedName, value[1]]; |
|
|
|
var gState = ['Font', data.loadedName, value[1]]; |
|
|
|
promise.resolve({ |
|
|
|
promise.resolve({ |
|
|
@ -478,8 +480,8 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
PDFJS.Promise.all(promises).then(function(datas) { |
|
|
|
Promise.all(promises).then(function(datas) { |
|
|
|
for (var i = 0, n = datas.length; i < n; ++i) { |
|
|
|
for (var i = 0, n = datas.length; i < n; ++i) { |
|
|
|
var data = datas[i]; |
|
|
|
var data = datas[i]; |
|
|
|
var index = indices[i]; |
|
|
|
var index = indices[i]; |
|
|
@ -500,7 +502,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
|
|
|
|
|
|
|
|
loadFont: function PartialEvaluator_loadFont(fontName, font, xref, |
|
|
|
loadFont: function PartialEvaluator_loadFont(fontName, font, xref, |
|
|
|
resources) { |
|
|
|
resources) { |
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
|
|
|
|
|
|
|
|
var fontRes = resources.get('Font'); |
|
|
|
var fontRes = resources.get('Font'); |
|
|
|
|
|
|
|
|
|
|
@ -551,7 +553,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
opListPromises.push( |
|
|
|
opListPromises.push( |
|
|
|
this.getOperatorList(glyphStream, fontResources)); |
|
|
|
this.getOperatorList(glyphStream, fontResources)); |
|
|
|
} |
|
|
|
} |
|
|
|
PDFJS.Promise.all(opListPromises).then(function(datas) { |
|
|
|
Promise.all(opListPromises).then(function(datas) { |
|
|
|
var charProcOperatorList = {}; |
|
|
|
var charProcOperatorList = {}; |
|
|
|
var dependencies = {}; |
|
|
|
var dependencies = {}; |
|
|
|
for (var i = 0, n = charProcKeys.length; i < n; ++i) { |
|
|
|
for (var i = 0, n = charProcKeys.length; i < n; ++i) { |
|
|
@ -606,7 +608,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
// dictionary
|
|
|
|
// dictionary
|
|
|
|
var parser = new Parser(new Lexer(stream, OP_MAP), false, xref); |
|
|
|
var parser = new Parser(new Lexer(stream, OP_MAP), false, xref); |
|
|
|
|
|
|
|
|
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
function parseCommands() { |
|
|
|
function parseCommands() { |
|
|
|
try { |
|
|
|
try { |
|
|
|
parser.restoreState(); |
|
|
|
parser.restoreState(); |
|
|
@ -770,7 +772,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
subQueuePromises.push(argsArray[i][0]); |
|
|
|
subQueuePromises.push(argsArray[i][0]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
PDFJS.Promise.all(subQueuePromises).then(function(datas) { |
|
|
|
Promise.all(subQueuePromises).then(function(datas) { |
|
|
|
// TODO(mack): Optimize by using repositioning elements
|
|
|
|
// TODO(mack): Optimize by using repositioning elements
|
|
|
|
// in original queue rather than creating new queue
|
|
|
|
// in original queue rather than creating new queue
|
|
|
|
|
|
|
|
|
|
|
@ -817,10 +819,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
throw e; |
|
|
|
throw e; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var streamManager = globalScope.pdfManager.streamManager; |
|
|
|
self.pdfManager.requestRange(e.begin, e.end).then(parseCommands); |
|
|
|
streamManager.requestRange(e.begin, e.end, function() { |
|
|
|
|
|
|
|
parseCommands(); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
parser.saveState(); |
|
|
|
parser.saveState(); |
|
|
@ -832,7 +831,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
getAnnotationsOperatorList: |
|
|
|
getAnnotationsOperatorList: |
|
|
|
function PartialEvaluator_getAnnotationsOperatorList(annotations, |
|
|
|
function PartialEvaluator_getAnnotationsOperatorList(annotations, |
|
|
|
dependency) { |
|
|
|
dependency) { |
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
|
|
|
|
|
|
|
|
// 12.5.5: Algorithm: Appearance streams
|
|
|
|
// 12.5.5: Algorithm: Appearance streams
|
|
|
|
function getTransformMatrix(rect, bbox, matrix) { |
|
|
|
function getTransformMatrix(rect, bbox, matrix) { |
|
|
@ -878,13 +877,13 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
annotation.resources); |
|
|
|
annotation.resources); |
|
|
|
opListPromises.push(opListPromise); |
|
|
|
opListPromises.push(opListPromise); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
var opListPromise = new PDFJS.Promise(); |
|
|
|
var opListPromise = new Promise(); |
|
|
|
opListPromise.resolve(createOperatorList()); |
|
|
|
opListPromise.resolve(createOperatorList()); |
|
|
|
opListPromises.push(opListPromise); |
|
|
|
opListPromises.push(opListPromise); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
PDFJS.Promise.all(opListPromises).then(function(datas) { |
|
|
|
Promise.all(opListPromises).then(function(datas) { |
|
|
|
var fnArray = []; |
|
|
|
var fnArray = []; |
|
|
|
var argsArray = []; |
|
|
|
var argsArray = []; |
|
|
|
var dependencies = {}; |
|
|
|
var dependencies = {}; |
|
|
@ -923,10 +922,10 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
var MULTI_SPACE_FACTOR = 1.5; |
|
|
|
var MULTI_SPACE_FACTOR = 1.5; |
|
|
|
var self = this; |
|
|
|
var self = this; |
|
|
|
|
|
|
|
|
|
|
|
var statePromise = new PDFJS.Promise(); |
|
|
|
var statePromise = new Promise(); |
|
|
|
|
|
|
|
|
|
|
|
function handleSetFont(fontName, fontRef, resources) { |
|
|
|
function handleSetFont(fontName, fontRef, resources) { |
|
|
|
var promise = new PDFJS.Promise(); |
|
|
|
var promise = new Promise(); |
|
|
|
self.loadFont(fontName, fontRef, self.xref, resources).then( |
|
|
|
self.loadFont(fontName, fontRef, self.xref, resources).then( |
|
|
|
function(data) { |
|
|
|
function(data) { |
|
|
|
promise.resolve(data.font.translated); |
|
|
|
promise.resolve(data.font.translated); |
|
|
@ -969,7 +968,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
//.translated;
|
|
|
|
//.translated;
|
|
|
|
break; |
|
|
|
break; |
|
|
|
case 'TJ': |
|
|
|
case 'TJ': |
|
|
|
var chunkPromise = new PDFJS.Promise(); |
|
|
|
var chunkPromise = new Promise(); |
|
|
|
chunkPromises.push(chunkPromise); |
|
|
|
chunkPromises.push(chunkPromise); |
|
|
|
fontPromise.then(function(items, font) { |
|
|
|
fontPromise.then(function(items, font) { |
|
|
|
var chunk = ''; |
|
|
|
var chunk = ''; |
|
|
@ -994,7 +993,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
}.bind(null, args[0])); |
|
|
|
}.bind(null, args[0])); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case 'Tj': |
|
|
|
case 'Tj': |
|
|
|
var chunkPromise = new PDFJS.Promise(); |
|
|
|
var chunkPromise = new Promise(); |
|
|
|
chunkPromises.push(chunkPromise); |
|
|
|
chunkPromises.push(chunkPromise); |
|
|
|
fontPromise.then(function(charCodes, font) { |
|
|
|
fontPromise.then(function(charCodes, font) { |
|
|
|
var chunk = fontCharsToUnicode(charCodes, font); |
|
|
|
var chunk = fontCharsToUnicode(charCodes, font); |
|
|
@ -1006,7 +1005,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
// For search, adding a extra white space for line breaks
|
|
|
|
// For search, adding a extra white space for line breaks
|
|
|
|
// would be better here, but that causes too much spaces in
|
|
|
|
// would be better here, but that causes too much spaces in
|
|
|
|
// the text-selection divs.
|
|
|
|
// the text-selection divs.
|
|
|
|
var chunkPromise = new PDFJS.Promise(); |
|
|
|
var chunkPromise = new Promise(); |
|
|
|
chunkPromises.push(chunkPromise); |
|
|
|
chunkPromises.push(chunkPromise); |
|
|
|
fontPromise.then(function(charCodes, font) { |
|
|
|
fontPromise.then(function(charCodes, font) { |
|
|
|
var chunk = fontCharsToUnicode(charCodes, font); |
|
|
|
var chunk = fontCharsToUnicode(charCodes, font); |
|
|
@ -1016,7 +1015,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
break; |
|
|
|
break; |
|
|
|
case '"': |
|
|
|
case '"': |
|
|
|
// Note comment in "'"
|
|
|
|
// Note comment in "'"
|
|
|
|
var chunkPromise = new PDFJS.Promise(); |
|
|
|
var chunkPromise = new Promise(); |
|
|
|
chunkPromises.push(chunkPromise); |
|
|
|
chunkPromises.push(chunkPromise); |
|
|
|
fontPromise.then(function(charCodes, font) { |
|
|
|
fontPromise.then(function(charCodes, font) { |
|
|
|
var chunk = fontCharsToUnicode(charCodes, font); |
|
|
|
var chunk = fontCharsToUnicode(charCodes, font); |
|
|
@ -1081,7 +1080,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
} |
|
|
|
} |
|
|
|
} // while
|
|
|
|
} // while
|
|
|
|
|
|
|
|
|
|
|
|
PDFJS.Promise.all(chunkPromises).then(function(datas) { |
|
|
|
Promise.all(chunkPromises).then(function(datas) { |
|
|
|
var bidiTexts = []; |
|
|
|
var bidiTexts = []; |
|
|
|
for (var i = 0, n = datas.length; i < n; ++i) { |
|
|
|
for (var i = 0, n = datas.length; i < n; ++i) { |
|
|
|
var bidiText = datas[i]; |
|
|
|
var bidiText = datas[i]; |
|
|
@ -1100,10 +1099,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
throw e; |
|
|
|
throw e; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var streamManager = globalScope.pdfManager.streamManager; |
|
|
|
self.pdfManager.requestRange(e.begin, e.end).then(parseCommands); |
|
|
|
streamManager.requestRange(e.begin, e.end, function() { |
|
|
|
|
|
|
|
parseCommands(); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
parser.saveState(); |
|
|
|
parser.saveState(); |
|
|
|