You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过HummusRecipe在服务端解密PDF?Express实现遇阻求助

解决Node.js/Express中带密码PDF的解密问题

我之前也碰到过类似的qpdf SPAWN错误,大概率是环境依赖没配置到位,加上HummusRecipe确实没有解密能力,给你几个靠谱的解决思路:

一、修复qpdf的SPAWN错误

node的qpdf包本质是调用系统层面的qpdf二进制程序,不是纯JS实现,所以SPAWN错误基本是系统里没装qpdf或者路径没配置对:

  • 先安装系统级的qpdf:
    • Linux:执行sudo apt-get install qpdf
    • macOS:用Homebrew装brew install qpdf
    • Windows:从qpdf官方渠道下载安装包,安装后把qpdf的bin目录添加到系统PATH环境变量里
  • 重新安装node的qpdf包:
    先卸载旧版本再装最新稳定版:
    npm uninstall qpdf && npm install qpdf
    
  • 手动指定qpdf二进制路径:
    如果PATH配置后还是不行,可以在代码里直接指定qpdf的实际路径:
    const qpdf = require('qpdf');
    const express = require('express');
    const app = express();
    
    // Express接口示例
    app.post('/decrypt-pdf', (req, res) => {
      const options = {
        inputFile: `${process.cwd()}/logs/temp.pdf`,
        outputFile: `${process.cwd()}/logs/decrypted.pdf`,
        password: '123', // 你的PDF密码
        binaryPath: '/usr/bin/qpdf' // 换成你系统里qpdf的实际路径,Windows类似'C:/Program Files/qpdf/bin/qpdf.exe'
      };
    
      qpdf.decrypt(options, (err) => {
        if (err) {
          console.error('解密失败:', err);
          return res.status(500).send('解密失败');
        }
        // 读取解密后的文件返回给客户端或者做后续处理
        res.sendFile(options.outputFile);
      });
    });
    

二、替代方案:用纯JS库pdf-lib(更适合服务端)

如果不想折腾系统依赖,推荐用pdf-lib,这是纯JavaScript实现的PDF处理库,不需要依赖任何系统二进制工具,非常适合Express服务端环境:

  • 安装依赖:
    npm install @pdf-lib/core
    
  • Express接口中的解密示例:
    const { PDFDocument } = require('@pdf-lib/core');
    const fs = require('fs').promises;
    const express = require('express');
    const app = express();
    
    app.post('/decrypt-pdf', async (req, res) => {
      try {
        // 读取加密的PDF文件
        const encryptedPdfBytes = await fs.readFile(`${process.cwd()}/logs/temp.pdf`);
        // 加载并解密PDF
        const pdfDoc = await PDFDocument.load(encryptedPdfBytes, { password: '123' });
        // 保存解密后的PDF
        const decryptedPdfBytes = await pdfDoc.save();
        // 写入文件或者直接返回给客户端
        await fs.writeFile(`${process.cwd()}/logs/decrypted.pdf`, decryptedPdfBytes);
        
        res.setHeader('Content-Type', 'application/pdf');
        res.send(decryptedPdfBytes);
      } catch (err) {
        console.error('解密出错:', err);
        res.status(500).send('解密失败,请检查密码或文件是否有效');
      }
    });
    

补充说明:HummusRecipe的定位确实只包含PDF生成和加密的基础功能,没有提供解密API,所以必须借助第三方工具来完成解密操作。

内容的提问来源于stack exchange,提问作者Puneet Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:34:38