1 /*! Angular-PDF Version: 0.4.0 | (C) Sayanee Basu 2014, released under an MIT license */
6 angular.module('pdf', []).directive('ngPdf', ['$window', function($window) {
9 templateUrl: function(element, attr) {
10 return attr.templateUrl ? attr.templateUrl :
11 'partials/viewer.html'
13 link: function(scope, element, attrs) {
14 var url = attrs.pdfUrl,
16 pageNum = (attrs.page ? attrs.page : 1),
17 scale = attrs.scale > 0 ? attrs.scale : 1,
18 canvasArr = element.find('canvas');
19 var canvas = canvasArr[0];
20 var ctx = canvas.getContext('2d'),
21 windowEl = angular.element($window);
23 windowEl.on('scroll', function() {
24 scope.$apply(function() {
25 scope.scroll = windowEl[0].scrollY;
29 PDFJS.disableWorker = true;
30 scope.pageNum = pageNum;
32 scope.renderPage = function(num) {
33 pdfDoc.getPage(num).then(function(page) {
40 if (attrs.scale === 'page-fit' && !scale) {
41 viewport = page.getViewport(1);
42 pageWidthScale = element[0].clientWidth /
44 pageHeightScale = element[0].clientHeight /
46 scale = Math.min(pageWidthScale, pageHeightScale);
48 viewport = page.getViewport(scale)
51 canvas.height = viewport.height;
52 canvas.width = viewport.width;
59 page.render(renderContext).promise.then(function() {
60 if (typeof scope.onPageRender === 'function') {
67 scope.goPrevious = function() {
68 if (scope.pageToDisplay <= 1) {
71 scope.pageNum = parseInt(scope.pageNum) - 1;
74 scope.goNext = function() {
75 if (scope.pageToDisplay >= pdfDoc.numPages) {
78 scope.pageNum = parseInt(scope.pageNum) + 1;
81 scope.zoomIn = function() {
82 scale = parseFloat(scale) + 0.2;
83 scope.renderPage(scope.pageToDisplay);
87 scope.zoomOut = function() {
88 scale = parseFloat(scale) - 0.2;
89 scope.renderPage(scope.pageToDisplay);
93 scope.changePage = function() {
94 scope.renderPage(scope.pageToDisplay);
97 scope.rotate = function() {
98 if (canvas.getAttribute('class') === 'rotate0') {
99 canvas.setAttribute('class', 'rotate90');
100 } else if (canvas.getAttribute('class') === 'rotate90') {
101 canvas.setAttribute('class', 'rotate180');
102 } else if (canvas.getAttribute('class') === 'rotate180') {
103 canvas.setAttribute('class', 'rotate270');
105 canvas.setAttribute('class', 'rotate0');
109 PDFJS.getDocument(url, null, null, scope.onProgress).then(
111 if (typeof scope.onLoad === 'function') {
116 scope.renderPage(scope.pageToDisplay);
118 scope.$apply(function() {
119 scope.pageCount = _pdfDoc.numPages;
124 if (typeof scope.onError === 'function') {
125 scope.onError(error);
131 scope.$watch('pageNum', function(newVal) {
132 scope.pageToDisplay = parseInt(newVal);
133 if (pdfDoc !== null) {
134 scope.renderPage(scope.pageToDisplay);