# Formato EPUB: estructura interna, creación y conversión de ebooks
EPUB (Electronic Publication) es el formato estándar abierto para libros electrónicos, mantenido por el W3C. Es compatible con la mayoría de lectores: Kindle (vía conversión), Kobo, Apple Books, Adobe Digital Editions y cualquier app con soporte EPUB.
## Estructura interna de un EPUB
Un archivo EPUB es en realidad un ZIP renombrado. Al descomprimirlo encontrarás:
```
libro.epub (= ZIP)
├── mimetype ← debe ser el primer archivo, sin comprimir
├── META-INF/
│ └── container.xml ← apunta al archivo OPF principal
└── OEBPS/
├── content.opf ← manifiesto: metadatos + lista de archivos
├── nav.xhtml ← tabla de contenidos (EPUB 3)
├── toc.ncx ← tabla de contenidos (EPUB 2, compatibilidad)
├── chapter01.xhtml
├── chapter02.xhtml
├── styles/style.css
└── images/cover.jpg
```
### El archivo `mimetype`
Debe contener exactamente (sin salto de línea final):
```
application/epub+zip
```
### `META-INF/container.xml`
```xml
```
### `OEBPS/content.opf` — el manifiesto
```xml
978-0-000-00000-0
Mi Ebook de Ejemplo
Autor Apellido
es
2024-01-15T00:00:00Z
```
### Tabla de contenidos EPUB 3 (`nav.xhtml`)
```xhtml
Índice
```
## Crear un EPUB desde Markdown con Pandoc
Pandoc es la herramienta de línea de comandos más completa para generar EPUB:
```bash
# EPUB básico desde un archivo Markdown
pandoc input.md -o libro.epub
# Con metadatos y portada
pandoc input.md \
--metadata title="Mi Libro" \
--metadata author="Tu Nombre" \
--metadata lang="es" \
--epub-cover-image=portada.jpg \
--css=styles/epub.css \
-o libro.epub
# Desde múltiples capítulos
pandoc capitulo01.md capitulo02.md capitulo03.md \
--metadata title="Novela Completa" \
--toc --toc-depth=2 \
-o novela.epub
# Con archivo de metadatos separado (metadata.yaml)
pandoc input.md --metadata-file=metadata.yaml -o libro.epub
```
**`metadata.yaml` de ejemplo:**
```yaml
---
title: 'El Nombre del Libro'
author:
- 'Autor Principal'
- 'Co-Autor'
date: '2024-01-15'
lang: es
description: 'Descripción del libro para catálogos.'
rights: 'Copyright © 2024'
publisher: 'Editorial Ejemplo'
---
```
## Convertir con Calibre CLI (`ebook-convert`)
```bash
# EPUB → PDF
ebook-convert libro.epub libro.pdf
# EPUB → MOBI (Kindle)
ebook-convert libro.epub libro.mobi
# EPUB → AZW3 (Kindle moderno)
ebook-convert libro.epub libro.azw3
# DOCX → EPUB con opciones
ebook-convert libro.docx libro.epub \
--title "Mi Libro" \
--authors "Autor" \
--language es \
--cover portada.jpg \
--output-profile tablet
# HTML → EPUB
ebook-convert pagina.html libro.epub --no-default-epub-cover
```
**Calibre GUI** permite las mismas conversiones visualmente — ideal si prefieres interfaz gráfica.
## Crear EPUB con Python (`ebooklib`)
```python
from ebooklib import epub
# 1. Crear libro
book = epub.EpubBook()
book.set_identifier('id-mi-libro-001')
book.set_title('Mi Ebook con Python')
book.set_language('es')
book.add_author('Tu Nombre')
# 2. Crear capítulo
chapter = epub.EpubHtml(
title='Capítulo 1: Inicio',
file_name='cap01.xhtml',
lang='es'
)
chapter.content = '''
Capítulo 1: Inicio
Este es el contenido del primer capítulo.
Puedes incluir HTML completo aquí.
''' # 3. Añadir CSS estilo = epub.EpubItem( uid="estilo", file_name="style/main.css", media_type="text/css", content=b'body { font-family: Georgia, serif; line-height: 1.6; }' ) chapter.add_item(estilo) # 4. Añadir al libro book.add_item(chapter) book.add_item(estilo) # 5. Definir tabla de contenidos y spine book.toc = (epub.Link('cap01.xhtml', 'Capítulo 1', 'cap01'),) book.add_item(epub.EpubNcx()) book.add_item(epub.EpubNav()) book.spine = ['nav', chapter] # 6. Guardar epub.write_epub('mi_ebook.epub', book) print("EPUB generado correctamente") ``` ## Validar un EPUB (`epubcheck`) `epubcheck` es el validador oficial del W3C: ```bash # Instalar (requiere Java) # Descargar desde: https://github.com/w3c/epubcheck/releases # Validar java -jar epubcheck.jar libro.epub # Salida esperada (sin errores): # Errors: 0 Warnings: 0 Infos: 0 # Messages: Java Heap Space: ... ``` Principales errores comunes: - **OPF001**: el archivo `mimetype` no es el primero o está comprimido - **RSC-005**: referencia a un archivo no declarado en el manifiesto - **NCX-003**: falta el archivo `toc.ncx` para compatibilidad EPUB 2 ## EPUB 2 vs EPUB 3 | Característica | EPUB 2 | EPUB 3 | |---|---|---| | Estándar | 2010 | 2011 (última revisión: 2023) | | Tabla de contenidos | NCX (XML) | nav.xhtml + NCX opcional | | HTML | XHTML 1.1 | HTML5 / XHTML5 | | MathML / SVG | Limitado | Soporte completo | | Audio/Video | No | Sí (HTML5 media) | | JavaScript | No | Sí (limitado por dispositivo) | | CSS | CSS 2.1 básico | CSS3 completo | | Compatibilidad lectores | Universal | Alta (Kindle aún prefiere AZW3) | ## Herramientas recomendadas | Herramienta | Uso | Gratuita | |---|---|---| | **Pandoc** | Convertir Markdown/DOCX/HTML → EPUB | Sí | | **Calibre** | Conversión entre todos los formatos ebook | Sí | | **Sigil** | Editor visual de EPUB | Sí | | **ebooklib** | Crear EPUB con Python | Sí | | **epubcheck** | Validar EPUB (oficial W3C) | Sí | | **Vellum** (macOS) | Publicación profesional | De pago | | **Atticus** | Maquetación para autopublicación | De pago | ## Convertir EPUB online Para conversiones rápidas sin instalar software, KaijuConverter soporta EPUB como origen y destino. Puedes convertir EPUB a PDF, DOCX, o entre formatos ebook directamente en el navegador.