为Phantomjs生成的PDF文件添加密码

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

我有一些服务器端

node.js
代码,可以根据请求生成 PDF 文件,使用
phantomJS
,并且我正在寻找一种为输出添加密码保护的方法。

遗憾的是我在 phantom 中没有发现任何提及这样的选项,这是有道理的,因为 Chrome 也不提供这个选项。或者,我可以运行一些其他工具,该工具将获取 phantom 创建的 PDF 并为其添加密码保护,但我似乎找不到任何可以完全做到这一点的工具(向现有文件添加密码),而且这是完全免费的使用(最好是非 GPL)。

很乐意提供有关如何完成此任务的建议。谢谢!

pdf phantomjs
2个回答
1
投票

您可以使用 node-qpdf 包来加密和解密 PDF。它使用 qpdf。因此,首先您需要转换 HTML -> PDF,然后转换 PDF -> 受密码保护的 PDF。


0
投票
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;
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.