PDF Viewer Component for Angular 2+
https://vadimdez.github.io/ng2-pdf-viewer/
https://medium.com/@vadimdez/render-pdf-in-angular-4-927e31da9c76
npm install ng2-pdf-viewer --save
In case you're using systemjs
see configuration here.
Add PdfViewerModule
to your module's imports
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app/app.component';
import { PdfViewerModule } from 'ng2-pdf-viewer';
@NgModule({
imports: [BrowserModule, PdfViewerModule],
declarations: [AppComponent],
bootstrap: [AppComponent]
})
class AppModule {}
platformBrowserDynamic().bootstrapModule(AppModule);
And then use it in your component
import { Component } from '@angular/core';
@Component({
selector: 'example-app',
template: `
<div>
<label>PDF src</label>
<input type="text" placeholder="PDF src" [(ngModel)]="pdfSrc">
</div>
<pdf-viewer [src]="pdfSrc"
[render-text]="true"
style="display: block;"
></pdf-viewer>
`
})
export class AppComponent {
pdfSrc: string = '/pdf-test.pdf';
}
- [src]
- [(page)]
- [stick-to-page]
- [external-link-target]
- [render-text]
- [rotation]
- [zoom]
- [original-size]
- [fit-to-page]
- [show-all]
- [autoresize]
- (after-load-complete)
- (error)
- (on-progress)
accepts: string, object, UInt8Array
Pass pdf location
[src]="'https://vadimdez.github.io/ng2-pdf-viewer/pdf-test.pdf'"
For more control you can pass options object to [src]
.
Options object for loading protected PDF would be
{
url: 'https://vadimdez.github.io/ng2-pdf-viewer/pdf-test.pdf',
withCredentials: true
}
See more attributes here.
number
Page number
[page]="1"
supports two way data binding as well
[(page)]="pageVariable"
boolean
Sticks view to the page. Works in combination with [show-all]="true"
and page
.
[stick-to-page]="true"
boolean
Enable text rendering, allows to select text
[render-text]="true"
string
Used in combination with [render-text]="true"
Link target
blank
none
self
parent
top
[external-link-target]="'blank'"
number
Rotate PDF
Allowed step is 90 degree, ex. 0, 90, 180
[rotation]="90"
number
Zoom pdf
[zoom]="0.5"
boolean
if set to true - size will be as same as original document
if set to false - size will be as same as container block
[original-size]="true"
boolean
Works in combination with [original-size]="true"
. You can show your document in original size, and make sure that it's not bigger then container block.
[fit-to-page]="false"
boolean
Show single or all pages altogether
[show-all]="true"
boolean
Turn on or off auto resize.
!Important To make [autoresize]
work - make sure that [original-size]="false"
and pdf-viewer
tag has max-width
or display
are set.
[autoresize]="true"
Get PDF information with callback
First define callback function "callBackFn" in your controller,
callBackFn(pdf: PDFDocumentProxy) {
// do anything with "pdf"
}
And then use it in your template:
(after-load-complete)="callBackFn($event)"
Error handling callback
Define callback in your component's class
onError(error: any) {
// do anything
}
Then add it to pdf-component
in component's template
(error)="onError($event)"
Loading progress callback - provides progress information total
and loaded
bytes. Is called several times during pdf loading phase.
Define callback in your component's class
onProgress(progressData: PDFProgressData) {
// do anything with progress data. For example progress indicator
}
Then add it to pdf-component
in component's template
(on-progress)="onProgress($event)"
In your html
template add input
:
<input (change)="onFileSelected()" type="file" id="file">
and then add onFileSelected
method to your component:
onFileSelected() {
let $img: any = document.querySelector('#file');
if (typeof (FileReader) !== 'undefined') {
let reader = new FileReader();
reader.onload = (e: any) => {
this.pdfSrc = e.target.result;
};
reader.readAsArrayBuffer($img.files[0]);
}
}
By default the worker
is loaded from cdnjs.cloudflare.com
.
In your code update path
to the worker to be for example /pdf.worker.js
(<any>window).PDFJS.workerSrc = '/pdf.worker.js';
This should be set before pdf-viewer
component is rendered.
MIT © Vadym Yatsyuk