Install
openclaw skills install @j-levee/caj2pdf-offline将知网 CAJ / KDH / NH 文献高保真转换为 PDF(保留文字层可选中 + 目录书签)。当用户要转换 .caj 文件、说"caj转pdf""知网文献转pdf""把caj转成pdf""转换知网文献"使用时。技能为自包含离线版:已内置修复好的 caj2pdf 源码 + 闭源解码 DLL(base64 内嵌、运行时提取)+ PyMuPDF 修复,AI 可一键批量代转;失败文件给全球学术快报官方无损兜底。
openclaw skills install @j-levee/caj2pdf-offline.caj/.kdh/.nh 要转 PDF,或说"caj转pdf / 知网文献转pdf / 把这些文献转一下"。.pdf(默认在同目录;可用 --outdir 统一输出)。退出码 0=全成功,1=有失败。| 术语 | 大白话 |
|---|---|
| 高保真 | 转出 PDF 保留原文件文字可选中 + 目录书签,而非打印成图片 |
| 自包含离线 | 技能目录内已带齐源码 + 依赖;闭源 DLL 以 base64 内嵌(运行时提取为 .dll),无需联网即可运行 |
| 解析路线 | 解 CAJ 内部结构重建 PDF,文字可选中(本技能采用) |
| 打印路线 | 用 CAJViewer 虚拟打印成 PDF,结果是图片、文字不可选(本技能不采用) |
| xref | PDF 内部交叉引用表;损坏会导致部分阅读器打不开,用 PyMuPDF 修复 |
| venv | Python 隔离运行环境,避免污染系统 Python |
| DLL | Windows 上 caj2pdf 依赖的闭源解码器;以 base64 内嵌于 _dll_bundle.py,运行时提取为 .dll 到 bin 目录 |
| 全球学术快报 | 知网官方客户端,可把 CAJ 另存为无损 PDF,作为 HN 失败的兜底 |
.caj / .kdh / .nh 文件要转 PDF~/.workbuddy/skills/caj2pdf-offline/
├── SKILL.md
└── scripts/
├── setup.py # 自动建隔离 venv + 装依赖(幂等)
├── convert.py # 批量转换驱动(自动定位 venv 并 re-exec)
└── caj2pdf-restructured/ # 已修复源码(闭源 DLL 已改为 base64 内嵌于 _dll_bundle.py、运行时提取;含 Python3.13 补丁)
caj2pdf-restructured/_dll_bundle.py,运行时由 convert.py / setup.py 提取到 caj2pdf/bin/(KDH)与 caj2pdf/dep/bin/(HN)两处,需两处都有(包内不再含独立 .dll 文件,规避 SkillHub 对二进制的限制)。convert.py 会自动确保环境(venv 不存在时自动跑 setup.py),所以首次运行也能跑通。
.caj/.kdh/.nh 文件或目录。python ~/.workbuddy/skills/caj2pdf-offline/scripts/convert.py "C:/路径/某文献.caj"python ~/.workbuddy/skills/caj2pdf-offline/scripts/convert.py --indir "目录" --outdir "C:/tmp/converted" -r(-r 递归;--outdir 省略则各文件同目录).pdf;退出码 0=全成功,1=有失败。python ~/.workbuddy/skills/caj2pdf-offline/scripts/setup.py.pdf;失败时打印失败清单并给出兜底指引;原 caj 文件保持不变。doc.save(garbage=1, clean=True, deflate=True) 修复 xref,比 PyPDF2 稳(PyPDF2 对损坏 xref 报 startxref not found)。os.replace。FileNotFoundError 兜底;jbigdec.py/jbig2dec.py 去掉 with importlib.resources.files(...) as pkg_dir 改用直接赋值。caj2pdf/bin/(KDH)与 caj2pdf/dep/bin/(HN),否则 HN 报找不到 DLL(base64 内嵌于 _dll_bundle.py,由 convert.py/setup.py 自动提取,包内无独立 .dll 文件)。codeload.github.com/zombie110year/caj2pdf-restructured/tar.gz/refs/heads/master。imagesize==1.3.0 PyPDF2==2.2.0 PyMuPDF。os.remove 包装成"安全删除(移回收站)",沙箱回收站不可用时卡死;已加 _rm_tmp() 用 kernel32.DeleteFileW 底层删除,使沙箱内也能代转。HN 格式(多数硕博论文)若仍转换失败:引导用全球学术快报(知网官方客户端,免费):打开 CAJ → 右键 → 另存为 PDF(文字 / 排版 / 目录全保留,需知网账号)。
--outdir 未指定,PDF 生成在输入文件同目录(便于贴回原位置)。