An AngularJS directive
ng-pdf
to display PDF files with PDFJS.
Integrate PDF files right into web pages.
Check package.json
file for dependencies and their versions:
pdf.js
and pdf.worker.js
Install or copy over the file dist/angular-pdf.min.js
or dist/angular-pdf.js
npm install angular-pdf --save
or
bower install angular-pdf --save
index.html
<script src="https://github.com/sayanee/angularjs-pdf/raw/master/js/vendor/angular-pdf/dist/angular-pdf.js"></script>
var app = angular.module('App', ['pdf']);
<div class="wrapper" ng-controller="DocCtrl">
<ng-pdf template-url="/partials/viewer.html"></ng-pdf>
</div>
scale
as an option
<ng-pdf template-url="/partials/viewer.html" scale=1></ng-pdf>
scale
attribute can also be page-fit
<ng-pdf template-url="/partials/viewer.html" scale="page-fit"></ng-pdf>
page
as an option for initial page number
<ng-pdf template-url="/partials/viewer.html" page=12></ng-pdf>
usecredentials
as an option to add credentials / authorization
<ng-pdf template-url="/partials/viewer.html" usecredentials="true"></ng-pdf>
debug
to enable debugging console output (optional, disabled by default)
<ng-pdf template-url="/partials/viewer.html" debug="true"></ng-pdf>
canvas
element to display the pdf in the template-url file<canvas id="pdf-canvas"></canvas>
app.controller('DocCtrl', function($scope) {
$scope.pdfUrl = '/pdf/relativity.pdf';
});
$scope.httpHeaders
optionapp.controller('DocCtrl', function($scope) {
$scope.pdfUrl = '/pdf/relativity.pdf';
$scope.httpHeaders = { Authorization: 'Bearer some-aleatory-token' };
});
Next / Previous page: Include the controls in the view file as defined in the attribute template-url
<button ng-click="goPrevious()"><</span></button>
<button ng-click="goNext()">></span></button>
template-url
<button ng-click="zoomIn()">+</span></button>
<button ng-click="fit()">100%</span></button>
<button ng-click="zoomOut()">-</span></button>
template-url
and the initial class rotate0
<button ng-click="rotate()">90</span></button>
...
<canvas id="pdf-canvas" class="rotate0"></canvas>
include the css styles:
.rotate0 {-webkit-transform: rotate(0deg); transform: rotate(0deg); }
.rotate90 {-webkit-transform: rotate(90deg); transform: rotate(90deg); }
.rotate180 {-webkit-transform: rotate(180deg); transform: rotate(180deg); }
.rotate270 {-webkit-transform: rotate(270deg); transform: rotate(270deg); }
template-url
<span>Page: </span><input type="text" min=1 ng-model="pageNum"><span> / {{pageCount}}</span>
template-url
with a tag nav
with an ng-class
. Amend the scroll amount as required.<nav ng-class="{'pdf-controls fixed': scroll > 100, 'pdf-controls': scroll <= 100}">
...
</nav>
And include the relevant css styles as required:
.pdf-controls { width: 100%; display: block; background: #eee; padding: 1em;}
.fixed { position: fixed; top: 0; left: calc(50% - 480px); z-index: 100; width: 100%; padding: 1em; background: rgba(238, 238, 238,.9); width: 960px; }
index.html
with a web serverCreate a Blob:
currentBlob = new Blob([result], {type: 'application/pdf'});
$scope.pdfUrl = URL.createObjectURL(currentBlob);
In the controller, you can call the function $scope.onError
:
$scope.onError = function(error) {
// handle the error
// console.log(error);
}
In the controller, you can call the function $scope.onLoad
when the pdf succesfully loaded:
$scope.loading = 'loading';
$scope.onLoad = function() {
// do something when pdf is fully loaded
// $scope.loading = '';
}
In the controller, you can call the function $scope.onProgress
$scope.onProgress = function(progress) {
// handle a progress bar
// progress% = progress.loaded / progress.total
// console.log(progress);
}
In the controller, you can use the function scope.onPassword
. This function is called when the PDF require an opening password.
$scope.onPassword = function (updatePasswordFn, passwordResponse) {
// if passwordResponse === PDFJS.PasswordResponses.NEED_PASSWORD
// you can provide the password calling updatePasswordFn('THE_PASSWORD')
// else if passwordResponse === PDFJS.PasswordResponses.INCORRECT_PASSWORD
// provided password is not correct
};
pageNum
attribute is no longer required. Checkout the implementationPDF example used is Relativity: The Special and General Theory by Albert Einstein as kindly organized and made available free by Project Gutenberg.
This project is an OPEN Open Source Project. This means that:
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
Please see CONTRIBUTING.md
for details.
This repository follows the Semantic Versioning guidelines:
For patches, run the command:
npm run release patch
npm run release minor
npm run release major