Un script de Node.js exporta Google Docs a HTML con la fidelidad del original
gdocs-me-up convierte documentos de Google Docs en HTML y CSS conservando interlineado, alineación, listas e imágenes, para publicarlos por tu cuenta.
El repositorio gdocs-me-up es un script de Node.js que convierte un documento de Google Docs en HTML y CSS manteniendo el formato fino: niveles de encabezado, interlineado, alineación, listas numeradas o con viñetas, tablas, imágenes y tabla de contenidos. La intención es generar una copia propia, offline o autoalojada, que se parezca al original y no solo de lejos.
La diferencia con exportar desde el menú de Google está en de dónde sale la información. En vez de interpretar el HTML que escupe la aplicación, el script consulta la API de Docs y lee los estilos tal como están definidos: lineSpacing, spaceAbove, spaceBelow, indentación, alineación, tamaños de fuente inline y niveles de encabezado. Después los vuelca al HTML y genera un CSS que replica ese formato y anula los valores por defecto del navegador.
Qué conserva
Los estilos con nombre (Title, Subtitle, HEADING_1 a HEADING_6) acaban en etiquetas h1..h6 o en clases propias. Los párrafos marcados como RTL reciben dir="rtl" y la alineación se invierte. Las tablas se traducen a table, tr y td manteniendo el formato de cada celda, y las listas cubren los estilos de Google (disco, círculo, cuadrado, guion; decimal, romano, alfabético) con su anidamiento, también en RTL.
Las imágenes salen con las dimensiones del documento. Los JPEG pasan a WebP de alta calidad, y los PNG opacos con entropía fotográfica también, siempre que el ahorro sea de al menos un 20%. Los transparentes o de tipo gráfico se comprimen sin pérdida, y en el resto de formatos se respeta la extensión real. Se añade además un enlace a fonts.googleapis.com con las familias usadas y se reescribe el tamaño de h1..h6 a 1em para que mande el estilo inline del documento y no la hoja del navegador. Todo el contenido va dentro de un main con la clase doc-content.
Requisitos y uso
Necesita Node.js 20.9 o superior, una cuenta de servicio de Google Cloud con permiso de lectura y las API de Docs y Drive habilitadas. El JSON de credenciales se guarda como service_account.json junto al script o se apunta con SERVICE_ACCOUNT_KEY_FILE, y el documento tiene que estar compartido con esa cuenta. Eso descarta los documentos que no se puedan delegar.
Se invoca con node gdocs-me-up.js y genera index.html más una carpeta images/. Hay banderas para insertar hojas de estilo y scripts externos (--stylesheet, --script), para meter un fragmento propio antes de con --head-file, donde {{title}} se sustituye por el título del documento, y para renombrar la página y el directorio de imágenes.
Para quien mantiene documentación en Google Docs y la publica en un sitio estático, la diferencia frente a un export normal está justo en el interlineado y la alineación, que es lo primero que se delata. No hay sincronización ni vigilancia de cambios: cada ejecución es una foto del documento en ese momento.