エラーが発生しました:jsPDFが定義されていません。現在、次のコードを使用しています:
import { Component, OnInit, Inject } from '@angular/core';
import 'jspdf';
declare let jsPDF;
@Component({
....
providers: [
{ provide: 'Window', useValue: window }
]
})
export class GenratePdfComponent implements OnInit {
constructor(
@Inject('Window') private window: Window,
) { }
download() {
var doc = jsPDF();
doc.text(20, 20, 'Hello world!');
doc.text(20, 30, 'This is client-side Javascript, pumping out a PDF.');
doc.save('Test.pdf');
}
}
jsPDFのnpmをインストールしていますが、jspdfをインポートし、angular-cliで実行する方法がわかりません:1.0.0-beta.17
多くの研究開発を行った後、以下のようにいくつかの手順があります:Install:
npm install jspdf --save
typings install dt~jspdf --global --save
npm install @types/jspdf --save
angle-cli.jsonに以下を追加:
"scripts": [ "../node_modules/jspdf/dist/jspdf.min.js" ]
html:
<button (click)="download()">download </button>
コンポーネントts:
import { Component, OnInit, Inject } from '@angular/core';
import * as jsPDF from 'jspdf'
@Component({
...
providers: [
{ provide: 'Window', useValue: window }
]
})
export class GenratePdfComponent implements OnInit {
constructor(
@Inject('Window') private window: Window,
) { }
download() {
var doc = new jsPDF();
doc.text(20, 20, 'Hello world!');
doc.text(20, 30, 'This is client-side Javascript, pumping out a PDF.');
doc.addPage();
doc.text(20, 20, 'Do you like that?');
// Save the PDF
doc.save('Test.pdf');
}
}
この答え に基づいてjsPdfデモを作成しました@ gsmalhotra
最初のインストール
_npm install jspdf --save
_
画像の配列を使用し、最初に画像をbase64に変換しました(jsPDFは画像URLを許可しません)
_getBase64Image(img) {
var canvas = document.createElement("canvas");
console.log("image");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataURL = canvas.toDataURL("image/jpeg");
return dataURL;
}
_
次に、ループ内で、base64イメージを返す上記の関数を呼び出し、doc.addImage()
を使用してPDFにイメージを追加しました。
_for(var i=0;i<this.images.length;i++){
let imageData= this.getBase64Image(document.getElementById('img'+i));
doc.addImage(imageData, "JPG", 10, (i+1)*10, 180, 150);
doc.addPage();
}
_
HTMLコード
_<div class="col-md-4" *ngFor="let img of images;let i=index">
<img id="img{{i}}" class="img-fluid" crossOrigin="Anonymous" [src]="img.url">
</div>
_
古い質問ですが、これは私のangularアプリで立ち上がって実行した代替ソリューションです。最終的に このjsPDFソリューション ionic/cordovaを使用せずに動作するように変更しました。 CLI。
npm install jspdf --save
npm install @types/jspdf --save
npm install html2canvas --save
npm install @types/html2canvas --save
PDFを生成するコンテンツを含むdivにIDを追加します
<div id="html2Pdf">your content here</div>
ライブラリをインポートする
import * as jsPDF from 'jspdf';
import * as html2canvas from 'html2canvas';
PDFを生成するためのメソッドを追加します
generatePdf() {
const div = document.getElementById("html2Pdf");
const options = {background: "white", height: div.clientHeight, width: div.clientWidth};
html2canvas(div, options).then((canvas) => {
//Initialize JSPDF
let doc = new jsPDF("p", "mm", "a4");
//Converting canvas to Image
let imgData = canvas.toDataURL("image/PNG");
//Add image Canvas to PDF
doc.addImage(imgData, 'PNG', 20, 20);
let pdfOutput = doc.output();
// using ArrayBuffer will allow you to put image inside PDF
let buffer = new ArrayBuffer(pdfOutput.length);
let array = new Uint8Array(buffer);
for (let i = 0; i < pdfOutput.length; i++) {
array[i] = pdfOutput.charCodeAt(i);
}
//Name of pdf
const fileName = "example.pdf";
// Make file
doc.save(fileName);
});
}
このソリューションは私のWebアプリでうまく機能し、PDF(データを非同期で受信した後)を生成するタイミングを制御できるため、有益でした。また、インストールする必要はありませんでした。すべてのライブラリをグローバルに。