
Security News
vlt Launches "reproduce": A New Tool Challenging the Limits of Package Provenance
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
ng2-pdfjs-viewer
Advanced tools
This is a simple library wraps mozilla's pdfjs and viewerjs into an angular2+ component.
This is a simple library wraps mozilla's pdfjs and viewerjs into an angular2+ component.
pdfjs
folder under your angular2+ applications assets
folderpdf.js-gh-pages/build
and pdf.js-gh-pages/web
folders from extracted package to pdfjs
folder.OR
assets
folder.[pdfJsFolder]
: To set the folder path under web
and build
resides.[externalWindow]
: To decide pdf should be inline or in a new tab[openFile]
: Show/hide open file icon[viewBookmark]
: Show/hide bookmark icon[download]
: Show/hide download icon[showSpinner]
: Show a simple css based spinner/progress before the pdf loadsng2-pdfjs-viewer
, run:$ npm install ng2-pdfjs-viewer --save
and then from your Angular AppModule
:
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
// Import PdfJsViewerComponent component
import { PdfJsViewerComponent } from 'ng2-pdfjs-viewer';
@NgModule({
declarations: [
AppComponent,
// Add to declarations
PdfJsViewerComponent
],
imports: [
BrowserModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Once your PdfJsViewerComponent is imported you can use it in your Angular application like this:
<!-- You can now use your library component in app.component.html -->
<h1>
{{title}}
</h1>
<ng2-pdfjs-viewer pdfSrc="your pdf file path"></ng2-pdfjs-viewer>
Here is a use case to download and open the pdf as byte array and open in new tab/window: Please note, pdfSrc can be a Blob or Uint8Array as well For [externalWindow]="true" to work, pop-ups needs to be enabled at browser level
<!-- your.component.html -->
<button (click)="openPdf();">Open Pdf</button>
<!-- Please note, you need a copy of https://github.com/intbot/ng2-pdfjs-viewer/tree/master/pdfjs for some of the below features to work -->
<ng2-pdfjs-viewer #pdfViewer style="width: 800px; height: 400px"
[pdfJsFolder]="'pdfjs'"
[externalWindow]="true"
[downloadFileName]="'mytestfile.pdf'"
[openFile]="false"
[viewBookmark]="false"
[download]="false"></ng2-pdfjs-viewer>
<!-- your.component.ts-->
export class RateCardComponent implements OnInit {
@ViewChild('pdfViewer') pdfViewer
...
private downloadFile(url: string): any {
return this.http.get(url, { responseType: ResponseContentType.Blob }).map(
(res) => {
return new Blob([res.blob()], { type: "application/pdf" });
});
}
public openPdf() {
let url = "url to fetch pdf as byte array";
// url can be local url or remote http request to an api/pdf file.
// E.g: let url = "assets/pdf-sample.pdf";
// E.g: https://github.com/intbot/ng2-pdfjs-viewer/tree/master/sampledoc/pdf-sample.pdf
// E.g: http://localhost:3000/api/GetMyPdf
// Please note, for remote urls to work, CORS should be enabled at the server. Read: https://enable-cors.org/server.html
this.downloadFile(url).subscribe(
(res) => {
this.pdfViewer.pdfSrc = res; // pdfSrc can be Blob or Uint8Array
}
);
}
Given below are examples of writing server apis(In aspnetcore c#) which returns pdfs as byte array. You can choose any server side technology as long as pdf is returned as byte array
Use case 1. As a RDLC local report viewer
[HttpGet]
[Route("MyReport")]
public IActionResult GetReport()
{
// var reportObjectList1
// var reportObjectList2
var reportViewer = new ReportViewer {ProcessingMode = ProcessingMode.Local};
reportViewer.LocalReport.ReportPath = "Reports/MyReport.rdlc";
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("NameOfDataSource1", reportObjectList1));
reportViewer.LocalReport.DataSources.Add(new ReportDataSource("NameOfDataSource2", reportObjectList1));
Warning[] warnings;
string[] streamids;
string mimeType;
string encoding;
string extension;
var bytes = reportViewer.LocalReport.Render("application/pdf", null, out mimeType, out encoding, out extension, out streamids, out warnings);
// The below content-disposition is lost when we create Blob() object in client browser. Hence commented out
//var cd = new System.Net.Mime.ContentDisposition
//{
// FileName = "somepdf.pdf",
// Inline = true
//};
//Response.Headers.Add("Content-Disposition", cd.ToString());
return File(bytes, "application/pdf")
}
Use case 2. Return a physical pdf from server
[HttpGet]
[Route("GetMyPdf")]
public IActionResult GetMyPdf()
{
var stream = await {{__get_stream_here__}}
return File(stream, "application/pdf")); // FileStreamResult
// OR
// var bytes = await {{__get_bytes_here__}}
// return File(bytes, "application/pdf")
}
MIT © Code Hippie
FAQs
<img src="h
The npm package ng2-pdfjs-viewer receives a total of 23,276 weekly downloads. As such, ng2-pdfjs-viewer popularity was classified as popular.
We found that ng2-pdfjs-viewer demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
vlt's new "reproduce" tool verifies npm packages against their source code, outperforming traditional provenance adoption in the JavaScript ecosystem.
Research
Security News
Socket researchers uncovered a malicious PyPI package exploiting Deezer’s API to enable coordinated music piracy through API abuse and C2 server control.
Research
The Socket Research Team discovered a malicious npm package, '@ton-wallet/create', stealing cryptocurrency wallet keys from developers and users in the TON ecosystem.