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

在AWS Lambda的Laravel应用中调用PDFtk命令的实现方法

完善Sidecar Pdftk任务类的实现

核心方法实现

你的Pdftk任务类需继承Hammerstone\Sidecar\LambdaTask,以下是三个必要方法的具体实现:

1. runtime() 方法

指定Lambda运行时的PHP版本,需与你的Laravel应用及Lambda环境版本一致:

use Hammerstone\Sidecar\Runtime;

public function runtime()
{
    // 根据实际环境替换为php81/php82等对应版本
    return Runtime::php82();
}

2. package() 方法

关联你已创建的Pdftk Lambda Layer,确保Lambda环境能调用pdftk二进制文件:

public function package()
{
    return $this->package
        // 替换为你自己的Pdftk Layer ARN(从AWS控制台Layers页面复制)
        ->addLayer('arn:aws:lambda:us-east-1:123456789012:layer:pdftk-layer:1');
}

提示:Layer ARN需匹配你的AWS账号ID、Region和Layer版本号。

3. handler() 方法

实现PDF处理的核心逻辑,接收传入参数并执行pdftk命令:

public function handler($event)
{
    // 从事件参数中提取必要信息
    $inputFile = $event['input_file'];
    $password = $event['password'];
    $outputFile = $event['output_file'];

    // 构造pdftk命令,注意Lambda仅/tmp目录可读写
    $command = "pdftk {$inputFile} input_pw {$password} output {$outputFile}";

    // 执行命令并捕获所有输出(含错误信息)
    $executionOutput = shell_exec($command . ' 2>&1');

    // 返回处理结果
    return [
        'success' => empty($executionOutput), // pdftk执行成功时通常无输出
        'raw_output' => $executionOutput,
        'output_file_path' => $outputFile
    ];
}

关键使用提示

  • 文件路径约束:Lambda仅/tmp目录具备读写权限,输入文件需提前上传至该目录,输出文件也必须写入/tmp。若文件存储在S3,需在handler中通过AWS SDK完成下载/上传操作。
  • 权限配置:确保Lambda执行角色拥有S3访问权限(若涉及文件传输),同时Layer中的pdftk二进制文件需具备可执行权限(inetsys/pdftk-aws-lambda包已默认配置)。
  • 任务调用示例:在Laravel中触发该任务的代码示例:
$result = Pdftk::execute([
    'input_file' => '/tmp/encrypted_input.pdf',
    'password' => 'your_pdf_password',
    'output_file' => '/tmp/decrypted_output.pdf'
]);

// 处理返回结果
if ($result['success']) {
    // 处理成功逻辑,如上传输出文件到S3
} else {
    // 处理错误,打印或记录$results['raw_output']
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:53:18