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 version="1.0" encoding="UTF-8"?>
<container version="1.0" xmlns="urn:oasis:schemas:container">
<rootfiles>
<rootfile full-path="OEBPS/content.opf"
media-type="application/oebps-package+xml"/>
</rootfiles>
</container>
OEBPS/content.opf — el manifiesto
<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="3.0" unique-identifier="uid">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:identifier id="uid">978-0-000-00000-0</dc:identifier>
<dc:title>Mi Ebook de Ejemplo</dc:title>
<dc:creator>Autor Apellido</dc:creator>
<dc:language>es</dc:language>
<meta property="dcterms:modified">2024-01-15T00:00:00Z</meta>
</metadata>
<manifest>
<item id="nav" href="nav.xhtml" media-type="application/xhtml+xml" properties="nav"/>
<item id="ch01" href="chapter01.xhtml" media-type="application/xhtml+xml"/>
<item id="ch02" href="chapter02.xhtml" media-type="application/xhtml+xml"/>
<item id="css" href="styles/style.css" media-type="text/css"/>
<item id="cover" href="images/cover.jpg" media-type="image/jpeg" properties="cover-image"/>
</manifest>
<spine>
<itemref idref="nav"/>
<itemref idref="ch01"/>
<itemref idref="ch02"/>
</spine>
</package>
Tabla de contenidos EPUB 3 (nav.xhtml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:epub="http://www.idpf.org/2007/ops">
<head><title>Índice</title></head>
<body>
<nav epub:type="toc">
<h1>Contenidos</h1>
<ol>
<li><a href="chapter01.xhtml">Capítulo 1: Introducción</a></li>
<li><a href="chapter02.xhtml">Capítulo 2: Desarrollo</a></li>
</ol>
</nav>
</body>
</html>
Crear un EPUB desde Markdown con Pandoc
Pandoc es la herramienta de línea de comandos más completa para generar EPUB:
# 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:
---
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)
# 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)
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 = '''<html><body>
<h1>Capítulo 1: Inicio</h1>
<p>Este es el contenido del primer capítulo.</p>
<p>Puedes incluir <strong>HTML completo</strong> aquí.</p>
</body></html>'''
# 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:
# 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
mimetypeno es el primero o está comprimido - RSC-005: referencia a un archivo no declarado en el manifiesto
- NCX-003: falta el archivo
toc.ncxpara 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.
Conversiones relacionadas
Conversiones de documento que siguen este tema: