From 81649b00a9e4cde87b327e9943e68ee01af1c7c1 Mon Sep 17 00:00:00 2001 From: Yury Delendik Date: Mon, 12 Jan 2015 14:52:52 -0600 Subject: [PATCH] Base64 example and be more flexible what type of data is passed. --- examples/learning/helloworld64.html | 81 +++++++++++++++++++++++++++++ src/display/api.js | 21 ++++++-- 2 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 examples/learning/helloworld64.html diff --git a/examples/learning/helloworld64.html b/examples/learning/helloworld64.html new file mode 100644 index 000000000..06333aada --- /dev/null +++ b/examples/learning/helloworld64.html @@ -0,0 +1,81 @@ + + + + + 'Hello, world!' base64 example + + + +

'Hello, world!' example

+ + + + + + + + + + +
+

JavaScript code:

+

+
+
+
diff --git a/src/display/api.js b/src/display/api.js
index 1ec0b71bd..185f10c55 100644
--- a/src/display/api.js
+++ b/src/display/api.js
@@ -18,7 +18,7 @@
            StatTimer, globalScope, MessageHandler, info, FontLoader, Util, warn,
            Promise, PasswordResponses, PasswordException, InvalidPDFException,
            MissingPDFException, UnknownErrorException, FontFaceObject,
-           loadJpegStream, createScratchCanvas, CanvasGraphics,
+           loadJpegStream, createScratchCanvas, CanvasGraphics, stringToBytes,
            UnexpectedResponseException */
 
 'use strict';
@@ -162,7 +162,9 @@ PDFJS.maxCanvasPixels = (PDFJS.maxCanvasPixels === undefined ?
  *
  * @typedef {Object} DocumentInitParameters
  * @property {string}     url   - The URL of the PDF.
- * @property {TypedArray} data  - A typed array with PDF data.
+ * @property {TypedArray|Array|string} data - Binary PDF data. Use typed arrays
+ *   (Uint8Array) to improve the memory usage. If PDF data is BASE64-encoded,
+ *   use atob() to convert it to a binary string first.
  * @property {Object}     httpHeaders - Basic authentication headers.
  * @property {boolean}    withCredentials - Indicates whether or not cross-site
  *   Access-Control requests should be made using credentials such as cookies
@@ -249,14 +251,27 @@ PDFJS.getDocument = function getDocument(src,
     source = src;
   }
 
-  // copy/use all keys as is except 'url' -- full path is required
   var params = {};
   for (var key in source) {
     if (key === 'url' && typeof window !== 'undefined') {
+      // The full path is required in the 'url' field.
       params[key] = combineUrl(window.location.href, source[key]);
       continue;
     } else if (key === 'range') {
       continue;
+    } else if (key === 'data' && !(source[key] instanceof Uint8Array)) {
+      // Converting string or array-like data to Uint8Array.
+      var pdfBytes = source[key];
+      if (typeof pdfBytes === 'string') {
+        params[key] = stringToBytes(pdfBytes);
+      } else if (typeof pdfBytes === 'object' && pdfBytes !== null &&
+                 !isNaN(pdfBytes.length)) {
+        params[key] = new Uint8Array(pdfBytes);
+      } else {
+        error('Invalid PDF binary data: either typed array, string or ' +
+              'array-like object is expected in the data property.');
+      }
+      continue;
     }
     params[key] = source[key];
   }