在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
相关产品推荐
相关产品推荐

