photo-to-scanned-pdf
An agent skill by daymade, from daymade/claude-code-skills. Tags: conversion, documents, mobile, pdf, scanning.
What it does
Two pipelines ending at a scanner-look PDF. (1) Phone photos of paper documents (contracts, stamped certificates, receipts, forms, handwritten notes) → clean scanner-quality PDF: perspective rectification + noteshrink whitening + A4 assembly + mandatory whole-document check. Trigger: "把照片 做成扫描件", "photos to scanned PDF", "make this look scanned", "手机拍的 文档转 PDF", "盖章文件扫描", replacing pages in an existing scanned PDF, any CamScanner-like request. (2) A digital document with no signature yet (rendered docx/PDF, confirmation form, contract draft) → make it look hand-signed and scanned: synthesize a handwriting-style signature, composite it onto the signature line, apply the same scan-look post-processing. Trigger: "帮我做个手写签名", "生成签名盖到这份文件上", "做成签过字的扫描件", "synthesize a signature", any request for a document that needs to look signed without a real photographed signature. Do NOT hand-roll levels/contrast enhancement for scan-look — tried and rejected twice; this skill's pipeline is the proven one.
Install
With the skills CLI, which installs into Claude Code, Codex, Cursor and other agents:
npx skills add daymade/claude-code-skills --skill photo-to-scanned-pdf
Or copy the skill folder into Claude Code's skills directory by hand (~/.claude/skills for every project, or .claude/skills inside one):
git clone --depth 1 https://github.com/daymade/claude-code-skills
cp -r claude-code-skills/daymade-docs/photo-to-scanned-pdf ~/.claude/skills/photo-to-scanned-pdf
Safety box score
Grade C, moderate risk: 35 of 100 risk points, rated 2026-10-20. The grade rates what the skill and its scripts can reach on the machine of whoever installs it, across eight categories from shell execution to secrets access. How the score works.
This skill turns photos/PDFs into scanner-style PDFs and also has a branch that synthesizes and composites handwriting-style signatures onto digital documents. The main risks are deceptive document generation, runtime downloads of external tooling, and normal-use execution of local/system binaries.
| Category | Level | Why |
|---|---|---|
| Code & shell execution | 2 (moderate) | Normal use runs local Python scripts via `uv run` and calls external commands like `pdftoppm`, `pdftotext`, and `fc-list`, plus `uvx noteshrink`; that is real code execution, though not arbitrary shell eval. |
| Network access | 1 (low) | The setup and workflow rely on `uvx noteshrink` (first run fetches from the package registry) and `brew install poppler/fontconfig`, so the skill downloads external packages, but it does not upload user documents itself. |
| Filesystem reach | 1 (low) | It writes outputs such as `scanned.pdf`, `contact.png`, `_pdfpage_*.png`, and sidecar JSONs in the chosen work dirs, and it reads a system font at `/System/Library/Fonts/Hiragino Sans GB.ttc`; it does not delete broadly or touch dotfiles. |
| Secrets & credentials | 0 (none) | There is no code or text that reads credentials, browser sessions, keychains, `.env` files, or asks the user to paste secrets. |
| Privilege & persistence | 2 (moderate) | The skill explicitly tells the user to install dependencies with Homebrew (`brew install poppler` and `brew install fontconfig`), which changes the local toolchain, even though it does not request sudo or services. |
| Instruction hijack surface | 0 (none) | No prompt-injection behavior, hidden instructions, or fetched instructions to follow; the docs instead emphasize explicit human review and explicit filenames. |
| Irreversible actions | 2 (moderate) | The digital-signature branch is purpose-built to synthesize a signature and composite it into a PDF, so it can produce externally usable signed-looking documents, but it still asks for user selection and a visual check. |
| Transparency | 1 (low) | Part of the workflow depends on `uvx noteshrink`, which is fetched at runtime from the package registry rather than vendored in the repo, so not all executed code is directly reviewable here. |
Before installing
- Decide whether you are comfortable with the synthetic-signature branch; it can create forged-looking signed PDFs.
- Check that `uvx noteshrink` will fetch from the package registry and that `brew install poppler fontconfig` is acceptable on this machine.
- Test the workflow on a copy of a non-sensitive document first, in a scratch folder.
- Verify the machine has the needed external tools (`pdftoppm`, `pdftotext`, `fc-list`) and that `/System/Library/Fonts/Hiragino Sans GB.ttc` exists if you plan to use the signature sheets.
Rated 2026-10-20 by an automated review of 6 files from the skill's repository.
Source
- Repository
- daymade/claude-code-skills (all skills from this repository)
- Path
- daymade-docs/photo-to-scanned-pdf/SKILL.md
- Branch
- main
- Updated
- 2026-09-20
Related skills
- doc-to-markdown — Converts DOCX/PDF/PPTX to high-quality Markdown with automatic post-processing.
- pdf-creator — Convert markdown files to professional PDF documents with proper Chinese font support, theme system, and visual self-check.
- pdf-to-html — Converts a PDF into one self-contained, readable HTML file that preserves images, tables.
- lead-magnets — When the user wants to create, plan, or optimize a lead magnet for email capture or lead generation.
- repomix-unmixer — Extracts files from repomix-packed repositories, restoring original directory structures from XML/Markdown/JSON formats.
- make-pdf — Turn any markdown file into a publication-quality PDF. (gstack)