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.

Edytor terminala wyświetlający plik Dockerfile oparty na Debianie z zainstalowanym LibreOffice Writer i czcionkami
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.

Terminal pokazujący docker build -t lo-headless. Kończenie kompilacji obrazu kontenera
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.

docker run --rm \
  --user "$(id -u):$(id -g)" \
  --env HOME=/tmp \
  -v "$PWD/input:/input:ro" \
  -v "$PWD/output:/output" \
  lo-headless \
  --headless --nologo \
  -env:UserInstallation=file:///tmp/lo-profile \
  --convert-to pdf:writer_pdf_Export \
  --outdir /output \
  /input/report.docx

--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 terminala uruchamiające kontener lo-headless z wejściem tylko do odczytu, zapisywalnym wyjściem, konwersją bezgłową i oddzielnym profilem
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ą.

Wyświetlanie raportu report.pdf w katalogu wyjściowym i identyfikowanie go jako dokumentu PDF
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.

Dokładne działanie opcji można znaleźć w dokumentacji parametrów wiersza poleceń LibreOffice . Nazwy pakietów można sprawdzić w liście pakietów Debian Bookworm dla LibreOffice Writer . Oficjalna dokumentacja Dockera wyjaśnia montowanie powiązań i instrukcje w pliku Dockerfile .

Zostaw komentarz

Spraw, aby LibreOffice rozpoznawał środowisko uruchomieniowe Java

Spraw, aby LibreOffice rozpoznawał środowisko uruchomieniowe Java

Zainstaluj zgodne środowisko uruchomieniowe Java, włącz je w pakiecie LibreOffice i rozwiąż problemy z pustą listą środowisk JRE bez zmiany niepowiązanych ustawień.

Uruchom LibreOffice Headless w Dockerze w celu konwersji plików PDF

Uruchom LibreOffice Headless w Dockerze w celu konwersji plików PDF

Zbuduj mały kontener LibreOffice, konwertuj dokumenty biurowe bez interfejsu graficznego i weryfikuj dane wyjściowe PDF, ograniczając jednocześnie dostęp do plików hosta.

Zmniejsz pliki LibreOffice Impress bez rozmycia obrazów

Zmniejsz pliki LibreOffice Impress bez rozmycia obrazów

Zmniejsz rozmiar plików prezentacji LibreOffice, kompresując osadzone zdjęcia, wybierając rozsądne ustawienia obrazu i sprawdzając jakość slajdów przed udostępnieniem.

Zatrzymaj przycinanie wydruków o niestandardowych rozmiarach w LibreOffice

Zatrzymaj przycinanie wydruków o niestandardowych rozmiarach w LibreOffice

Dopasuj wymiary strony pakietu LibreOffice do drukarki, sprawdź marginesy do wydruku i popraw skalowanie przed wydrukowaniem dokumentu o niestandardowym rozmiarze.

Przyspiesz działanie makr Calc, odczytując i zapisując dane w partiach

Przyspiesz działanie makr Calc, odczytując i zapisując dane w partiach

Zastąp powtarzalny dostęp do komórek zbiorczym odczytem i zapisem zakresu, a następnie przeprowadź test porównawczy wyników i chroń formuły w dużych arkuszach kalkulacyjnych Calc.

Zorganizuj książkę LibreOffice z połączonymi dokumentami głównymi

Zorganizuj książkę LibreOffice z połączonymi dokumentami głównymi

Podziel długi rękopis na rozdziały, złóż je w programie Writer, a następnie zadbaj o spójność stylów, treści i kontroli eksportu.

Połącz LibreOffice Base z PostgreSQL za pomocą wbudowanego kreatora

Połącz LibreOffice Base z PostgreSQL za pomocą wbudowanego kreatora

Skorzystaj z bezpośredniej opcji PostgreSQL w programie Base, aby wprowadzić dane serwera, zalogować się, zapisać plik połączenia ODB i rozwiązać typowe problemy z dostępem.

Udostępnij niestandardowe czcionki dla LibreOffice Flatpak

Udostępnij niestandardowe czcionki dla LibreOffice Flatpak

Zainstaluj czcionkę w folderze czcionek użytkownika systemu Linux, uruchom ponownie LibreOffice Flatpak i sprawdź, czy jest ona widoczna w programie Writer bez osłabiania piaskownicy aplikacji.

Zatrzymaj awarię zapisu LibreOffice w systemie Sonoma: najpierw pracuj lokalnie

Zatrzymaj awarię zapisu LibreOffice w systemie Sonoma: najpierw pracuj lokalnie

Chroń swoją pracę i izoluj awarie zapisu na dysku sieciowym w LibreOffice w systemie macOS Sonoma dzięki lokalnemu przepływowi pracy, sprawdzaniu uprawnień i ukierunkowanym testom.

Zachowaj nienaruszone identyfikatory CSV w programie Calc, importując je jako tekst

Zachowaj nienaruszone identyfikatory CSV w programie Calc, importując je jako tekst

Aby zachować zera wiodące w programie Calc, ustaw kolumny ID na Tekst podczas importowania pliku CSV, sprawdź podgląd i weryfikuj zapisane dane.