dsh-pdf-sign:DSH 下的 PDF 签名图、盖章与 PKCS#7 数字签名

前言

在 DeepSeek Harness(DSH)里让智能体处理 PDF 合同或审批单时,常见需求分两类:页面上要有「像手写一样」的签名外观,以及文件本身具备可验证的数字签名。前者用图片叠在页面上即可;后者需要 PKCS#7/CMS 与证书私钥,和「只盖图」不是一回事。混用会导致文档看起来已签、却无法在阅读器里通过密码学校验。

下面介绍社区插件 dsh-pdf-sign(GitHub 仓库 JuntaoXiao/PDF-electronic-signature,维护者 JuntaoXiao)。它在 DSH 中把「生成签名图」「PDF 盖章(仅视觉)」「自备证书的数字签名」拆成独立工具,便于按场景组合使用。

这是什么

dsh-pdf-sign 是面向 DeepSeek Harness 的 PDF 电子签名插件(npm 包名 dsh-pdf-sign,当前版本 0.2.0,MIT 许可证)。安装并重启 DSH 后,智能体可调用以 pdf_sign_ 为前缀的一组工具:生成手写风格签名图、在 PDF 上放置签名图或文字块、用 .p12 做整文件 PKCS#7 detached 签名,以及生成自签测试证书、检查 PDF 内签名结构。

社区目录 SkillHub 将其归类为「趣味换装」;功能上更贴近文档签署与可视化盖章,而非换装类 UI 插件。DSH 生态采用「一切皆插件」思路;SkillHub 为独立社区站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

README 将能力 deliberately 分开,避免把「看起来像签了」和「密码学上可验」混为一谈:

工具 产出 保证
pdf_signature_image 由姓名等文本生成的手写风格 PNG/SVG 无,仅为图像
pdf_sign_stamp PDF 页上的墨迹(签名图和/或排版文字) 仅视觉
pdf_sign_digital 对整个文件的 PKCS#7/CMS detached 签名 密码学(/ByteRange + CMS)
pdf_sign_cert_generate 自签证书 + .p12(测试用) 自签,非受信 CA
pdf_sign_inspect PDF 内签名字段与结构报告 仅结构检查,不验证链

要点:盖章不会改变 PDF 的字节范围签名;数字签名可证明签署后未被篡改并关联密钥持有者,但只有真实 CA 签发的证书才会在阅读器中显示为受信。插件不内置密钥、CA 或信任锚。

pdf_signature_image 用文本种子生成稳定的手写效果(同一姓名重复生成相同图案),便于重签场景;各平台会尽量选用楷体、华文行楷、Noto Serif CJK 等手写友好字体。

pdf_sign_stamp 支持锚点(如 bottom-right)、透明度、旋转,以及对非拉丁文字嵌入系统 TrueType 子集。若签名图带不透明底(常见白底导出),叠图会盖住下层内容;可通过 drop_background(white、auto 或 #rrggbb)抠底,并用 trim_image 按墨迹裁边,避免占位框过大。

package.json 标明运行环境:Node.js >=20.0.0;DSH 兼容 >=0.1.1-rc.1 <0.2.0,支持 web、tui、desktop profile。

安装与启用

安装命令来自仓库 README,使用 profile web:

dsh plugin --profile web add dsh-pdf-sign

执行后重启 DSH,pdf_sign_* 工具即可供智能体调用。若你使用其他 profile,需与本地 DSH 配置一致;上述命令以文档原文为准。

安装前建议自行查看 GitHub 源码 与 MIT 许可证。插件在 当前 DSH 进程权限 下运行,会读写你传入的 PDF、证书路径,并可能调用系统 OpenSSL(自签证书生成等)。

典型用法

README 给出的快速流程分三步:先做签名图,再盖章,再(可选)数字签名。

1. 生成签名图

pdf_signature_image(text="Juntao Xiao", output_path="/abs/path/sig.png")

2. 在最后一页盖章(视觉)

pdf_sign_stamp(pdf_path="/abs/path/contract.pdf",
               image_path="/abs/path/sig.png",
               text="Juntao Xiao", date_text="2026-09-20",
               anchor="bottom-right", width=200)

未指定 output_path 时,默认在源 PDF 旁生成 <name>-signed.pdf。

3. 生成测试证书并做 PKCS#7 数字签名

pdf_sign_cert_generate(common_name="Juntao Xiao", passphrase="secret",
                       output_dir="/abs/path/certs")
pdf_sign_digital(pdf_path="/abs/path/contract.pdf",
                 output_path="/abs/path/contract-signed.pdf",
                 p12_path="/abs/path/certs/signing-cert.p12",
                 passphrase="secret", reason="Approval")

自签证书生成的签名通常显示为「未受信但完整性可验」;生产环境应使用自有 CA 或机构签发的 .p12/.pfx。

白底签名图盖章时,可显式抠底,例如:

pdf_sign_stamp(pdf_path="contract.pdf", image_path="signature.png",
               drop_background="white")

需要了解 PDF 里已有哪些签名字段时,可调用 pdf_sign_inspect;它只做结构报告,不替代完整证书链校验。

适用场景与注意

适合谁: 需要在 DSH 工作流里自动化「出签名图 + 合同页盖章」的开发者;需要在 agent 侧串联 PKCS#7 签署步骤、并用自签环境做联调的场景。

务必区分: 对外展示用盖章与合规/防篡改用数字签名;二者可先后使用,但不能用盖章代替数字签名。

透明底与叠图: 印章盖在签名图之上时,不透明底会擦掉下层墨迹;使用 drop_background 与 README 中的说明,避免静默盖白。

安全: 插件不代你保管生产私钥;passphrase 与证书路径由调用方传入。自签仅适合测试。

依赖与栈: 实现基于 pdf-lib、@signpdf/* 等(见仓库 package.json);pdf_sign_cert_generate 需要 OpenSSL,Windows 上可自动找到 Git 自带的 OpenSSL。

结尾

dsh-pdf-sign 把签名图生成、视觉盖章与 PKCS#7 数字签名拆清边界,方便在 DSH 里按步骤组合。社区目录:https://www.skillhub.cn/plugins/JuntaoXiao/PDF-electronic-signature;源码与完整参数表:https://github.com/JuntaoXiao/PDF-electronic-signature。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜