mirror of
https://github.com/mozilla/pdf.js.git
synced 2025-04-22 16:18:08 +02:00
Initial API implementation
This commit is contained in:
parent
d8235925ac
commit
737ed84174
4 changed files with 281 additions and 98 deletions
141
src/api.js
Normal file
141
src/api.js
Normal file
|
@ -0,0 +1,141 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
(function pdfApiWrapper() {
|
||||
function PdfPageWrapper(page) {
|
||||
this.page = page;
|
||||
}
|
||||
PdfPageWrapper.prototype = {
|
||||
get width() {
|
||||
return this.page.width;
|
||||
},
|
||||
get height() {
|
||||
return this.page.height;
|
||||
},
|
||||
get stats() {
|
||||
return this.page.stats;
|
||||
},
|
||||
get ref() {
|
||||
return this.page.ref;
|
||||
},
|
||||
get view() {
|
||||
return this.page.view;
|
||||
},
|
||||
rotatePoint: function(x, y) {
|
||||
return this.page.rotatePoint(x, y);
|
||||
},
|
||||
getAnnotations: function() {
|
||||
var promise = new PDFJS.Promise();
|
||||
var annotations = this.page.getAnnotations();
|
||||
promise.resolve(annotations);
|
||||
return promise;
|
||||
},
|
||||
render: function(renderContext) {
|
||||
var promise = new PDFJS.Promise();
|
||||
this.page.startRendering(renderContext.canvasContext,
|
||||
function complete(error) {
|
||||
if (error)
|
||||
promise.reject(error);
|
||||
else
|
||||
promise.resolve();
|
||||
},
|
||||
renderContext.textLayer);
|
||||
return promise;
|
||||
},
|
||||
getTextContent: function() {
|
||||
var promise = new PDFJS.Promise();
|
||||
var textContent = 'page text'; // not implemented
|
||||
promise.resolve(textContent);
|
||||
return promise;
|
||||
},
|
||||
getOperationList: function() {
|
||||
var promise = new PDFJS.Promise();
|
||||
var operationList = { // not implemented
|
||||
dependencyFontsID: null,
|
||||
operatorList: null
|
||||
};
|
||||
promise.resolve(operationList);
|
||||
return promise;
|
||||
}
|
||||
};
|
||||
|
||||
function PdfDocumentWrapper(pdf) {
|
||||
this.pdf = pdf;
|
||||
}
|
||||
PdfDocumentWrapper.prototype = {
|
||||
get numPages() {
|
||||
return this.pdf.numPages;
|
||||
},
|
||||
get fingerprint() {
|
||||
return this.pdf.fingerPrint;
|
||||
},
|
||||
getPage: function(number) {
|
||||
var promise = new PDFJS.Promise();
|
||||
var page = this.pdf.getPage(number);
|
||||
promise.resolve(new PdfPageWrapper(page));
|
||||
return promise;
|
||||
},
|
||||
getDestinations: function() {
|
||||
var promise = new PDFJS.Promise();
|
||||
var destinations = this.pdf.catalog.destinations;
|
||||
promise.resolve(destinations);
|
||||
return promise;
|
||||
},
|
||||
getOutline: function() {
|
||||
var promise = new PDFJS.Promise();
|
||||
var outline = this.pdf.catalog.documentOutline;
|
||||
promise.resolve(outline);
|
||||
return promise;
|
||||
},
|
||||
getMetadata: function() {
|
||||
var promise = new PDFJS.Promise();
|
||||
var info = this.pdf.info;
|
||||
var metadata = this.pdf.catalog.metadata;
|
||||
promise.resolve(info, metadata ? new PDFJS.Metadata(metadata) : null);
|
||||
return promise;
|
||||
}
|
||||
};
|
||||
|
||||
PDFJS.getDocument = function getDocument(source) {
|
||||
var promise = new PDFJS.Promise();
|
||||
if (typeof source === 'string') {
|
||||
// fetch url
|
||||
PDFJS.getPdf(
|
||||
{
|
||||
url: source,
|
||||
progress: function getPdfProgress(evt) {
|
||||
if (evt.lengthComputable)
|
||||
promise.progress({
|
||||
loaded: evt.loaded,
|
||||
total: evt.total
|
||||
});
|
||||
},
|
||||
error: function getPdfError(e) {
|
||||
promise.reject('Unexpected server response of ' +
|
||||
e.target.status + '.');
|
||||
}
|
||||
},
|
||||
function getPdfLoad(data) {
|
||||
var pdf = null;
|
||||
try {
|
||||
pdf = new PDFJS.PDFDoc(data);
|
||||
} catch (e) {
|
||||
promise.reject('An error occurred while reading the PDF.', e);
|
||||
}
|
||||
if (pdf)
|
||||
promise.resolve(new PdfDocumentWrapper(pdf));
|
||||
});
|
||||
} else {
|
||||
// assuming the source is array, instantiating directly from it
|
||||
var pdf = null;
|
||||
try {
|
||||
pdf = new PDFJS.PDFDoc(source);
|
||||
} catch (e) {
|
||||
promise.reject('An error occurred while reading the PDF.', e);
|
||||
}
|
||||
if (pdf)
|
||||
promise.resolve(new PdfDocumentWrapper(pdf));
|
||||
}
|
||||
return promise;
|
||||
};
|
||||
})();
|
17
src/util.js
17
src/util.js
|
@ -275,7 +275,7 @@ function isPDFFunction(v) {
|
|||
* can be set. If any of these happens twice or the data is required before
|
||||
* it was set, an exception is throw.
|
||||
*/
|
||||
var Promise = (function PromiseClosure() {
|
||||
var Promise = PDFJS.Promise = (function PromiseClosure() {
|
||||
var EMPTY_PROMISE = {};
|
||||
|
||||
/**
|
||||
|
@ -297,6 +297,7 @@ var Promise = (function PromiseClosure() {
|
|||
}
|
||||
this.callbacks = [];
|
||||
this.errbacks = [];
|
||||
this.progressbacks = [];
|
||||
};
|
||||
/**
|
||||
* Builds a promise that is resolved when all the passed in promises are
|
||||
|
@ -312,7 +313,7 @@ var Promise = (function PromiseClosure() {
|
|||
deferred.resolve(results);
|
||||
return deferred;
|
||||
}
|
||||
for (var i = 0; i < unresolved; ++i) {
|
||||
for (var i = 0, ii = promises.length; i < ii; ++i) {
|
||||
var promise = promises[i];
|
||||
promise.then((function(i) {
|
||||
return function(value) {
|
||||
|
@ -376,6 +377,13 @@ var Promise = (function PromiseClosure() {
|
|||
}
|
||||
},
|
||||
|
||||
progress: function Promise_progress(data) {
|
||||
var callbacks = this.progressbacks;
|
||||
for (var i = 0, ii = callbacks.length; i < ii; i++) {
|
||||
callbacks[i].call(null, data);
|
||||
}
|
||||
},
|
||||
|
||||
reject: function Promise_reject(reason) {
|
||||
if (this.isRejected) {
|
||||
error('A Promise can be rejected only once ' + this.name);
|
||||
|
@ -393,7 +401,7 @@ var Promise = (function PromiseClosure() {
|
|||
}
|
||||
},
|
||||
|
||||
then: function Promise_then(callback, errback) {
|
||||
then: function Promise_then(callback, errback, progressback) {
|
||||
if (!callback) {
|
||||
error('Requiring callback' + this.name);
|
||||
}
|
||||
|
@ -410,6 +418,9 @@ var Promise = (function PromiseClosure() {
|
|||
if (errback)
|
||||
this.errbacks.push(errback);
|
||||
}
|
||||
|
||||
if (progressback)
|
||||
this.progressbacks.push(progressback);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue