]> git.parisson.com Git - pdf.js.git/commitdiff
fix stream reset, interrupting thread when pages are indexed
authornotmasteryet <async.processingjs@yahoo.com>
Mon, 12 Dec 2011 00:14:52 +0000 (18:14 -0600)
committernotmasteryet <async.processingjs@yahoo.com>
Mon, 12 Dec 2011 00:14:52 +0000 (18:14 -0600)
src/core.js
src/worker.js

index 6a90357e8a42cde58f3aaf0ba2cd9fc41e29677f..6a932f1276014d4da426b5373261a36bc73b9aff 100644 (file)
@@ -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 + '_');
index c3992e54f7504a22f0d802c7d5dcd583042f989b..3cc91d07e39c083de81807851334ab9ff09c00fb 100644 (file)
@@ -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);
-      }
 
-      console.log('text indexing=: time=%dms', Date.now() - start);
+        // processing one page, interrupting thread to process
+        // other requests
+        setTimeout(function extractTextNextPage() {
+          indexPage(pageNum + 1);
+        }, 0);
+      }
 
-      handler.send('text_extracted', { index: index });
+      indexPage(1);
     });
   }
 };