NodeJS 使用puppeteer和adm-zip批量生成pdf,显示错误节点:internal/crypto/hash:113 if(!this[kHandle].update(data,encoding))

tf7tbtn2  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(243)

我用puppeteer和adm-zip批量生成pdf,但是当它把生成的pdf插入zip文件时,它返回错误
这是我的代码。
`router.get('/:database/:tipo/:ids/:limite?. zip',async(req,res)=> { const { database,tipo,ids,limite } = req.params;

let idsArray;
if (ids === "ids") {
  const pool = new Pool({
    user: process.env.POSTGRES_USER,
    host: process.env.POSTGRES_HOST,
    database: database,
    password: process.env.POSTGRES_PASSWORD,
    port: process.env.POSTGRES_PORT,
  });

  let query = `SELECT id FROM controle_interno.${tipo} ORDER BY id ASC`;
  if (limite) {
    query += ` LIMIT ${limite}`;
  }
  const result = await pool.query(query);
  idsArray = result.rows.map(row => row.id);
} else {
  idsArray = ids.split(",");
}

const zip = new AdmZip();
const browser = await puppeteer.launch({
  args: ['--disable-gpu', '--disable-software-rasterizer', '--disable-dev-shm-usage', '--disable-setuid-sandbox', '--no-sandbox']
});
const page = await browser.newPage();

for (let i = 0; i < idsArray.length; i++) {
  const id = idsArray[i];
  const url = `http://${IP}:${port}/${database}/${tipo}/${id}`;
  console.log(url);
  try {
  await page.goto(url, {waitUntil: 'networkidle0'});
  await page.evaluate(() => {
    const button = document.getElementById('gerar-pdf');
    button.remove();
  });
const pdf = await page.pdf({ format: 'A4', printBackground: true, pageRanges: '1' });
  zip.addFile(`${id}.pdf`, pdf, `PDF para o ID ${id}`);
} catch (err) {
  console.error(err.stack);
 }
}

await browser.close();
const zipBuffer = zip.toBuffer();

res.set({
  'Content-Type': 'application/zip',
  'Content-Disposition': `attachment; filename=${tipo}.zip`,
  'Content-Length': zipBuffer.length
});

res.send(zipBuffer);

});
router = router;”
我从一个视图中提取数据并插入ejs文件,我已经尝试了其他视图,它没有返回这个错误,只有一个特定的视图,也许它可能是视图的数据?当我单独生成每一个时,它不会返回任何错误,只有当它是批量生成时才会返回错误。
我还没有尝试任何替代方法,我只是想查看视图并更改数据,但在我的视图中没有可以纠正的错误数据...

i2loujxw

i2loujxw1#

我发现了这个错误,一些由puppeteer生成的pdf具有非常高的图像分辨率,导致pdf的大小在10到30MB之间,我做了一个测试,只生成了200个,它返回了1.1GB的数据。我改变了图像的分辨率,并再次进行了批量生成,我设法生成了所有图像,压缩文件大小为787MB。

相关问题