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

PHP如何访问带空密码加密的PDF文件?

处理空密码加密PDF的纯PHP方案

针对你在WordPress中用MPDF处理PDF时遇到的空密码加密文件无法解析的问题,以下是无需依赖外部工具(如PDFtk)的纯PHP解决方案:

方案1:使用pdf-lib库(纯PHP无外部依赖)

pdf-lib是纯PHP编写的PDF处理库,支持解密空密码加密的PDF,解密后可导出无加密版本供MPDF处理。

步骤:

  1. 在你的WordPress主题或插件目录下通过Composer安装依赖:
composer require pdf-lib/pdf-lib
  1. 解密并交给MPDF处理的示例代码:
// 加载Composer自动加载文件
require_once __DIR__ . '/vendor/autoload.php';

use PdfLib\PdfLib;

// 读取加密PDF文件内容
$encryptedPdfPath = '/path/to/your/encrypted.pdf';
$encryptedPdfContent = file_get_contents($encryptedPdfPath);

try {
    // 加载PDF并使用空密码解密
    $pdf = PdfLib::load($encryptedPdfContent, '');
    
    // 导出解密后的PDF内容
    $decryptedContent = $pdf->save();
    
    // 创建临时文件存储解密后的PDF(避免直接内存处理大文件)
    $tempFile = tempnam(sys_get_temp_dir(), 'wp_decrypted_pdf_');
    file_put_contents($tempFile, $decryptedContent);
    
    // 用MPDF加载解密后的PDF并执行编辑操作
    $mpdf = new \Mpdf\Mpdf();
    $mpdf->SetSourceFile($tempFile);
    
    // 示例:导入第一页并编辑
    $pageId = $mpdf->ImportPage(1);
    $mpdf->UseTemplate($pageId);
    $mpdf->WriteHTML('<p>添加的编辑内容</p>');
    
    // 输出或保存编辑后的PDF
    $mpdf->Output('edited_result.pdf', 'I');
    
    // 清理临时文件
    unlink($tempFile);
} catch (\Exception $e) {
    error_log('PDF处理失败:' . $e->getMessage());
    echo '处理该PDF时出现错误,请检查日志';
}

方案2:直接扩展FPDI的解密逻辑

MPDF依赖FPDI进行PDF解析,你可以直接调用FPDI的底层API传入空密码解密:

require_once __DIR__ . '/vendor/autoload.php';

try {
    $mpdf = new \Mpdf\Mpdf();
    
    // 初始化FPDI解析器并设置空密码
    $parser = new \SetaSign\Fpdi\PdfParser\PdfParser();
    $parser->setPassword('');
    $parser->setFile('/path/to/encrypted.pdf');
    
    // 解析PDF文档
    $pdfDocument = $parser->parse();
    
    // 将解析后的文档传入MPDF
    $mpdf->setPdfDocument($pdfDocument);
    
    // 执行编辑操作
    $pageId = $mpdf->ImportPage(1);
    $mpdf->UseTemplate($pageId);
    $mpdf->Output('edited.pdf', 'D');
} catch (\SetaSign\Fpdi\PdfParser\PdfParserException $e) {
    error_log('PDF解密失败:' . $e->getMessage());
    echo '无法解密该PDF文件';
}

注意事项

  • 若你的WordPress环境未配置Composer,可手动下载库文件并引入
  • 处理大量PDF时,建议分批处理并及时清理临时文件,避免占用过多服务器内存和磁盘空间
  • 部分特殊加密的PDF可能无法被上述方案处理,若遇到此类情况,需检查PDF的加密算法版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 06:13:15