From 4d44eb61841771a5d5d0032a45a4dd70e862e197 Mon Sep 17 00:00:00 2001 From: notmasteryet Date: Sun, 11 Dec 2011 18:14:52 -0600 Subject: [PATCH] fix stream reset, interrupting thread when pages are indexed --- src/core.js | 4 ++-- src/worker.js | 23 +++++++++++++++++------ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/core.js b/src/core.js index 6a90357e8..6a932f127 100644 --- a/src/core.js +++ b/src/core.js @@ -205,7 +205,7 @@ var Page = (function PageClosure() { streams.push(xref.fetchIfRef(content[i])); content = new StreamsSequenceStream(streams); } else if (isStream(content)) - content.pos = 0; + content.reset(); var pe = this.pe = new PartialEvaluator( xref, handler, 'p' + this.pageNumber + '_'); @@ -236,7 +236,7 @@ var Page = (function PageClosure() { streams.push(xref.fetchIfRef(content[i])); content = new StreamsSequenceStream(streams); } else if (isStream(content)) - content.pos = 0; + content.reset(); var pe = new PartialEvaluator( xref, handler, 'p' + this.pageNumber + '_'); diff --git a/src/worker.js b/src/worker.js index c3992e54f..3cc91d07e 100644 --- a/src/worker.js +++ b/src/worker.js @@ -164,23 +164,34 @@ var WorkerMessageHandler = { handler.on('extract_text', function wphExtractText() { var numPages = pdfDoc.numPages; var index = []; - for (var i = 0; i < numPages; i++) { - var start = Date.now(); + var start = Date.now(); + + function indexPage(pageNum) { + if (pageNum > numPages) { + console.log('text indexing=: time=%dms', Date.now() - start); + + handler.send('text_extracted', { index: index }); + return; + } var textContent = ''; try { - var page = pdfDoc.getPage(i + 1); + var page = pdfDoc.getPage(pageNum); textContent = page.extractTextContent(); } catch (e) { // Skip errored pages } index.push(textContent); + + // processing one page, interrupting thread to process + // other requests + setTimeout(function extractTextNextPage() { + indexPage(pageNum + 1); + }, 0); } - console.log('text indexing=: time=%dms', Date.now() - start); - - handler.send('text_extracted', { index: index }); + indexPage(1); }); } };