Home
» PC Tips
»
Eseguire LibreOffice in modalità headless in Docker per la conversione in PDF.
Eseguire LibreOffice in modalità headless in Docker per la conversione in PDF.
Sì. Per conversioni di documenti una tantum, crea una piccola immagine Docker con LibreOffice installato ed eseguila soffice --headlesscon --convert-to. Monta la directory di input in sola lettura e una directory di output separata con accesso in scrittura in modo che il PDF appaia sul tuo host. Questo esempio utilizza un'immagine basata su Debian e converte un file DOCX in PDF; non espone LibreOffice come servizio di rete.
Il Dockerfile installa LibreOffice Writer e un pacchetto di font di base, quindi utilizza soffice come comando del container.
Che cosa fa la modalità headless e quando è utile Docker?
La modalità headless avvia LibreOffice senza la sua interfaccia grafica. LibreOffice documenta questa modalità per l'utilizzo tramite riga di comando e API, e le sue opzioni da riga di comando supportano la conversione di file con una directory di output. Docker impacchetta l'applicazione e le sue dipendenze in modo che uno script o una workstation possano eseguire la stessa immagine container senza installare la suite desktop sull'host.
Questo modello funziona bene per processi batch locali, attività di CI o un worker di backend che riceve un file e salva il risultato della conversione. Un semplice container headless non è, di per sé, un'API di conversione HTTP: non è in ascolto su nessuna porta e non accetta caricamenti web. Se hai bisogno di un servizio persistente, implementa un'API e una coda di processi attorno al processo di conversione e aggiungi la convalida delle richieste, i timeout, i limiti di dimensione dei file e l'isolamento.
1. Creare le cartelle di input e output
Su un host Linux o macOS, utilizzando Bash o una shell simile, crea una cartella di progetto con directory separate. Inserisci il documento sorgente inpute lasciala outputvuota per la prima esecuzione:
mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work
I comandi Docker riportati di seguito utilizzano percorsi in stile Unix e sintassi della shell. Su Windows, adatta la sintassi del percorso host per PowerShell o Prompt dei comandi e assicurati che Docker Desktop sia autorizzato a condividere l'unità contenente queste cartelle.
2. Creare un'immagine con LibreOffice
Crea un file chiamato Dockerfileinside lo-workcon questo contenuto:
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-writerFornisce Writer e i filtri di conversione necessari per i formati di elaborazione testi più comuni. Aggiungi libreoffice-calco libreoffice-impressse il contenitore deve convertire fogli di calcolo o presentazioni. Il pacchetto di font è solo una base; installa i font richiesti dai tuoi documenti e per i quali disponi dei diritti di utilizzo, poiché i font mancanti possono modificare l'a capo automatico e le interruzioni di pagina.
Crea l'immagine dalla directory che contiene il Dockerfile:
docker build -t lo-headless .
L'esempio utilizza i nomi dei pacchetti di Debian Bookworm. I tag dell'immagine di base e i pacchetti del repository cambiano nel tempo; per una build di produzione, scegli un'immagine di base mantenuta, ricostruiscila regolarmente per gli aggiornamenti di sicurezza e blocca l'immagine di base tramite digest se hai bisogno di build riproducibili. Evita di installare pacchetti da un repository non correlato solo per seguire un tutorial.
Prima di avviare il container di conversione, crea l'immagine locale dal Dockerfile.
3. Eseguire LibreOffice con mount separati
Avvia un contenitore temporaneo e passa le opzioni di conversione dopo il nome dell'immagine. Il mount di input è di sola lettura; solo la directory di output è scrivibile. L' --useropzione esegue il processo con l'ID utente e di gruppo dell'host su Linux, mentre HOME=/tmpassegna a LibreOffice una directory home scrivibile. Regola i permessi della cartella se l'utente host non può scrivere in output.
--headlessSopprime l'interfaccia grafica, --convert-to pdf:writer_pdf_Exportseleziona il filtro di esportazione PDF e --outdirindirizza il risultato alla cartella di output montata. Il percorso univoco del profilo utente fornisce a questo processo una directory di configurazione di LibreOffice scrivibile; se si eseguono più conversioni contemporaneamente in un unico contenitore a lunga durata, utilizzare un percorso di profilo diverso per ciascun processo.
Utilizza questa sintassi --mountal posto di quella -vpredefinita se preferisci la sintassi di montaggio più esplicita di Docker. I mount di tipo bind sono legati a percorsi sull'host del demone Docker, mentre i mount di lettura/scrittura consentono ai processi del container di modificare i file dell'host. Mantieni i mount limitati, evita di montare la tua directory home o il socket Docker e non eseguire un worker di conversione documenti con privilegi non necessari.
Il comando run passa il file sorgente a soffice, limitando al contempo l'accesso dell'host alle due cartelle del progetto.
4. Confermare che il PDF è stato creato
Verificare la directory di output dell'host dopo l'uscita da Docker:
ls -l output/
file output/report.pdf
test -s output/report.pdf
Il file PDF deve esistere ed essere non vuoto. Apritelo con un lettore PDF e verificate il numero di pagine, le tabelle, le immagini, le interruzioni di pagina e i caratteri prima di utilizzarlo. La chiusura positiva del processo non garantisce che ogni elemento sia stato visualizzato correttamente, soprattutto se il documento utilizza caratteri o funzionalità non disponibili nel contenitore. Utilizzate una directory di output pulita o un nuovo nome per il file di output per ogni conversione, in modo che un PDF precedente non possa essere confuso con l'ultima conversione.
Verifica che il file di output esista e venga riconosciuto come PDF, quindi rivedi le pagine per individuare eventuali modifiche al layout.
Cosa devo controllare se la conversione fallisce?
Nessun file di output: confermare il nome del file sorgente e il percorso del contenitore, che inputè stato montato in /input, e che la outputdirectory host è scrivibile dall'utente selezionato.
Errori di profilo o di blocco: verificare che il -env:UserInstallationpercorso sia scrivibile. Utilizzare una directory di profilo separata per ogni processo LibreOffice simultaneo.
Layout modificato: installa i font necessari nell'immagine e rivedi il PDF. Il rendering può differire da quello su un sistema desktop a causa della disponibilità dei font, dei filtri di esportazione e delle differenze di versione.
Errore di montaggio Docker: verificare che entrambe le directory host esistano prima di utilizzare -vo --mount, e verificare che il demone possa accedervi.