Jak spustit Aspose.Slides v Dockeru
Přehled
Aspose.Slides pro Python pomocí .NET běží v Linuxových kontejnerech, ale balíček je Pythonovým obalem kolem zabaleného runtime .NET Core 3.1. Tento runtime vyžaduje tři nativní knihovny, které nechybí v úzkých (slim) Pythonových obrazech, a je citlivý na jejich verze. Tento článek poskytuje funkční Dockerfile, vysvětluje, proč je každá závislost potřebná, a ukazuje, jak přidat písma a licenci.
Funkční Dockerfile
FROM python:3.11-slim-bullseye
RUN apt-get update && apt-get install -y --no-install-recommends \
libgdiplus \
libicu67 \
libfontconfig1 \
fonts-dejavu-core \
&& rm -rf /var/lib/apt/lists/*
RUN pip install --no-cache-dir aspose.slides
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]
app.py:
import aspose.slides as slides
with slides.Presentation() as presentation:
slide = presentation.slides[0]
shape = slide.shapes.add_auto_shape(slides.ShapeType.RECTANGLE, 100, 100, 400, 100)
shape.text_frame.text = "Created inside a Docker container"
presentation.save("output.pptx", slides.export.SaveFormat.PPTX)
presentation.save("output.pdf", slides.export.SaveFormat.PDF)
Sestavte a spusťte:
docker build -t aspose-slides-python .
docker run --rm aspose-slides-python
Proč je základní obraz Debian 11
Kolečko (wheel) aspose.slides obsahuje runtime .NET Core 3.1, který je starší než verze knihoven dodávané v aktuálních vydáních Debianu. V Debianu 12 a 13 kontejner úspěšně sestaví, ale selže při prvním volání Presentation():
Process terminated. Couldn't find a valid ICU package installed on the system.
Zpráva je zavádějící — ICU je na těchto obrazech nainstalováno, ale jde o verzi ICU 72 nebo 76 a .NET Core 3.1 rozpoznává jen starší hlavní verze. Debian 12 také obsahuje OpenSSL 3, což způsobí druhé selhání:
No usable version of libssl was found
python:3.11-slim-bullseye je Debian 11, který poskytuje oba verze, které zabalený runtime očekává:
| Balíček | Verze v Debianu 11 | Proč je potřeba |
|---|---|---|
libgdiplus |
6.0.4 | Implementace GDI+ používaná pro vykreslování tvarů, textu a obrázků |
libicu67 |
67.1 | Data globalizace. Novější hlavní verze nejsou rozpoznány .NET Core 3.1 |
libssl1.1 |
1.1.1w | Kryptografie. Předinstalováno v Debianu 11; chybí v Debianu 12+ |
libfontconfig1 |
— | Vyhledávání písem |
libssl1.1 je již v základním obrazu přítomen, takže nemusí být uveden v apt-get install.
Pokud musíte použít novější základní obraz, nastavte DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1, abyste obešli požadavek na ICU. Tím se zakáže formátování specifické pro kulturu a nevyřeší to problém s OpenSSL, takže Debian 11 zůstává jednodušší volbou.
Písma
Úzké (slim) obrazy neobsahují žádná písma. Bez alespoň jednoho nainstalovaného písma se text v PDF, obrázku a HTML výstupu vykresluje jako prázdné rámečky. fonts-dejavu-core je malý obecný výchozí balíček.
Aby vzhled prezentace odpovídal zamýšlenému, zkopírujte písma, která používá, do obrazu a nasměrujte na ně Aspose.Slides:
COPY fonts/ /usr/share/fonts/truetype/custom/
RUN fc-cache -f
import aspose.slides as slides
slides.FontsLoader.load_external_fonts(["/usr/share/fonts/truetype/custom/"])
Licencování uvnitř kontejneru
Nevkládejte licenční soubor do obrazu — kdokoliv, kdo obraz stáhne, získá licenci. Namísto toho ji připojte v době běhu:
docker run --rm -v /path/on/host:/license aspose-slides-python
import aspose.slides as slides
license = slides.License()
license.set_license("/license/Aspose.Slides.Python.NET.lic")
Bez licence knihovna běží v evaluačním režimu, který přidává vodoznak a omezuje počet zpracovaných snímků. Podrobnosti najdete v Licensing.
Paměť
Vykreslování do PDF nebo obrázků spotřebovává více paměti než čtení souboru. Kontajnery s úzkými limity paměti mohou být během konverze ukončeny OOM killerem, což se obvykle projeví jako zmizení procesu bez Pythonového stack trace. Pokud se to stane, zvýšte limit paměti kontejneru, než začnete zkoumat kód.