我有一些服务器端
node.js
代码,可以根据请求生成 PDF 文件,使用 phantomJS
,并且我正在寻找一种为输出添加密码保护的方法。
遗憾的是我在 phantom 中没有发现任何提及这样的选项,这是有道理的,因为 Chrome 也不提供这个选项。或者,我可以运行一些其他工具,该工具将获取 phantom 创建的 PDF 并为其添加密码保护,但我似乎找不到任何可以完全做到这一点的工具(向现有文件添加密码),而且这是完全免费的使用(最好是非 GPL)。
很乐意提供有关如何完成此任务的建议。谢谢!
您可以使用 node-qpdf 包来加密和解密 PDF。它使用 qpdf。因此,首先您需要转换 HTML -> PDF,然后转换 PDF -> 受密码保护的 PDF。
const coherentpdf = require('coherentpdf');
public async createPdf(htmlString, password) {
try {
const tempPath = '/tmp/result.pdf';
const tempPdfOutput = '/tmp/PdfOutput.pdf';
const browser = await puppeteer.launch({
args: chromium.args,
defaultViewport: chromium.defaultViewport,
executablePath: await chromium.executablePath(),
headless: chromium.headless,
ignoreHTTPSErrors: true
});
const page = await browser.newPage();
await page.setContent(htmlString);
await page.pdf({ format: 'A4', path: tempPath });
let pdfe = coherentpdf.fromFile(tempPath, '');
var permissions = [coherentpdf.noEdit];
coherentpdf.toFileEncrypted(pdfe, coherentpdf.pdf40bit, permissions, 'owner', password, false, false, tempPdfOutput);
return tempPath;
} catch (error) {
console.error('Error createPdf:', error);
throw error;
}
}