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にする必要はないんでしょうけど、今回は他と統一するために導入しています。。(^^;
やれやれ。。。


