Lambda Layer で PDFTK を利用する。
API Gateway + Lambda を使ってS3上のPDFをマージする処理を実装した際に、
PDFTK を Lambda Layer に組み込んだ時のメモ。
PDFTK を動かす Lambda Layer の作成方法
- Dockerなどで Amazon Linux 2の環境を用意(もしかしたらcentosだったかも・・・)
- Amazon Linux 2 上で PDFTK をビルド(もしかしたらcentosだったかも・・・)
- ビルドした PDFTK のファイルを Lambda Layer の構成に組み込む
1. Dockerなどで Amazon Linux 2の環境を用意
ここは省略
2. Amazon Linux 2 上で PDFTK をビルド
PDFTKのサイトの「 Build from Source Code 」の手順でビルドする。
https://www.pdflabs.com/docs/install-pdftk-on-redhat-or-centos/
3. ビルドした PDFTK のファイルを Lambda Layer の構成に組み込む
この2ファイルを下記Lambda Layer の構成に組み込み、nodejsフォルダを圧縮して Lambda Layer にアップロードするだけ。
・/usr/local/bin/pdftk
・pdftk-2.02-dist/lib64/libgcj.so.10
次の index.js では、pdftk の cat (結合) と version (バージョン表示)のみ実装している。
const { PATH, LD_LIBRARY_PATH, PKG_CONFIG_PATH } = process.env
const BIN = '/opt/nodejs/node_modules/pdftk-lambda/bin'
process.env.PATH = `${PATH}:${BIN}`
process.env.LD_LIBRARY_PATH = `${LD_LIBRARY_PATH}:${BIN}`
process.env.PKG_CONFIG_PATH = `${PKG_CONFIG_PATH}:${BIN}`
/**
* バージョン
*/
module.exports.version = () => {
return new Promise((resolve, reject) => {
require('child_process').exec(
'pdftk --version',
(error, stdout, stderr) => {
if (error) reject(error)
else resolve(stdout)
}
)
})
}
/**
* 結合
* Example:pdftk pdf1.pdf pdf2.pdf cat output combined.pdf
*/
module.exports.cat = ( inputFiles, outputFile ) => {
console.log('pdftk ' + inputFiles.join(' ') + ' cat output ' + outputFile);
return new Promise((resolve, reject) => {
require('child_process').exec(
'pdftk ' + inputFiles.join(' ') + ' cat output ' + outputFile,
(error, stdout, stderr) => {
if (error) reject(error)
else resolve(stdout)
}
)
})
}
Lambda Layer を使う場合はこんな感じ。
var pdftk = require('pdftk-lambda');
/**
* PDF結合
*/
async function pdfMerge( inPutFiles, outPutFile ){
let ret = true;
try{
await pdftk.cat( inPutFiles, '"' + outPutFile + '"' );
}catch(e){
ret = !ret;
console.log('-(pdtfk cat error log start )-');
console.log(e);
console.log('-(pdtfk cat error log end )-');
}
return ret;
}
Author And Source
この問題について(Lambda Layer で PDFTK を利用する。), 我々は、より多くの情報をここで見つけました https://qiita.com/nonamuuuuuuu/items/a290f36d1f1e5c725369著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .