# PDF Ebook

> Converts markdown, text, or HTML files into a styled PDF e-book using WeasyPrint, with support for directories, custom styling, and metadata.

- Skill: `joshuashepherd/pdf-ebook` (Agent Skill)
- Install (CLI): `npx skillmds add joshuashepherd/pdf-ebook`
- Raw SKILL.md: https://api.skillmd.com/api/skills/joshuashepherd/pdf-ebook/raw
- Safety review: CAUTION (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing, PDF Documents
- Tags: Document Conversion, Ebook, Html, Markdown, Pdf, Weasyprint
- Author: JoshuaShepherd (https://skillmd.com/u/joshuashepherd)
- Updated: 2026-08-22
- Page: https://skillmd.com/skills/joshuashepherd/pdf-ebook

---


Convert content files to a styled PDF e-book: $ARGUMENTS

$ARGUMENTS should specify: the source file or directory path, and optionally: title, subtitle, author, output path, or style overrides. If no arguments, ask the user.

## Before Starting

1. Identify the source: single file or directory of files
2. If a directory, determine file order (numeric prefixes, alphabetical, or custom)
3. Read source files to understand content structure (headings, tables, lists, images)
4. Check for any existing cover or metadata files

## Process

1. **Gather content** — Read all source files in order. For directories, sort by filename (numeric prefixes respected).
2. **Generate the conversion script** — Write a Python script to `/tmp/pdf_ebook_convert.py` that:
   - Reads and concatenates all markdown/text/HTML files
   - Converts markdown to HTML via the `markdown` Python library (with `tables`, `toc`, `fenced_code`, `meta` extensions)
   - Wraps in a full HTML document with embedded CSS
   - Generates PDF via WeasyPrint
3. **Run the script** — Execute with `python3 /tmp/pdf_ebook_convert.py`
4. **Report** — Show the output path and page count

## Styling Defaults

The default e-book style uses:
- **Page size:** US Letter with 1in margins
- **Body font:** Georgia, serif at 11pt / 1.6 line-height
- **Heading font:** system sans-serif stack
- **Colors:** Dark charcoal text (#1a1a1a), accent for headings (#2c3e50)
- **Tables:** Clean bordered style with subtle header background
- **Page breaks:** Before each H1; avoid breaks inside tables, figures, blockquotes
- **Header/footer:** Running title in header, page numbers in footer
- **Cover page:** First page with title, subtitle, author centered

The user may override any of these via $ARGUMENTS (e.g., "dark theme", "A4 size", "sans-serif body").

## Dependencies

Requires Python packages: `weasyprint`, `markdown`. Both should be installed. If missing, install with `pip3 install weasyprint markdown`.

## Output

Default output path: same directory as source, named `{title-slug}.pdf`. User may specify a custom output path.

