console.log("load font", objId);
var encoding = fontObj.encoding;
var testStr = "";
- for (var enc in encoding) {
- testStr += String.fromCharCode(encoding[enc].unicode);
- if (testStr.length == 10) {
- break;
- }
+ // If the font has a encoding defined. If, use the characters of the
+ // encoding, otherwise use some dump string for testing.
+ if (Object.keys(encoding).length != 0) {
+ for (var enc in encoding) {
+ testStr += String.fromCharCode(encoding[enc].unicode);
+ }
+ } else {
+ console.log("empty font.encoding");
+ testStr = "abcdefghiklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-+='!";
}
var before = this.measure(fontObj, testStr);
},
paintJpegXObject: function(objId, w, h) {
- var image = Objects[objId].data;
+ var image = Objects.get(objId);
if (!image) {
error("Dependent image isn't ready yet");
}
// This holds a list of objects the IR queue depends on.
var Objects = {
+ hash: {},
+
getPromise: function(objId) {
- if (Objects[objId]) {
- return this[objId];
+ var hash = this.hash;
+ if (hash[objId]) {
+ return hash[objId];
} else {
- return this[objId] = new Promise(objId);
+ return hash[objId] = new Promise(objId);
}
},
},
resolve: function(objId, data) {
+ var hash = this.hash;
// In case there is a promise already on this object, just resolve it.
- if (Objects[objId]) {
- Objects[objId].resolve(data);
+ if (hash[objId]) {
+ hash[objId].resolve(data);
} else {
- Objects[objId] = new Promise(objId, data);
+ hash[objId] = new Promise(objId, data);
}
},
get: function(objId) {
- var obj = Objects[objId];
+ var obj = this.hash[objId];
if (!obj || !obj.isResolved) {
throw "Requesting object that isn't resolved yet " + objId;
}
return obj.data;
+ },
+
+ clear: function() {
+ delete this.hash;
+ this.hash = {};
}
};
var WorkerPDFDoc = (function() {
function constructor(data) {
+ // For now, as we create a new WorkerPDFDoc, we clear all objects.
+ // TODO: Have the objects per WorkerPDFDoc.
+ Objects.clear();
+
this.data = data;
this.stream = new Stream(data);
this.pdf = new PDFDoc(this.stream);