Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save greyhwndz/70624cfa27e68163bc8cb5e5a79610a7 to your computer and use it in GitHub Desktop.
Save greyhwndz/70624cfa27e68163bc8cb5e5a79610a7 to your computer and use it in GitHub Desktop.
Using pdf.js in an Ember View
/**
* @class pdfView
* @extends {Ember.View}
*/
var PDFView = Ember.View.extend({
tagName: 'canvas',
/**
* Url to pdf file.
* @property src
* @type {string}
*/
src: null,
/**
* @property pdfObj
* @type {[type]}
*/
pdfObj: null,
/**
* @property resizeHandler
* @type {function}
*/
resizeHandler: null,
/**
* @property pageNumber
* @type {Number}
*/
pageNumber: 1,
/**
* Download the pdf and initalize a pdf.js object.
* @method getPdf
* @return {Promise} Resolves when pdf is loaded.
*/
getPdf: function(){
var self = this;
if (this.get('state') !== 'inDOM') return false;
return PDFJS.getDocument(this.get('src')).then(function(pdf) {
self.set('pdfObj', pdf);
});
}.observes('src').on('didInsertElement'),
/**
* Render a page in the canvas.
* @method renderPage
* @return {void}
*/
renderPage: function(){
var pdf = this.get('pdfObj'),
self = this;
if (!pdf) return false;
pdf.getPage(this.get('pageNumber')).then(function(page) {
var parentWidth = self.$().parent().width(),
viewport = page.getViewport(parentWidth / page.getViewport(1.0).width),
canvas = document.getElementById(self.get('elementId')),
context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
page.render({canvasContext: context, viewport: viewport});
});
}.observes('pdfObj', 'pageNumber'),
/**
* Setup window resize observer
* @method didInsertElement
* @return {void}
*/
didInsertElement: function(){
var self = this;
var resizeHandler = function(){
Ember.run.debounce(self, self.get('renderPage'), 200);
};
this.set('resizeHandler', resizeHandler);
$(window).bind('resize', this.get('resizeHandler'));
},
/**
* Teardown the resize observer.
* @method willDestroy
* @return {void}
*/
willDestroy: function(){
$(window).unbind('resize', this.get('resizeHandler'));
}
});
export default PDFView;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment