|
|
@ -144,7 +144,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
fontRef = fontRef || fontRes.get(fontName); |
|
|
|
fontRef = fontRef || fontRes.get(fontName); |
|
|
|
var font = xref.fetchIfRef(fontRef); |
|
|
|
var font = xref.fetchIfRef(fontRef); |
|
|
|
assertWellFormed(isDict(font)); |
|
|
|
assertWellFormed(isDict(font)); |
|
|
|
if (!font.translated) { |
|
|
|
if (!font.loadedName) { |
|
|
|
font.translated = self.translateFont(font, xref, resources, |
|
|
|
font.translated = self.translateFont(font, xref, resources, |
|
|
|
dependency); |
|
|
|
dependency); |
|
|
|
if (font.translated) { |
|
|
|
if (font.translated) { |
|
|
@ -464,6 +464,65 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
}; |
|
|
|
}; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
getTextContent: function partialEvaluatorGetIRQueue(stream, resources) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var self = this; |
|
|
|
|
|
|
|
var xref = this.xref; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function handleSetFont(fontName, fontRef) { |
|
|
|
|
|
|
|
var fontRes = resources.get('Font'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// TODO: TOASK: Is it possible to get here? If so, what does
|
|
|
|
|
|
|
|
// args[0].name should be like???
|
|
|
|
|
|
|
|
assert(fontRes, 'fontRes not available'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fontRes = xref.fetchIfRef(fontRes); |
|
|
|
|
|
|
|
fontRef = fontRef || fontRes.get(fontName); |
|
|
|
|
|
|
|
var font = xref.fetchIfRef(fontRef), tra; |
|
|
|
|
|
|
|
assertWellFormed(isDict(font)); |
|
|
|
|
|
|
|
if (!font.translated) { |
|
|
|
|
|
|
|
font.translated = self.translateFont(font, xref, resources); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return font; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
resources = xref.fetchIfRef(resources) || new Dict(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var parser = new Parser(new Lexer(stream), false); |
|
|
|
|
|
|
|
var res = resources; |
|
|
|
|
|
|
|
var args = [], obj; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var text = ''; |
|
|
|
|
|
|
|
var font = null; |
|
|
|
|
|
|
|
while (!isEOF(obj = parser.getObj())) { |
|
|
|
|
|
|
|
if (isCmd(obj)) { |
|
|
|
|
|
|
|
var cmd = obj.cmd; |
|
|
|
|
|
|
|
switch (cmd) { |
|
|
|
|
|
|
|
case 'Tf': |
|
|
|
|
|
|
|
font = handleSetFont(args[0].name); |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'TJ': |
|
|
|
|
|
|
|
var items = args[0]; |
|
|
|
|
|
|
|
for (var j = 0, jj = items.length; j < jj; j++) { |
|
|
|
|
|
|
|
if (typeof items[j] === 'string') |
|
|
|
|
|
|
|
text += items[j]; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
case 'Tj': |
|
|
|
|
|
|
|
text += args[0]; |
|
|
|
|
|
|
|
break; |
|
|
|
|
|
|
|
} // switch
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
args = []; |
|
|
|
|
|
|
|
} else if (obj != null) { |
|
|
|
|
|
|
|
assertWellFormed(args.length <= 33, 'Too many arguments'); |
|
|
|
|
|
|
|
args.push(obj); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return text; |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
extractDataStructures: function |
|
|
|
extractDataStructures: function |
|
|
|
partialEvaluatorExtractDataStructures(dict, baseDict, |
|
|
|
partialEvaluatorExtractDataStructures(dict, baseDict, |
|
|
|
xref, properties) { |
|
|
|
xref, properties) { |
|
|
@ -837,15 +896,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() { |
|
|
|
|
|
|
|
|
|
|
|
if (type.name === 'Type3') { |
|
|
|
if (type.name === 'Type3') { |
|
|
|
properties.coded = true; |
|
|
|
properties.coded = true; |
|
|
|
var charProcs = xref.fetchIfRef(dict.get('CharProcs')); |
|
|
|
// read char procs only if dependency is specified
|
|
|
|
var fontResources = xref.fetchIfRef(dict.get('Resources')) || resources; |
|
|
|
if (dependency) { |
|
|
|
properties.resources = fontResources; |
|
|
|
var charProcs = xref.fetchIfRef(dict.get('CharProcs')); |
|
|
|
properties.charProcIRQueues = {}; |
|
|
|
var fontResources = xref.fetchIfRef(dict.get('Resources')) || resources; |
|
|
|
for (var key in charProcs.map) { |
|
|
|
properties.resources = fontResources; |
|
|
|
var glyphStream = xref.fetchIfRef(charProcs.map[key]); |
|
|
|
properties.charProcIRQueues = {}; |
|
|
|
var queueObj = {}; |
|
|
|
for (var key in charProcs.map) { |
|
|
|
properties.charProcIRQueues[key] = |
|
|
|
var glyphStream = xref.fetchIfRef(charProcs.map[key]); |
|
|
|
this.getIRQueue(glyphStream, fontResources, queueObj, dependency); |
|
|
|
var queueObj = {}; |
|
|
|
|
|
|
|
properties.charProcIRQueues[key] = |
|
|
|
|
|
|
|
this.getIRQueue(glyphStream, fontResources, queueObj, dependency); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|