Home
» PC-tips
»
LibreOffice zonder grafische interface uitvoeren in Docker voor PDF-conversie.
LibreOffice zonder grafische interface uitvoeren in Docker voor PDF-conversie.
Ja. Voor eenmalige documentconversies kunt u een kleine Docker-image maken met LibreOffice geïnstalleerd en deze uitvoeren soffice --headlessmet ` docker run` --convert-to. Koppel de invoermap alleen-lezen en een aparte uitvoermap met schrijftoegang, zodat de PDF op uw host verschijnt. Dit voorbeeld gebruikt een op Debian gebaseerde image en converteert één DOCX-bestand naar PDF; LibreOffice wordt niet als netwerkservice beschikbaar gesteld.
Het Dockerfile installeert LibreOffice Writer en een basispakket met lettertypen, en gebruikt vervolgens soffice als containeropdracht.
Wat doet de headless-modus en wanneer is Docker nuttig?
De headless-modus start LibreOffice zonder de grafische interface. LibreOffice documenteert deze modus voor gebruik via de commandoregel en API, en de commandoregelopties ondersteunen bestandsconversie met een uitvoermap. Docker verpakt de applicatie en de bijbehorende afhankelijkheden, zodat een script of werkstation dezelfde containerimage kan uitvoeren zonder de desktopsuite op de host te hoeven installeren.
Dit patroon werkt goed voor lokale batchtaken, CI-taken of een backend-worker die een bestand ontvangt en een geconverteerd resultaat opslaat. Een simpele headless container is op zichzelf geen HTTP-conversie-API: hij luistert niet naar een poort en accepteert geen webuploads. Als u een persistente service nodig hebt, bouw dan een API en een taakwachtrij rond het conversieproces en voeg validatie van verzoeken, time-outs, bestandsgroottebeperkingen en isolatie toe.
1. Maak de invoer- en uitvoermappen aan.
Maak op een Linux- of macOS-systeem met Bash of een vergelijkbare shell een projectmap aan met verschillende submappen. Plaats het brondocument in de eerste map inputen laat deze outputleeg voor de eerste keer uitvoeren:
mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work
De onderstaande Docker-opdrachten gebruiken Unix-achtige paden en shell-syntaxis. Pas op Windows de syntaxis van het hostpad aan voor PowerShell of de opdrachtprompt en zorg ervoor dat Docker Desktop toegang heeft tot de schijf waarop deze mappen zich bevinden.
2. Maak een image met LibreOffice.
Maak een bestand met de naam ' Dockerfileinside' lo-worken de volgende inhoud:
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-writerDit pakket bevat Writer en de conversiefilters die nodig zijn voor gangbare tekstverwerkingsformaten. Voeg dit toe libreoffice-calcals libreoffice-impressde container spreadsheets of presentaties moet converteren. Het lettertypepakket is slechts een basis; installeer de lettertypen die uw documenten vereisen en waarvoor u de gebruiksrechten hebt, omdat ontbrekende lettertypen de regelterugloop en pagina-einden kunnen beïnvloeden.
Bouw de image vanuit de map die het Dockerfile bevat:
docker build -t lo-headless .
Het voorbeeld gebruikt pakketnamen van Debian Bookworm. Labels van basisimages en pakketten in repositories veranderen in de loop van de tijd; kies voor een productiebuild een onderhouden basisimage, bouw deze regelmatig opnieuw voor beveiligingsupdates en vergrendel de basisimage met behulp van een digest als u reproduceerbare builds nodig hebt. Vermijd het installeren van pakketten uit een niet-gerelateerde repository, alleen maar om een tutorial te volgen.
Bouw de lokale image vanuit het Dockerfile voordat je de conversiecontainer uitvoert.
3. Voer LibreOffice uit met aparte mountpunten.
Start een tijdelijke container en geef de conversieopties door na de afbeeldingsnaam. De invoermap is alleen-lezen; alleen de uitvoermap is beschrijfbaar. De --useroptie voert het proces uit met uw hostgebruikers- en groeps-ID's op Linux, terwijl HOME=/tmpLibreOffice een beschrijfbare thuismap krijgt. Pas de maprechten aan als de hostgebruiker niet naar de map kan schrijven output.
--headlessDe grafische gebruikersinterface wordt onderdrukt, --convert-to pdf:writer_pdf_Exporthet PDF-exportfilter wordt geselecteerd en --outdirhet resultaat wordt naar de gekoppelde uitvoermap gestuurd. Het unieke gebruikersprofielpad geeft dit proces een beschrijfbare LibreOffice-configuratiemap; als u meerdere conversies gelijktijdig uitvoert in één langlopende container, gebruik dan een ander profielpad voor elk proces.
Gebruik --mountin plaats van -vals je de explicietere mount-syntaxis van Docker prettiger vindt. Bind-mounts zijn gekoppeld aan paden op de host van de Docker-daemon, en lees-schrijf-mounts stellen containerprocessen in staat om hostbestanden te wijzigen. Houd mounts beperkt, vermijd het mounten van je thuismap of Docker-socket en voer geen documentconversieworker uit met onnodige privileges.
Het uitvoeringscommando geeft het bronbestand door aan soffice, terwijl de toegang van de host beperkt blijft tot de twee projectmappen.
4. Controleer of de PDF is aangemaakt.
Controleer de uitvoermap van de host nadat Docker is afgesloten:
ls -l output/
file output/report.pdf
test -s output/report.pdf
Het PDF-bestand moet bestaan en niet leeg zijn. Open het in een PDF-lezer en controleer het aantal pagina's, tabellen, afbeeldingen, pagina-einden en lettertypen voordat u erop vertrouwt. Een succesvolle afronding van het proces garandeert niet dat elk element correct is weergegeven, vooral niet wanneer een document lettertypen of functies gebruikt die niet in de container aanwezig zijn. Gebruik voor elke conversie een schone uitvoermap of een nieuwe bestandsnaam, zodat een ouder PDF-bestand niet per ongeluk voor de meest recente conversie wordt aangezien.
Controleer of het uitvoerbestand bestaat en als PDF wordt herkend, en bekijk vervolgens de pagina's op wijzigingen in de opmaak.
Wat moet ik controleren als de conversie mislukt?
Geen uitvoerbestand: controleer de bronbestandsnaam en het containerpad, dat inputis gekoppeld aan /input, en of de outputhostdirectory beschrijfbaar is voor de geselecteerde gebruiker.
Profiel- of vergrendelingsfouten: controleer of het -env:UserInstallationpad beschrijfbaar is. Gebruik een aparte profielmap voor elk gelijktijdig draaiend LibreOffice-proces.
Gewijzigde lay-out: installeer de benodigde lettertypen in de afbeelding en controleer de PDF. De weergave kan afwijken van een desktopsysteem vanwege de beschikbaarheid van lettertypen, exportfilters en versieverschillen.
Docker-mountfout: controleer of beide hostdirectory's bestaan voordat u -vof gebruikt --mount, en controleer of de daemon er toegang toe heeft.