Inicio
» Consejos PC
»
Ejecuta LibreOffice sin interfaz gráfica en Docker para la conversión de PDF.
Ejecuta LibreOffice sin interfaz gráfica en Docker para la conversión de PDF.
Sí. Para conversiones de documentos puntuales, cree una pequeña imagen de Docker con LibreOffice instalado y ejecútela soffice --headless. --convert-toMonte el directorio de entrada en modo de solo lectura y un directorio de salida independiente con permisos de escritura para que el PDF aparezca en su equipo. Este ejemplo utiliza una imagen basada en Debian y convierte un archivo DOCX a PDF; no expone LibreOffice como un servicio de red.
El Dockerfile instala LibreOffice Writer y un paquete de fuentes básico, y luego utiliza soffice como comando del contenedor.
¿Qué hace el modo sin interfaz gráfica y cuándo resulta útil Docker?
El modo sin interfaz gráfica inicia LibreOffice sin su interfaz gráfica. LibreOffice documenta este modo para su uso mediante línea de comandos y API, y sus opciones de línea de comandos admiten la conversión de archivos con un directorio de salida. Docker empaqueta la aplicación y sus dependencias para que un script o estación de trabajo pueda ejecutar la misma imagen de contenedor sin necesidad de instalar la suite de escritorio en el host.
Este patrón funciona bien para trabajos por lotes locales, tareas de integración continua o un proceso backend que recibe un archivo y guarda el resultado de la conversión. Un contenedor simple sin interfaz gráfica no es, por sí solo, una API de conversión HTTP: no escucha en ningún puerto ni acepta cargas web. Si necesita un servicio persistente, implemente una API y una cola de trabajos para el proceso de conversión y añada validación de solicitudes, tiempos de espera, límites de tamaño de archivo y aislamiento.
1. Crea las carpetas de entrada y salida.
En un host Linux o macOS que utilice Bash o un intérprete de comandos similar, cree una carpeta de proyecto con directorios separados. Coloque el documento fuente en inputy deje outputvacío para la primera ejecución:
mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work
Los comandos de Docker que se muestran a continuación utilizan rutas de estilo Unix y sintaxis de shell. En Windows, ajuste la sintaxis de la ruta del host para PowerShell o el símbolo del sistema y asegúrese de que Docker Desktop tenga permiso para compartir la unidad que contiene estas carpetas.
2. Crea una imagen con LibreOffice.
Crea un archivo llamado Dockerfileinside lo-workcon este contenido:
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
libreoffice-writer fonts-liberation \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["soffice"]
libreoffice-writerIncluye Writer y los filtros de conversión necesarios para los formatos de procesamiento de texto más comunes. Añádelo libreoffice-calcsi libreoffice-impressel contenedor necesita convertir hojas de cálculo o presentaciones. El paquete de fuentes es solo una base; instala las fuentes que tus documentos requieren y para las que tienes derechos de uso, ya que la falta de fuentes puede afectar el ajuste de línea y los saltos de página.
Construye la imagen desde el directorio que contiene el Dockerfile:
docker build -t lo-headless .
El ejemplo utiliza nombres de paquetes de Debian Bookworm. Las etiquetas de la imagen base y los paquetes del repositorio cambian con el tiempo; para una compilación de producción, elija una base mantenida, recompílela periódicamente para las actualizaciones de seguridad y fije la imagen base mediante un resumen si necesita compilaciones reproducibles. Evite instalar paquetes de un repositorio no relacionado solo para seguir un tutorial.
Cree la imagen local a partir del Dockerfile antes de ejecutar el contenedor de conversión.
3. Ejecuta LibreOffice con puntos de montaje separados.
Inicie un contenedor desechable y pase las opciones de conversión después del nombre de la imagen. El montaje de entrada es de solo lectura; solo el directorio de salida es escribible. La --useropción ejecuta el proceso con su usuario y grupo de host en Linux, mientras que HOME=/tmple da a LibreOffice un directorio de inicio escribible. Ajuste los permisos de la carpeta si el usuario de host no puede escribir en output.
--headlessSuprime la interfaz gráfica de usuario, --convert-to pdf:writer_pdf_Exportselecciona el filtro de exportación a PDF y --outdirdirige el resultado a la carpeta de salida montada. La ruta de perfil de usuario única proporciona a este proceso un directorio de configuración de LibreOffice con permisos de escritura; si ejecuta varias conversiones simultáneamente en un contenedor de larga duración, utilice una ruta de perfil diferente para cada proceso.
Utilice --mounten su lugar -vsi prefiere la sintaxis de montaje más explícita de Docker. Los montajes de enlace están vinculados a rutas en el host del demonio de Docker, y los montajes de lectura y escritura permiten que los procesos del contenedor modifiquen archivos del host. Mantenga los montajes restringidos, evite montar su directorio personal o el socket de Docker, y no ejecute un proceso de conversión de documentos con privilegios innecesarios.
El comando run pasa el archivo fuente a soffice, limitando al mismo tiempo el acceso del host a las dos carpetas del proyecto.
4. Confirme que el PDF se creó
Compruebe el directorio de salida del host después de que Docker finalice:
ls -l output/
file output/report.pdf
test -s output/report.pdf
El PDF debe existir y no estar vacío. Ábralo con un lector de PDF y compruebe el número de páginas, las tablas, las imágenes, los saltos de página y las fuentes antes de utilizarlo. Que el proceso finalice correctamente no garantiza que todos los elementos se hayan renderizado según lo previsto, especialmente si el documento utiliza fuentes o funciones no disponibles en el contenedor. Utilice un directorio de salida limpio o un nombre de archivo de salida nuevo para cada ejecución, de modo que un PDF antiguo no se confunda con la última conversión.
Compruebe que el archivo de salida existe y se reconoce como un PDF; a continuación, revise las páginas para detectar cambios en el diseño.
¿Qué debo comprobar si la conversión falla?
No hay archivo de salida: confirme el nombre del archivo de origen y la ruta del contenedor, que inputse montó en /input, y que el outputdirectorio del host es escribible por el usuario seleccionado.
Errores de perfil o bloqueo: confirme que la -env:UserInstallationruta sea editable. Utilice un directorio de perfil independiente para cada proceso simultáneo de LibreOffice.
Diseño modificado: instale las fuentes necesarias en la imagen y revise el PDF. La visualización puede variar con respecto a un sistema de escritorio debido a la disponibilidad de fuentes, los filtros de exportación y las diferencias de versión.
Error de montaje de Docker: verifique que ambos directorios del host existan antes de usar -vo --mount, y verifique que el demonio pueda acceder a ellos.