>An AngularJS directive

```html ```
```js app.controller('DocCtrl', function($scope) {
```js app.controller('DocCtrl', function($scope) {
``` < > ``
``` + 100% - ``
```html 90 ... ```
include the css styles:
```css .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); } ``
```html Page: / {{pageCount}} ``
```html ```
And include the relevant css styles as required:
```css .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; } ``
Please see
ng-pdf
to display PDF files with PDFJS.Overview demo
Integrate PDF files right into web pages.
Requirements
Checkpackage.json
file for dependencies and their versions:- AngularJS - get the latest angular.min.js
- PDFJS - build the files
pdf.js
andpdf.worker.js
- Evergreen browsers
Features
- next / previous page
- zoom in / out / fit 100%
- rotate clockwise
- jump to a page number
- when scrolling, the pdf controls will get fixed position at the top
- define the view template
- define the path to pdf with scope variable
- handles error
- show loading of pdf
- show progress percentage of loading pdf
- insert password for protected PDFs
- dynamically change the pdf url
- support retina canvas
- set authorization or http headers
Getting Started
- Install or copy over the file
dist/angular-pdf.min.js
ordist/angular-pdf.js
```shell
npm install angular-pdf --save
```
or
```shell
bower install angular-pdf --save
```
- Include the path to the directive file in
index.html
```html
<script src="js/vendor/angular-pdf/dist/angular-pdf.js"></script>
```
- Include the directive as a dependency when defining the angular app:
```js
var app = angular.module('App', ['pdf']);
```
- Include the directive with the attribute path to the partial under a controller
```html
<div class="wrapper" ng-controller="DocCtrl">
<ng-pdf template-url="/partials/viewer.html"></ng-pdf>
</div>
```
- `scale` as an option
```html
<ng-pdf template-url="/partials/viewer.html" scale=1></ng-pdf>
```
`scale` attribute can also be `page-fit`
```html
<ng-pdf template-url="/partials/viewer.html" scale="page-fit"></ng-pdf>
```
- `page` as an option for initial page number
```html
<ng-pdf template-url="/partials/viewer.html" page=12></ng-pdf>
```
- `usecredentials` as an option to add credentials / authorization
```html
<ng-pdf template-url="/partials/viewer.html" usecredentials="true"></ng-pdf>
```
- `debug` to enable debugging console output (optional, disabled by default)
```html
<ng-pdf template-url="/partials/viewer.html" debug="true"></ng-pdf>
```
- Include the
canvas
element to display the pdf in the template-url file
```html ```
- Include the path to the pdf file in the controller
```js app.controller('DocCtrl', function($scope) {
$scope.pdfUrl = '/pdf/relativity.pdf';
});
``
- Set custom headers, e.g. authorization headers with
$scope.httpHeaders` option```js app.controller('DocCtrl', function($scope) {
$scope.pdfUrl = '/pdf/relativity.pdf';
$scope.httpHeaders = { Authorization: 'Bearer some-aleatory-token' };
});
```Options
- Next / Previous page: Include the controls in the view file as defined in the attribute
template-url
``` < > ``
- **Zoom in / out / fit 100%**: Include the controls in the view file as defined in the attribute
template-url```` + 100% - ``
- **Rotate clockwise**: Include the controls in the view file as defined in the attribute
template-url and the initial class
rotate0````html 90 ... ```
include the css styles:
```css .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); } ``
- **Jump to page number**: Include the controls in the view file as defined in the attribute
template-url````html Page: / {{pageCount}} ``
- **Fixed pdf controls upon scrolling**: Wrap the controls in the view file as defined in the attribute
template-url with a tag
nav with an
ng-class`. Amend the scroll amount as required.```html ```
And include the relevant css styles as required:
```css .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; } ``
- open the file
index.html` with a web serverWhen url is base64 or Uint8Array
Create a Blob:currentBlob = new Blob([result], {type: 'application/pdf'});
$scope.pdfUrl = URL.createObjectURL(currentBlob);
Handle error
In the controller, you can call the function$scope.onError
:$scope.onError = function(error) {
// handle the error
// console.log(error);
}
Show loading
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 = '';
}
Show progress percentage
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);
}
Managing password requests
In the controller, you can use the functionscope.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
};
Variations
- If using with Angular UI modal,
pageNum
attribute is no longer required. Checkout the implementation
Similar projects
- angular-pdf-viewer - a more self-contained directive
- ng-pdfviewer
Credit
PDF example used is Relativity: The Special and General Theory by Albert Einstein as kindly organized and made available free by Project Gutenberg.Contribute
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.Versioning
This repository follows the Semantic Versioning guidelines:- For patches, run the command:
```
npm run release patch
```
- For minor release, run the command:
```
npm run release minor
```
- For major release, run the command:
```
npm run release major
```