javascript 为使用Puppeteer生成的PDF添加密码保护

44u64gxh  于 2023-09-29  发布在  Java
关注(0)|答案(3)|浏览(136)

我使用NestJS和Puppeteer在我的Node.js应用程序中生成PDF。但是,我需要为生成的PDF添加密码保护。下面是我的代码的一个版本:

async generatePdf(body: IPdf, functions?: void) {
    let pdf: Buffer;
    const browser = await puppeteer.launch({
      args: ["--no-sandbox", "--disable-setuid-sandbox"],
      ignoreDefaultArgs: ["--disable-extensions"],
    });

    try {
      const page = await browser.newPage();

      functions;
      this.formatDate();
      this.numerosLetras();
      this.formatCurrency();
      this.formatSpecialty();
      this.toUpperCase();
      const content = await this.compile(body.templateName, body.data);

      await page.setContent(content);
      
      pdf = await page.pdf({
        format: "a4",
        printBackground: true,
        margin: { bottom: 30, left: 20, right: 20, top: 20 },
      });
    } catch (error) {
      console.log(error);
    }
    await browser.close();
    return pdf;
  }
uklbhaso

uklbhaso1#

通过快速搜索给我的印象是,他们不打算将其作为一个功能集GitHub Issue添加。
你可以做的是使用另一个库来加密传入的pdf,类似于-node-qpdf2。用法似乎很简单--

import { encrypt } from "node-qpdf2";

const pdf = {
  input: "./test/example.pdf",
  output: "/tmp/encrypted.pdf",
  password: "password_that_you_will_give_to_enduser",
}

await encrypt(pdf);

干杯!干杯!

kyvafyod

kyvafyod2#

根据您的用例,您可能会考虑一种更通用的方法,这种方法可能会提供更强的保护,使用可从nodejs调用的单独文件加密实用程序加密pdf。有很多可能性,但例如Xecrets File Command Line很容易使用,并且工作得很好。还有一个配套的桌面应用程序。此外,它还兼容AxCrypt。【披露:我是Xecrets的作者]

thtygnil

thtygnil3#

PDF密码只对少数人有用的原因。是有2个级别的密码和都存储在PDF中的解密密钥。
那么,它们是什么,以及如何滥用它们?

  • 1是所谓的“所有者键”,这是一个你看到的,阻止你保存或打印PDF从浏览器像驱动器的 puppet ,一般可以忽略(这是可选的,许多浏览器不支持它,但自然边缘供电的Acrobat会!)。因此,任何像 puppet 师用户这样的应用程序都是“PDF所有者”,可以随心所欲,同样适用于任何其他用户,你通过密码将文件所有权交给他们打开。
  • 2是更安全的所谓的“用户密钥”,这是一个人需要看到看到,从而使用您的私人数据。永远不要给予任何人你的私钥来“打开”PDF,否则他们将成为PDF内容的所有者。

出于这个原因,没有必要为非个人的PDF提供密码,密码仅用于保护PDF内容不被其他人查看,与外部zip文件密码系统相同,一旦打开,内容就是公共领域。
如果您使用“用户”(个人)密码获取个人公用事业账单,银行或税务数据,则很容易在没有任何密码的情况下保存文件,除非您希望保持隐私。

相关问题