87 lines
2.0 KiB
87 lines
2.0 KiB
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / |
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ |
|
|
|
"use strict"; |
|
|
|
var timer = null; |
|
function tic() { |
|
timer = Date.now(); |
|
} |
|
|
|
function toc(msg) { |
|
log(msg + ": " + (Date.now() - timer) + "ms"); |
|
timer = null; |
|
} |
|
|
|
function log() { |
|
var args = Array.prototype.slice.call(arguments); |
|
postMessage({ |
|
action: "log", |
|
data: args |
|
}); |
|
} |
|
|
|
var console = { |
|
log: log |
|
} |
|
|
|
// |
|
importScripts("canvas_proxy.js"); |
|
importScripts("pdf.js"); |
|
importScripts("fonts.js"); |
|
importScripts("glyphlist.js") |
|
|
|
// Use the JpegStreamProxy proxy. |
|
JpegStream = JpegStreamProxy; |
|
|
|
// Create the WebWorkerProxyCanvas. |
|
var canvas = new CanvasProxy(1224, 1584); |
|
|
|
// Listen for messages from the main thread. |
|
var pdfDocument = null; |
|
onmessage = function(event) { |
|
var data = event.data; |
|
// If there is no pdfDocument yet, then the sent data is the PDFDocument. |
|
if (!pdfDocument) { |
|
pdfDocument = new PDFDoc(new Stream(data)); |
|
postMessage({ |
|
action: "pdf_num_pages", |
|
data: pdfDocument.numPages |
|
}); |
|
return; |
|
} |
|
// User requested to render a certain page. |
|
else { |
|
tic(); |
|
|
|
// Let's try to render the first page... |
|
var page = pdfDocument.getPage(parseInt(data)); |
|
|
|
// page.compile will collect all fonts for us, once we have loaded them |
|
// we can trigger the actual page rendering with page.display |
|
var fonts = []; |
|
var gfx = new CanvasGraphics(canvas.getContext("2d"), CanvasProxy); |
|
page.compile(gfx, fonts); |
|
toc("compiled page"); |
|
|
|
tic() |
|
// Inspect fonts and translate the missing one. |
|
var count = fonts.length; |
|
for (var i = 0; i < count; i++) { |
|
var font = fonts[i]; |
|
if (Fonts[font.name]) { |
|
fontsReady = fontsReady && !Fonts[font.name].loading; |
|
continue; |
|
} |
|
|
|
// This "builds" the font and sents it over to the main thread. |
|
new Font(font.name, font.file, font.properties); |
|
} |
|
toc("fonts"); |
|
|
|
tic() |
|
page.display(gfx); |
|
canvas.flush(); |
|
toc("displayed page"); |
|
} |
|
}
|
|
|