Casos de uso
- Facturas y recibos: tu app genera el HTML, lo conviertes a PDF para el cliente
- Informes dinámicos: dashboards exportados como PDF
- Certificados: diplomas generados automáticamente
- Documentación: guías HTML convertidas a PDF para descarga
Opción 1: wkhtmltopdf (C++, línea de comandos)
wkhtmltopdf usa WebKit (el motor de Safari) para renderizar HTML a PDF:
# Instalar
sudo apt install wkhtmltopdf # Ubuntu/Debian
brew install wkhtmltopdf # macOS
# URL a PDF
wkhtmltopdf https://ejemplo.com/factura/123 factura.pdf
# Archivo HTML local a PDF
wkhtmltopdf pagina.html documento.pdf
# Con opciones de página
wkhtmltopdf --page-size A4 --margin-top 20mm --margin-bottom 20mm pagina.html documento.pdf
# Con encabezado y pie de página
wkhtmltopdf --header-html encabezado.html --footer-html pie.html pagina.html documento.pdf
Ventajas: rápido, sin Node.js, funciona sin navegador completo. Limitaciones: WebKit antiguo (JavaScript moderno limitado).
Opción 2: Puppeteer (Node.js, Chrome headless)
npm install puppeteer
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://ejemplo.com/factura/123', { waitUntil: 'networkidle0' });
await page.pdf({
path: 'factura.pdf', format: 'A4',
margin: { top: '20mm', right: '15mm', bottom: '20mm', left: '15mm' },
printBackground: true
});
await browser.close();
})();
Ventajas: renderizado idéntico a Chrome, JavaScript y CSS modernos, fuentes web. Limitaciones: más pesado (descarga Chromium), más lento en servidores sin GPU.
Opción 3: PHP con DomPDF (Laravel)
composer require barryvdh/laravel-dompdf
use Barryvdh\DomPDF\Facade\Pdf;
return Pdf::loadView('facturas.plantilla', ['datos' => $datos])->download('factura.pdf');
Comparativa de herramientas
| Herramienta | Velocidad | Fidelidad CSS | JavaScript | Requiere |
|---|---|---|---|---|
| wkhtmltopdf | Rápida | Buena | Parcial | C++ libs |
| Puppeteer | Lenta | Excelente | Completo | Node + Chrome |
| Playwright | Lenta | Excelente | Completo | Node + Browser |
| DomPDF (PHP) | Media | Media | No | PHP |
Consejos para PDFs de calidad desde HTML
- Usa
@media printen tu CSS para ajustar estilos para impresión @pageCSS controla márgenes de páginapage-break-before: alwaysfuerza saltos de página- Evita
position: fixed— puede causar problemas en paginación - Imágenes: usa URLs absolutas para que el convertidor las encuentre
Casos de uso avanzados
Workflow legal y empresarial: contratos firmados se distribuyen en PDF/A (PDF Archival) que garantiza que el documento se renderice idénticamente en 50 años — todas las fonts embedded, no JavaScript, no contenido dinámico. La firma electrónica (PAdES, advanced eSignatures) está integrada en el PDF y se valida criptográficamente. Publicación académica: tesis y papers usan LaTeX → PDF para fórmulas matemáticas precisas; los journals requieren formato específico (Word con styles, LaTeX con clase del journal, o ambos). Convertir entre LaTeX, DOCX y PDF preservando estructura semántica (citations, references, equations) requiere herramientas especializadas como Pandoc. E-books: Amazon KDP requiere formato MOBI (legacy) o KFX (moderno) generado desde EPUB; Apple Books acepta EPUB nativamente; Kobo, PocketBook y Nook prefieren EPUB; Google Play Books acepta PDF y EPUB. Convertir manuscrito DOCX a EPUB requiere atención al markup semántico (headings jerárquicos, listas, blockquotes) para que el reflowable layout funcione bien. Translation workflows: traductores profesionales prefieren XLIFF como intermediate format — mantiene segmentación, translation memory matches, y context info que se pierde en plain text export.
Mejores prácticas y consejos profesionales
Style preservation: al convertir entre formatos editables (DOCX↔ODT↔RTF), usa siempre styles definidos en lugar de formatting directo — Heading 1/2/3 vs "16pt Bold". Esto garantiza que el outline se preserve y la conversión mantenga estructura jerárquica. Font embedding: para distribución cross-platform (PDF), embebe todas las fonts no-estándar — sin embedding, los lectores sustituyen automáticamente con fonts disponibles que pueden romper el layout. PDF/A para archivado: para documentos legales, regulatorios o de archivo permanente, exporta como PDF/A-1b (basic) o PDF/A-2u (Unicode + JPEG2000) — no permite contenido dinámico, garantiza self-contained rendering. Revision history: PDF, DOCX y ODT soportan tracked changes y comments — al convertir, decide si quieres preservarlos (DOCX→DOCX o DOCX→ODT) o aplanarlos (DOCX→PDF típicamente acepta solo el final state). Accesibilidad: documentos PDF para distribución pública deben cumplir PDF/UA — heading structure, alt text en imágenes, reading order definido para screen readers.
Compatibilidad y consideraciones técnicas
KaijuConverter usa LibreOffice 7.6 headless como engine principal con Pandoc 3.x como fallback para markup conversions complejas. Soportamos más de 60 formatos de documento (PDF, DOCX, DOC, ODT, RTF, TXT, HTML, MD, EPUB, MOBI, AZW3, FB2, LaTeX, RST y más). Fidelity de formato: preservamos fonts (con substitution fallback si la fuente original no está en el sistema), tamaños, colores, párrafos completos con indentación y line spacing, listas anidadas, tablas con cell merging y borders complejos, imágenes embedded con anchor positioning, headers/footers con campos dinámicos (page number, date, document title), footnotes y endnotes. Conversión a PDF: garantizamos PDF/A-conforme cuando se requiere, con font embedding correcto y ICC profile embedding para color fidelity absoluta. Limitaciones: documentos con macros (DOCX con VBA) no ejecutan los macros durante conversión — solo se preserva el contenido estático. PDFs escaneados (imagen sin OCR) no son editables — necesitan OCR previo (Tesseract, ABBYY) para extraer texto. Privacidad: TLS 1.3, contenedores Docker aislados, eliminación tras 2 horas. Performance: documento típico de 20 páginas tarda 3-8 segundos; documentos grandes con muchas imágenes pueden requerir 15-30 segundos.
Conversiones relacionadas
Conversiones de documento que siguen este tema: