这里是使用node.js在复制的pdf文件中创建密码的AWS Lambda问题。
const aws = require("aws-sdk");
const fs = require("fs");
const QPDF = require("node-qpdf");
const s3 = new aws.S3();
exports.handler = async (event) => {
const params = {
Bucket: "BucketName",
Key: "key"
};
const s3Object = await s3.getObject(params).promise();
fs.writeFileSync('/tmp/test.pdf', s3Object.Body.toString('base64'),{'encoding':'base64'});
var options = {
keyLength: 128,
password: 'abc123',
restrictions: {
print: 'low',
useAes: 'y'
}
}
QPDF.encrypt('/tmp/test.pdf',options,(err)=>{
if(err)console.log(err,err.stack);
});
fs.exists ( '/tmp/test.pdf', function (exists) {
console.log (exists);
const file = fs.readFileSync('/tmp/test.pdf');
console.log(file);
const params = {
Bucket: "BucketName",
Key: "test.pdf",
Body: file
};
s3.upload(params, (err,data) => {
if (err) console.log(err);
console.log(data);
});
});
};
这是我的代码!
我可以在S3中复制我的pdf文件,并在S3中成功上传复制的pdf文件。
因此,下一步,我想在该副本pdf文件中创建一个密码。
所以我在这里使用了代码,
var options = {
keyLength: 128,
password: 'abc123',
restrictions: {
print: 'low',
useAes: 'y'
}
}
QPDF.encrypt('/tmp/test.pdf',options,(err)=>{
if(err)console.log(err,err.stack);
});
但有错误。
Response:
{
"errorType": "Error",
"errorMessage": "/bin/sh: qpdf: command not found\n",
"trace": [
"Error: /bin/sh: qpdf: command not found",
"",
" at Socket.<anonymous> (/opt/nodejs/node_modules/node-qpdf/index.js:124:17)",
" at Object.onceWrapper (events.js:300:26)",
" at Socket.emit (events.js:210:5)",
" at Socket.EventEmitter.emit (domain.js:476:20)",
" at addChunk (_stream_readable.js:308:12)",
" at readableAddChunk (_stream_readable.js:289:11)",
" at Socket.Readable.push (_stream_readable.js:223:10)",
" at Pipe.onStreamRead (internal/stream_base_commons.js:182:23)"
]
}
我安装了npm qpdf和node-qpdf并检查了已安装的npms。
什么问题?
QPDF是一个命令行程序,在使用它之前,您需要先安装它(system-wise)。
我在安装QPDF后在Ubuntu上测试了您的代码,并且可以正常工作。您可以参考上面有关其他系统的存储库链接。
sudo apt-get install qpdf