私のAngular 2(version = 4.2.x)プロジェクトでクライアント側pdfライブラリを使用しようとしています pdfmake .
.angular-cli.jsonファイルで、次のようにjsを宣言しました。
"scripts": [
"../node_modules/pdfmake/build/pdfmake.js",
"../node_modules/pdfmake/build/vfs_fonts.js"
]
そして、app.component.tsでは、次のように使用しました。
import * as pdfMake from 'pdfmake';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
pdf: any;
downloadPdf() {
let item = {firstName: 'Peter', lastName: 'Parker'};
this.pdf = pdfMake;
this.pdf.createPdf(buildPdf(item)).open();
}
}
function buildPdf(value) {
var pdfContent = value;
var docDefinition = {
content: [{
text: 'My name is: ' + pdfContent.firstName + ' ' + pdfContent.lastName + '.'
}]
}
console.log(pdfContent);
return docDefinition;
}
アプリをロードするときに、ブラウザコンソールで次のエラーが発生しました。
Uncaught TypeError: fs.readFileSync is not a function
at Object.<anonymous> (linebreaker.js:15)
at Object.<anonymous> (linebreaker.js:161)
at Object.../../../../linebreak/src/linebreaker.js (linebreaker.js:161)
at __webpack_require__ (bootstrap b937441…:54)
at Object.../../../../pdfmake/src/textTools.js (textTools.js:4)
at __webpack_require__ (bootstrap b937441…:54)
at Object.../../../../pdfmake/src/docMeasure.js (docMeasure.js:4)
at __webpack_require__ (bootstrap b937441…:54)
at Object.../../../../pdfmake/src/layoutBuilder.js (layoutBuilder.js:7)
at __webpack_require__ (bootstrap b937441…:54)
この問題を解決するための私の回避策は次のとおりです。
Pdfmake.jsとvfs_fonts.jsをassetフォルダーにコピーし、これをindex.htmlに追加します。
<script src='assets/pdfmake.min.js'></script>
<script src='assets/vfs_fonts.js'></script>
これをapp.component.tsから削除します
import * as pdfMake from 'pdfmake';
そして、これをapp.component.tsに追加します。
declare var pdfMake: any;
最後に、これを.angular-cli.jsから削除します。
"../node_modules/pdfmake/build/pdfmake.js",
"../node_modules/pdfmake/build/vfs_fonts.js"
動作しますが、まだ回避策です。
誰でもこのライブラリをAngular/Typscriptの方法で使用する方法を知っていますか?
どうもありがとう!
@benny_boeによる上記の指示に従って、私はそれを機能させました!以下に要約します。
最初、
npm install pdfmake --save
次に、以下をtypings.d.tsに追加します:
declare module 'pdfmake/build/pdfmake.js';
declare module 'pdfmake/build/vfs_fonts.js';
3番目に、pdfMakeが使用されているファイル(コンポーネントまたはサービス)で、以下の行を追加します。
import * as pdfMake from 'pdfmake/build/pdfmake.js';
import * as pdfFonts from 'pdfmake/build/vfs_fonts.js';
pdfMake.vfs = pdfFonts.pdfMake.vfs;
最後に、通常どおりpdfMake.xxx()を使用します。
まず最初に。 notサードパーティのスクリプトを.angular-cli.json
に追加する必要があります[〜#〜] and [〜#〜] TSファイルにインポートを追加します。 Angular CLI。からの Global scripts Story)を見てください。
Scripts配列を介してライブラリをインポートしたら、TypeScriptコードのimportステートメントを使用してnotインポートする必要があります...
(pdfmake
には型指定がないため、構成ファイルをunsingするときに宣言する必要があります。)
TSファイルに追加する場合は、import * as pdfMake from 'pdfmake';
(サーバー側バージョン!)をクライアント側バージョン('pdfmake/build/pdfmake'
)に置き換えます。フォント('pdfmake/build/vfs_fonts'
)も追加する必要があります。追加しないと、エラーも発生します。
インポートが次のように見える場合、動作するはずです:
import pdfMake from 'pdfmake/build/pdfmake';
import pdfFonts from 'pdfmake/build/vfs_fonts';
pdfMake.vfs = pdfFonts.pdfMake.vfs;
Angular-cli Stories Global Scripts に従ってグローバルスクリプトを使用する場合の別の簡単なアプローチは、指示に注意深く従う場合です。 [〜#〜] if [〜#〜]ライブラリにはタイピングがありません。
angular-cli.jsonファイルについて
"scripts": [
"../node_modules/pdfmake/build/pdfmake.min.js",
"../node_modules/pdfmake/build/vfs_fonts.js"
],
ON src/typings.d.tsファイル
追加 declare var pdfMake: any;
以下の行。
これで、アプリケーションのどこでもpdfMake
グローバル変数が使用可能になりました。
コンストラクターまたは任意のinitメソッドでpdfMakeを記録してみてください
ngOnInit() { console.log(pdfMake); }
[〜#〜] output [〜#〜]
{
createdPdf: f(t),
vfs: {
Roboto-Italic.ttf: "some long encoded string...",
Roboto-Medium.ttf: "some long encoded string...",
Roboto-MediumItalic.ttf: "some long encoded string...",
Roboto-Regular.ttf: "some long encoded string...",
}
}
つまり、すぐに使用できます。
npm i pdfmake;
import * as pdfMake from 'pdfmake/build/pdfmake';
import * as pdfFonts from 'pdfmake/build/vfs_fonts';
pdfMake.vfs = pdfFonts.pdfMake.vfs;
var dd = {
content: [
{
layout: 'lightHorizontalLines', // optional
table: {
// headers are automatically repeated if the table spans over multiple pages
// you can declare how many rows should be treated as headers
headerRows: 1,
widths: [ '*', 'auto', 100, '*' ],
body: [
[ 'First', 'Second', 'Third', 'The last one' ],
[ 'Value 1', 'Value 2', 'Value 3', 'Value 4' ],
[ { text: 'Bold value', bold: true }, 'Val 2', 'Val 3', 'Val 4' ]
]
}
}
]
};
pdfMake.createPdf(dd).download();