使用Ruby gem Origami实现PDF签名时报signature failed错误如何解决?
Ruby Origami gem PDF签名报错排查修复方案
报错原因
该报错核心是Origami gem版本迭代后接口发生不兼容变更,官方公开示例未同步更新导致的:
[error] Breaking on: ">>\nendobj\n..." at offset 0x1f6f3
[error] Last exception: [Origami::InvalidObjectError] Failed to parse object (no:43,gen:0) -> [ArgumentError] wrong number of arguments (given 1, expected 0; required keyword: year)
报错中的required keyword: year已经明确指向时间参数传递不符合要求,2.1.0及以上版本的Origami不再接受time: Time.now这类整体时间参数,要求传递独立的日期关键字参数。
修复步骤
- 先确认当前安装的gem版本,执行命令
gem list origami,如果版本≥2.1.0则按照新接口规范修改代码 - 调整原示例中的
sign方法调用参数:删除原有time相关参数,gem会默认使用当前系统时间填充签名时间字段,无需手动传参 - 如果你需要自定义签名时间,按照以下格式传参即可:
pdf.sign( cert, key, method: 'adbe.pkcs7.detached', year: 2024, month: 5, day: 20, hour: 15, min: 30, sec: 0 ) - 清理本地之前运行生成的损坏PDF文件,重新执行代码即可正常运行。
内容的提问来源于stack exchange,提问作者Tho Nguyen
相关产品推荐
相关产品推荐

