I am trying to use jsPDF and jspdf-autotable in my Angular 5.2.0 project. My package.json is below (related parts):
\"dependencies\": {
...
\"jspdf\"
This is how i did in Angular 8 please check below example which generate fake user using faker service, you can change it with your API response.
Install packages via npm
npm i jspdf jspdf-autotable faker --save
Install types
npm install @types/jspdf @types/faker --save-dev
add below entries into angular.json
"scripts": [
"node_modules/jspdf/dist/jspdf.min.js",
"node_modules/jspdf-autotable/dist/jspdf.plugin.autotable.js"
]
component.ts
import * as faker from 'faker'; // Not really require by jspdf or jsPDF-AutoTable
declare var jsPDF: any;
@Component({
selector: 'faker',
templateUrl: './faker.component.html',
})
export class FakerPDFGeneratorComponent {
headRows() {
return [{id: 'ID', name: 'Name', email: 'Email', city: 'City', expenses: 'Sum'}];
}
footRows() {
return [{id: 'ID', name: 'Name', email: 'Email', city: 'City', expenses: 'Sum'}];
}
bodyRows(rowCount) {
rowCount = rowCount || 10;
let body = [];
for (var j = 1; j <= rowCount; j++) {
body.push({
id: j,
name: faker.name.findName(),
email: faker.internet.email(),
city: faker.address.city(),
expenses: faker.finance.amount(),
});
}
return body;
}
createPdf() {
var doc = new jsPDF();
doc.setFontSize(18);
doc.text('With content', 14, 22);
doc.setFontSize(11);
doc.setTextColor(100);
// jsPDF 1.4+ uses getWidth, <1.4 uses .width
var pageSize = doc.internal.pageSize;
var pageWidth = pageSize.width ? pageSize.width : pageSize.getWidth();
var text = doc.splitTextToSize(faker.lorem.sentence(45), pageWidth - 35, {});
doc.text(text, 14, 30);
doc.autoTable({
head: this.headRows(),
body: this.bodyRows(40),
startY: 50,
showHead: 'firstPage'
});
doc.text(text, 14, doc.autoTable.previous.finalY + 10);
doc.save('table.pdf');
}
}