This extracts text from PDFs with a practical fallback strategy: it tries pypdf first, then switches to pdfminer.six if it's getting less than 50 characters per page, which usually means CJK fonts that pypdf can't decode. It's triggered automatically when you reference PDF files or mention research papers and documents in your prompt. The dual-parser approach is smart because pypdf is faster for standard PDFs, but you need the heavier pdfminer for certain character sets. If you work with academic papers or mixed-language documents, this handles the edge cases without you thinking about it. AGPL licensed.
- GitHub stars
- 452
- last updated
- Jun 11, 2026
Install
$ npx -y skills add axoviq-ai/synthadoc --skill pdf --agent claude-codeInstalls into .claude/skills of the current project.
Files
PDF Skill
Extracts text from PDF files using pypdf as the primary parser, with
pdfminer.six as a fallback for CJK fonts that pypdf cannot decode
(detected when pypdf yields fewer than 50 characters per page on average).
Setup
pip install pypdf pdfminer.six
Standalone usage
import asyncio
from synthadoc.skills.pdf.scripts.main import PdfSkill
skill = PdfSkill()
async def main():
result = await skill.extract("/path/to/paper.pdf")
print(result.text) # extracted text from all pages
print(result.metadata) # {"pages": N, "cjk_fallback": bool, ...}
asyncio.run(main())
When this skill is used
- Source path ends with
.pdf - User intent contains:
pdf,research paper
Scripts
scripts/main.py—PdfSkillclass
References
references/cjk-notes.md— notes on CJK font handling
Sponsors
Details
- Repository
- github.com/axoviq-ai/synthadoc
- Category
- Office & Documents
- License
- AGPL-3.0
- First seen
- Jun 11, 2026
