8

I have created an Angular2 application that generates JSON data. I want to save this JSON output into a file, preferably a PDF file. This application is written using Typescript.

I have used jsPDF for writing the JSON data into a PDF file. I have installed jsPDF package via npm using npm install jspdf --save. I have also added necessary links in index.html page. I made these changes to my application when it was running. I was able to save the JSON data to the file.

When I stopped and restarted the application, it did not start as expected. I got the following error:

[email protected] start C:\Users*****\Documents\Projects\Angular\json-to-pdf

tsc && concurrently "npm run tsc:w" "npm run lite"

app/components/app.component.ts(35,19): error TS2304: Cannot find name 'jsPDF'.

I'm adding the code that I have used.

package.json:

"dependencies": {
     "@angular/common": "2.0.0-rc.1",
     "@angular/compiler": "2.0.0-rc.1",
     "@angular/core": "2.0.0-rc.1",
     "@angular/http": "2.0.0-rc.1",
     "@angular/platform-browser": "2.0.0-rc.1",
     "@angular/platform-browser-dynamic": "2.0.0-rc.1",
     "@angular/router": "2.0.0-rc.1",
     "@angular/router-deprecated": "2.0.0-rc.1",
     "@angular/upgrade": "2.0.0-rc.1",
     "angular2-in-memory-web-api": "0.0.7",
     "bootstrap": "^3.3.6",
     "es6-shim": "^0.35.0",
     "jquery": "^2.2.4",
     "jspdf": "^1.2.61",
     "reflect-metadata": "^0.1.3",
     "rxjs": "5.0.0-beta.6",
     "systemjs": "0.19.27",
     "zone.js": "^0.6.12"
}

index.html:

<html>
  <head>
    <title>JSON to PDF</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    ....

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script>

    ....

  </head>

  <!-- 3. Display the application -->
  <body class="bg">
    <div>
      <app>Loading...</app>
    </div>
  </body>
</html>

app.component.ts:

 import {Component} from '@angular/core';
 @Component({
   selector: 'app',
   template: `<button (click)="createFile()">Export JSON to PDF</button>`
 })
 export class AppComponent {
     public item = {
        "Name" : "XYZ",
         "Age" : "22",
         "Gender" : "Male"
     }
     constructor() {}
     createFile(){
        var doc = new jsPDF();
        var i=0;
        for(var key in this.item){
           doc.text(20, 10 + i, key + ": " + this.item[key]);
           i+=10;
        }
        doc.save('Test.pdf');
    }
 }

I think some import statement is missing in the app.component.ts file. Can someone point to the correct import statement if that is what is missing? If that is the error that I have made, can I know how to correctly us jsPDF in Angular2?

Thank you.

2
  • Facing same problem..Looking for someone to answer !!!! Commented Jul 28, 2016 at 15:50
  • Did you found out the answer for that ?? i got stucked in this error for a long time :( Commented Jul 28, 2016 at 21:22

2 Answers 2

9

Using jspdf with the latest angular cli version is really easy. Simply install jspdf from npm and use it something like this:

app.component.ts

// Note that you cannot use import jsPDF from 'jspdf' if you 
// don't install jspdf types from DefinitelyTyped
let jsPDF = require('jspdf');
import { Component } from '@angular/core';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title = 'app works!';

  constructor() {
    let doc = new jsPDF();
    doc.text("Hello", 20, 20);
    doc.save('table.pdf');
  }
}

For old versions of angular cli based on systemjs instead of webpack

Here is a link to a description of one way to work with the angular-cli and libraries in umd or plain javascript. It basically involves using declare jsPDF: any together with importing the library in systemjs vendor files.

Sign up to request clarification or add additional context in comments.

7 Comments

Still facing that same Error !!!! How to use that jspdf in Typescript ?
Oops, included the wrong vendor file in angular-cli-build.js. Try the updated config above.
@ Simon Bengtsson , See here my question is different :( I didn't find any files like app.component.ts,src/system-config.ts,angular-cli-build.js in my application . I have to find out first so that i can implement the steps as you mentioned in your answer .
This answer is mainly for people who use the angular-cli, but could be taken as inspiration for other systemjs projects. If you have another setup it would probably be easier if you created a new question where you can describe more in detail your code and build config. Feel free to ping me after that and I'll take a look.
@ Simon Bengtsson, Help me out from this if it's possible -----> stackoverflow.com/questions/38661808/…
|
4

The way you would do using Angular-cli and Angular 4 is first add jspdf to Scripts array in .angular-cli.json

"scripts": [
        "../node_modules/jspdf/dist/jspdf.min.js"
      ]

then in the component add the following

import * as JSPdf from 'jspdf'; 

then in your class

  generatePdf() {
    let doc = new JSPdf();
    doc.text("Hello", 20, 20);
    doc.save('table.pdf');
}

3 Comments

How can i add scripts in my ionic project ? i have installed jspdf using npm , stuck what to do next
even if you have installed jspdf using npm, there will be files like below directory structure node_modules/jspdf/dist/jspdf.min.js, you should add given lines as it is under list of scripts in specified file .angular-cli.json
In my case the relative path to node_modules starts from the same directory so I used "./node_modules/jspdf/dist/jspdf.min.js". Anyway this is the only answer that did the trick for me.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.