前提・実現したいこと
Node.jsを用い、AWS Lambda上で画像ファイルに文字を書き込み、
それをPDFとしてAWS S3に保存したいと考えています。
下記のようにコードを記述し、
PDFが作成できることは確認できたのですが、
作成したPDFをS3に送る方法が分かりません。
方法、またはその方法の書いてある記事等ありましたら
ご教示お願い致します。
該当のソースコード
Node.js
1//---------------------------------------------------------------- 2// 画像にテキストを書き込んでPDFとして出力 3//---------------------------------------------------------------- 4// モジュールの読み込み 5var PDFDocument = require('pdfkit'); 6var fs = require('fs'); 7var AWS = require('aws-sdk'); 8var s3 = new AWS.S3(); 9 10exports.handler = function(event, context) { 11 // ドキュメントを作る 12 doc = new PDFDocument; 13 // 出力ファイルを設定する 14 doc.pipe(fs.createWriteStream('/tmp/出力ファイル.pdf')); 15 // フォントを埋め込む 16 doc.font('ipaexm.ttf'); 17 18 var pw = doc.page.width; 19 var ph = doc.page.height; 20 21 // 画像を埋め込む 22 doc.image('テンプレート画像.png', 0, 0, {fit: [pw, ph]}); 23 24 // 文字を表示する 25 doc.fontSize(20).text("test text", 240, 78); 26 27 // 出力を終了する 28 doc.end(); 29 30 // 作成したPDFをparamで渡してS3に保存 31 var params = { 32 Bucket: "バケット名", 33 Key: '出力ファイル.pdf', 34 Body: ~~~~~~ // ここでPDFを渡す? 35 }; 36 s3.putObject(params) 37};
追記
CHERRY様のご回答を参考にS3送信部分を以下のように書き換えました。
しかし、S3への保存はできたものの、
S3で「PDFを開く」をすると、「破損しており開けない」というエラーが出ます。
PDFがうまく送れていないのでしょうか?
Node.js
1 var params = { 2 Bucket: "バケット名", 3 Key: '出力ファイル.pdf', 4 ContentType: 'application/pdf', 5 Body: doc 6 }; 7 8 s3.upload(params, function(err, data) { 9 if(err) { 10 console.log('error : ', err); 11 } 12 }); 13}; 14
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/19 02:09
2018/04/19 07:12
2018/04/19 07:44
2018/04/19 08:00
2018/04/19 08:17