我需要通过电子邮件发送一个加密的pdf文件在Node JS



我使用html-pdf节点库生成PDF,然后使用node-qpdf库对其加密。

pdf.create(htmlString, {format: 'A4', timeout: 600000})
.toFile(filePath, function (err, data) {
if (err) {
logger.error('Error while creating the pdf file ::->', err.stack);
return reject(err);
} else {
logger.info('Successfully able to create the file in tmp');
encrypt(filePath, '/tmp/' + _.get(lead, 'code', '00003') + '_receipt_encrypted.pdf');
return resolve(data);
}
});
var encrypt = function (inputFile, outputFile) {
let exec = require('child_process').exec;
var ownerPass = 'ownerpasswd'
var userPass = 'ownerpasswd'
let cmd = 'qpdf --encrypt ' + ownerPass + ' ' + userPass + ' 256 -- ' + inputFile + ' ' + outputFile
exec(cmd, function (err) {
if (err) {
console.error("The error", err, err.stack)
} else {
console.log("The PDF is encrypted")
}
})
}

当我试图通过电子邮件发送时,我能够在/tmp/文件夹位中生成加密的pdf文件,我得到了错误[Error: ENOENT: no such file or directory, open '/tmp/A6rz2K-p2n_receipt_encrypted.pdf'] {

这是读取文件并通过电子邮件发送的代码。

if (err) {
console.log('error in reading encrypted file================= ', err, err.stack);
}
var attachment = {
content: data.toString('base64'),
name: encryptedFileName,
type: "application/pdf"
};
sendReceiptEmail(lead,attachment);
logger.log("end of receipt pdf creation");
})
return Promise.resolve();
})```

我猜你有异步代码执行的问题。对encrypt的调用看起来不错,因为该函数是在pdf..toFile回调函数内部调用的。也许您需要确保encrypt完成后调用sendReceiptEmail,在exec回调函数内。

正如Raya所评论的那样,我建议重构代码,使用承诺或异步代码执行。

相关内容

  • 没有找到相关文章

最新更新