var exc = null;
// try {
self.display(gfx);
- stats.render = Date.now();
+ self.stats.render = Date.now();
// } catch (e) {
// exc = e.toString();
// }
this.ensureFonts(fonts, function() {
images.notifyOnLoad(function() {
- stats.images = Date.now();
+ self.stats.images = Date.now();
displayContinuation();
});
})
}
}
- // Expose arrays for debugging purpose.
- window.fnArray = fnArray;
- window.argsArray = argsArray;
-
return {
fnArray: fnArray,
argsArray: argsArray
},
postCompile: function(raw) {
+ if (!this.pe) {
+ this.pe = new PartialEvaluator();
+ }
return this.pe.evalFromRaw(raw);
},
this.pageCache = [];
- this.worker = new Worker("worker/boot.js");
- this.handler = new MessageHandler({
+ this.worker = new Worker("../worker/boot.js");
+ this.handler = new MessageHandler("main", {
"page": function(data) {
var pageNum = data.pageNum;
var page = this.pageCache[pageNum];
+ // Add necessary shape back to fonts.
+ var fonts = data.fonts;
+ for (var i = 0; i < fonts.length; i++) {
+ var font = fonts[i];
+
+ var fontFileDict = new Dict();
+ fontFileDict.map = font.file.dict.map;
+
+ var fontFile = new Stream(font.file.bytes, font.file.start,
+ font.file.end - font.file.start, fontFileDict);
+ font.file = new FlateStream(fontFile);
+ }
+
+ console.log("startRenderingFromPreCompilation:", "numberOfFonts", fonts.length);
page.startRenderingFromPreCompilation(data.preCompilation, data.fonts, data.images);
}
- }, this.worker.postMessage, this);
- this.worker.onmessage = this.handler.onMessage;
+ }, this.worker, this);
this.handler.send("doc", data);
}
},
startRendering: function(page) {
- this.handler.send("page", page.page.pageNumber);
+ this.handler.send("page", page.page.pageNumber + 1);
},
getPage: function(n) {
'use strict';
-//
importScripts('console.js');
-importScripts('event_handler.js');
+importScripts('message_handler.js');
importScripts('../pdf.js');
importScripts('../fonts.js');
importScripts('../crypto.js');
// Listen for messages from the main thread.
var pdfDoc = null;
-var handler = new MessageHandler({
+var handler = new MessageHandler("worker", {
"doc": function(data) {
- pdfDocument = new PDFDoc(new Stream(data));
+ pdfDoc = new PDFDoc(new Stream(data));
console.log("setup pdfDoc");
},
pageNum = parseInt(pageNum);
console.log("about to process page", pageNum);
- var page = pdfDocument.getPage(pageNum);
+ var page = pdfDoc.getPage(pageNum);
// The following code does quite the same as Page.prototype.startRendering,
// but stops at one point and sends the result back to the main thread.
- var gfx = new CanvasGraphics(canvasCtx);
+ var gfx = new CanvasGraphics(null);
var fonts = [];
// TODO: Figure out how image loading is handled inside the worker.
var images = new ImagesLoader();
var font = fonts[i];
fontsMin.push({
- name: orgFont.name,
- file: orgFont.file,
- properties: orgFont.properties
+ name: font.name,
+ file: font.file,
+ properties: font.properties
});
}
preCompilation: preCompilation,
});
}
-}, postMessage);
-
-onmessage = handler.onMessage;
+}, this);
log: function log() {
var args = Array.prototype.slice.call(arguments);
postMessage({
- action: 'log',
+ action: 'console_log',
+ data: args
+ });
+ },
+
+ error: function error() {
+ var args = Array.prototype.slice.call(arguments);
+ postMessage({
+ action: 'console_error',
data: args
});
},
'use strict';
-function MessageHandler(actionHandler, postMessage, scope) {
- this.onMessage = function(event) {
+function MessageHandler(name, actionHandler, comObj, scope) {
+ this.name = name;
+
+ actionHandler["console_log"] = function(data) {
+ console.log.apply(console, data);
+ }
+ actionHandler["console_error"] = function(data) {
+ console.error.apply(console, data);
+ }
+
+
+ comObj.onmessage = function(event) {
var data = event.data;
if (data.action in actionHandler) {
actionHandler[data.action].call(scope, data.data);
};
this.send = function(actionName, data) {
- postMessage({
- action: actionName,
- data: data
- });
+ try {
+ comObj.postMessage({
+ action: actionName,
+ data: data
+ });
+ } catch (e) {
+ console.error("FAILED to send data from", this.name);
+ throw e;
+ }
}
}
\ No newline at end of file