Nodejsでimage-to-pdfとpipeline
弊社で提供しています、クラウド請求サービス「アレコレナ」でタイムスタンプ利用に向けての整備をしています。
その中の一つとして、タイムスタンプが埋め込めるように、JpegやPNGでアップされた画像データをPDFに変換する機能を作成していました。
あれこれと調べていたのですが、結果的に「Image-to-PDF」ってプラグインを使うこととしました。
Image-to-PDFって?
画像データをPDFに変換をしてくれます。
サイトはこちら。。。
今回ハマってしまったのがサンプルにある
imgToPDF(pages, imgToPDF.sizes.A4)
.pipe(fs.createWriteStream(‘output.pdf’))
ってところです。
このまま普通に実装しちゃうと、変換されたPDFファイルが書き込まれるまでに抜けちゃうんですよね。
※あたりまっちゃあ、当たり前なんですが(^^;
さてどうしたものか。。。
const cnsWs = fs.createWriteStream(‘output.pdf’);
imgToPDF(pages, imgToPDF.sizes.A4).pipe( cnsWs );
cnsWs.on( ‘finish’,〜);
なんてやっても、pipeのところでエラーになる。。。
pipelineとの出会い
困ったもんだと、あれこれとググってたら「最近はpipeline使うんだよ〜」な記事に出会いました。
これはやってみなければと。。。
npm install stream –save
const { pipeline } = require(‘stream’);
1 2 3 4 5 6 7 8 9 10 11 12 |
return new Promise( function( resolve, reject ) { const cnsWs = _fs.createWriteStream( _path ); pipeline( imgToPDF( _data, imgToPDF.sizes.A4 ), cnsWs, error => { if( error ) { console.error( error ); reject(); } else { console.info("Pipeline successful"); resolve(); } }); }); |
こんな感じでやるときちんとPDFファルが作成されるようになりました。
※Promiseにする必要はないんでしょうけど、今回は他と統一するために導入しています。。(^^;
やれやれ。。。