Strona główna
» Porady PC
»
Uruchom LibreOffice Headless w Dockerze w celu konwersji plików PDF
Uruchom LibreOffice Headless w Dockerze w celu konwersji plików PDF
Tak. W przypadku jednorazowych konwersji dokumentów, zbuduj mały obraz Dockera z zainstalowanym LibreOffice i uruchom go soffice --headlessza pomocą --convert-to. Zamontuj katalog wejściowy tylko do odczytu i oddzielny katalog wyjściowy z dostępem do zapisu, aby plik PDF pojawił się na hoście. W tym przykładzie użyto obrazu opartego na Debianie i przekonwertowano jeden plik DOCX do PDF; nie udostępnia on LibreOffice jako usługi sieciowej.
Plik Dockerfile instaluje LibreOffice Writer i pakiet czcionek bazowych, a następnie używa soffice jako polecenia kontenera.
Do czego służy tryb bezgłowy i kiedy Docker jest przydatny?
Tryb bezgłowy uruchamia LibreOffice bez interfejsu graficznego. LibreOffice dokumentuje ten tryb do użytku z poziomu wiersza poleceń i kontrolowanego przez API, a jego opcje wiersza poleceń obsługują konwersję plików z katalogiem wyjściowym. Docker pakuje aplikację i jej zależności, dzięki czemu skrypt lub stacja robocza może uruchomić ten sam obraz kontenera bez instalowania pakietu desktopowego na hoście.
Ten wzorzec sprawdza się w przypadku lokalnych zadań wsadowych, zadań CI lub procesu back-end, który odbiera plik i zapisuje przekonwertowany wynik. Zwykły kontener headless sam w sobie nie jest interfejsem API konwersji HTTP: nie nasłuchuje na żadnym porcie i nie akceptuje przesyłania danych przez sieć. Jeśli potrzebujesz trwałej usługi, umieść interfejs API i kolejkę zadań wokół procesu konwersji oraz dodaj walidację żądań, limity czasu, limity rozmiaru pliku i izolację.
1. Utwórz foldery wejściowe i wyjściowe
Na hoście z systemem Linux lub macOS, używając powłoki Bash lub podobnej, utwórz folder projektu z oddzielnymi katalogami. Umieść tam dokument źródłowy inputi pozostaw go outputpustym przy pierwszym uruchomieniu:
mkdir -p lo-work/input lo-work/output
cp report.docx lo-work/input/
cd lo-work
Poniższe polecenia Dockera używają ścieżek w stylu Uniksa i składni powłoki. W systemie Windows dostosuj składnię ścieżki hosta dla programu PowerShell lub wiersza poleceń i upewnij się, że Docker Desktop ma uprawnienia do udostępniania dysku zawierającego te foldery.
2. Utwórz obraz za pomocą LibreOffice
Utwórz plik o nazwie Dockerfileinside lo-workz następującą zawartością:
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-writerZawiera program Writer i filtry konwersji niezbędne do obsługi popularnych formatów edytorów tekstu. Dodaj libreoffice-calclub libreoffice-impresszamknij, jeśli kontener ma konwertować arkusze kalkulacyjne lub prezentacje. Pakiet czcionek to tylko podstawa; zainstaluj czcionki wymagane w dokumentach i miej uprawnienia do ich używania, ponieważ brakujące czcionki mogą wpływać na zawijanie wierszy i podział stron.
Zbuduj obraz z katalogu zawierającego plik Dockerfile:
docker build -t lo-headless .
W przykładzie wykorzystano nazwy pakietów Debian Bookworm. Znaczniki obrazu bazowego i pakiety repozytorium zmieniają się z czasem. W przypadku kompilacji produkcyjnej wybierz utrzymywaną bazę, regularnie ją przebudowuj w celu aktualizacji zabezpieczeń i przypnij obraz bazowy za pomocą skrótu, jeśli potrzebujesz powtarzalnych kompilacji. Unikaj instalowania pakietów z niepowiązanego repozytorium tylko po to, by dopasować je do samouczka.
Przed uruchomieniem kontenera konwersji utwórz obraz lokalny z pliku Dockerfile.
3. Uruchom LibreOffice z osobnymi instalacjami
Uruchom kontener jednorazowego użytku i podaj opcje konwersji po nazwie obrazu. Miejsce montowania wejściowego jest tylko do odczytu; tylko katalog wyjściowy jest zapisywalny. Opcja --useruruchamia proces z identyfikatorami użytkownika i grupy hosta w systemie Linux, jednocześnie HOME=/tmpnadając LibreOffice zapisywalny katalog domowy. Dostosuj uprawnienia folderu, jeśli użytkownik hosta nie może zapisywać w pliku output.
--headlessWyłącza graficzny interfejs użytkownika, --convert-to pdf:writer_pdf_Exportwybiera filtr eksportu PDF i --outdirkieruje wynik do zamontowanego folderu wyjściowego. Unikalna ścieżka profilu użytkownika zapewnia temu procesowi zapisywalny katalog konfiguracyjny LibreOffice; jeśli uruchamiasz kilka konwersji jednocześnie w jednym kontenerze o długim czasie życia, użyj innej ścieżki profilu dla każdego procesu.
Użyj --mountzamiast tego, -vjeśli wolisz bardziej precyzyjną składnię montowania Dockera. Montowania typu „bind” są powiązane ze ścieżkami na hoście demona Dockera, a montowania typu „odczyt-zapis” pozwalają procesom kontenera na zmianę plików hosta. Używaj wąskich montowań, unikaj montowania katalogu domowego lub gniazda Dockera i nie uruchamiaj procesu konwersji dokumentów z niepotrzebnymi uprawnieniami.
Polecenie run przekazuje plik źródłowy do soffice, ograniczając jednocześnie dostęp hosta do dwóch folderów projektu.
4. Potwierdź, że plik PDF został utworzony
Sprawdź katalog wyjściowy hosta po zamknięciu Dockera:
ls -l output/
file output/report.pdf
test -s output/report.pdf
Plik PDF powinien istnieć i być niepusty. Otwórz go w czytniku PDF i sprawdź liczbę stron, tabele, obrazy, podziały stron i czcionki, zanim zaczniesz na nim polegać. Pomyślne zakończenie procesu nie dowodzi, że każdy element został wyrenderowany zgodnie z oczekiwaniami, zwłaszcza gdy dokument używa czcionek lub funkcji niedostępnych w kontenerze. Używaj czystego katalogu wyjściowego lub nowej nazwy pliku wyjściowego dla każdego uruchomienia, aby starszy plik PDF nie został pomylony z najnowszą konwersją.
Sprawdź, czy plik wyjściowy istnieje i jest rozpoznawany jako plik PDF, a następnie przejrzyj strony pod kątem zmian układu.
Co powinienem sprawdzić, jeśli konwersja się nie powiedzie?
Brak pliku wyjściowego: sprawdź nazwę pliku źródłowego i ścieżkę do kontenera, który inputzostał zamontowany w /input, a także czy katalog hosta outputjest dostępny do zapisu dla wybranego użytkownika.
Błędy profilu lub blokady: sprawdź, czy -env:UserInstallationścieżka jest zapisywalna. Użyj osobnego katalogu profilu dla każdego jednoczesnego procesu LibreOffice.
Zmieniono układ: zainstaluj potrzebne czcionki na obrazie i przejrzyj plik PDF. Renderowanie może różnić się od renderowania na komputerze stacjonarnym ze względu na dostępność czcionek, filtry eksportu i różnice w wersjach.
Błąd montowania Dockera:-v przed użyciem polecenia lub sprawdź, czy oba katalogi hosta istnieją --mounti czy demon ma do nich dostęp.