在lambda nodejs中创建密码pdf文件

问题描述 投票:0回答:1

这里是使用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。

什么问题?

node.js aws-lambda
1个回答
1
投票

QPDF是一个命令行程序,在使用它之前,您需要先安装它(system-wise)。

我在安装QPDF后在Ubuntu上测试了您的代码,并且可以正常工作。您可以参考上面有关其他系统的存储库链接。

sudo apt-get install qpdf

© www.soinside.com 2019 - 2024. All rights reserved.