Betűtípusok telepítése az Aspose.Slides-hez Linuxon és Dockerben
Áttekintés
Az Aspose.Slides a rendelkezésére álló betűtípusokkal rajzolja a szöveget, amikor egy bemutatót renderel, például amikor diákot konvertál PDF-re vagy képekké. Egy Windows asztali gépen általában megtalálhatók a bemutatók által használt betűtípusok. Linux szervereken és konténerekben általában kevés vagy egyáltalán nincs betűtípus, ezért az Aspose.Slides helyettesítő betűtípussal rajzolja a szöveget. A helyettesítő betűtípus más betűalakokat és szélességeket használ, ezért a sorok másként törhetnek, a szöveg kilóghat a formájából, és a helyettesítőben hiányzó karakterek nem jelennek meg megfelelően. Ha egyáltalán nincs betűtípus telepítve, a konverzió hibával leáll.
Ez a cikk bemutatja, hogyan ellenőrizhető, mely betűtípusokat helyettesíti az Aspose.Slides, hogyan telepíthetőek betűtípusok Debianra, Ubuntu-ra és Alpine Linuxra, hogyan adhatók hozzá saját betűtípusfájlok, és hogyan állítható be a hiányzó betűtípus helyett használandó betűtípus. A példák Dockerben futnak a hivatalos .NET képeken, ahogyan a Futtassa az Aspose.Slides for .NET-et Dockerben cikkben. A csomagparancsok Dockerfile utasítások; egy Linux szerveren ugyanazokat a parancsokat futtassa rootként.
A betűtípus API-val kapcsolatban, például a betűtípusok beágyazásához egy prezentációba és a helyettesítési szabályokhoz, lásd a PowerPoint betűtípusok oldalt.
Ellenőrizze, mely betűtípusok vannak helyettesítve
A következő konzolalkalmazás jelzi, hogy az Aspose.Slides mely betűtípusokat helyettesíti a jelenlegi környezetben. Hozzon létre egy FontCheck nevű mappát, és adja hozzá az alábbi fájlokat.
FontCheck.csproj hivatkozik az Aspose.Slides.NET6.CrossPlatform csomagra, amely Debianra és Ubuntu-ra vonatkozik. Emellett egy opcionális fonts mappa fájljait másolja az alkalmazás kimenetébe; a Betűtípusok betöltése az alkalmazás mappájából szekció használja.
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Aspose.Slides.NET6.CrossPlatform" Version="26.9.0" />
<None Update="fonts/**" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
</Project>
Program.cs egy szövegdobozt ad hozzá minden betűtípusnévhez egy diára, és a LatinFont tulajdonságon keresztül állítja be a betűtípust. A betűtípusnevek a parancssorból származnak; argumentumok nélkül az alkalmazás a Calibri, Arial és Times New Roman betűtípusokat ellenőrzi. Kiírja a mappákat, amelyekben az Aspose.Slides betűtípusokat keres (FontsLoader.GetFontFolders), rendereli a diát a output/fonts.pdf fájlba, és kiírja a IFontsManager.GetSubstitutions által jelentett helyettesítéseket. A két opcionális lépés a kezdetnél, egy fonts mappa betöltése és egy DEFAULT_FONT változó olvasása, később kerül részletezésre ebben a cikkben.
using System;
using System.IO;
using System.Linq;
using Aspose.Slides;
using Aspose.Slides.Export;
// A ellenőrzendő betűtípusok: a parancssori argumentumok, vagy három általános Office betűtípus.
var fontNames = args.Length > 0 ? args : new[] { "Calibri", "Arial", "Times New Roman" };
// Betöltse a betűtípus fájlokat az alkalmazás mellé elhelyezett fonts mappából, ha létezik.
var appFontFolder = Path.Combine(AppContext.BaseDirectory, "fonts");
if (Directory.Exists(appFontFolder))
{
FontsLoader.LoadExternalFonts(new[] { appFontFolder });
}
// Használja a DEFAULT_FONT környezeti változóban megadott betűtípust, ha be van állítva, a hiányzó betűtípusú szöveghez.
var loadOptions = new LoadOptions();
var defaultFont = Environment.GetEnvironmentVariable("DEFAULT_FONT");
if (!string.IsNullOrEmpty(defaultFont))
{
loadOptions.DefaultRegularFont = defaultFont;
}
var fontFolders = FontsLoader.GetFontFolders().Distinct();
Console.WriteLine($"Font folders: {string.Join(", ", fontFolders)}");
using var presentation = new Presentation(loadOptions);
var slide = presentation.Slides[0];
for (var i = 0; i < fontNames.Length; i++)
{
var shape = slide.Shapes.AddAutoShape(ShapeType.Rectangle, 50, 50 + i * 80, 600, 60);
shape.TextFrame.Text = $"This text is set in {fontNames[i]}.";
shape.TextFrame.Paragraphs[0].Portions[0].PortionFormat.LatinFont = new FontData(fontNames[i]);
}
Directory.CreateDirectory("output");
presentation.Save(Path.Combine("output", "fonts.pdf"), SaveFormat.Pdf);
var substitutions = presentation.FontsManager.GetSubstitutions().ToList();
if (substitutions.Count == 0)
{
Console.WriteLine("No font substitutions.");
}
else
{
Console.WriteLine("Font substitutions:");
foreach (var substitution in substitutions)
{
Console.WriteLine($" {substitution.OriginalFontName} -> {substitution.SubstitutedFontName}");
}
}
.dockerignore kizárja a helyi build eredményeket a build kontextusból:
bin/
obj/
output/
Dockerfile felépíti az alkalmazást a .NET SDK képpel, és a .NET runtime képen futtatja. A runtime szakasz telepíti a libfontconfig1-et, amelyet az Aspose.Slides.NET6.CrossPlatform igényel, valamint a DejaVu betűtípusokat. A Futtassa az Aspose.Slides for .NET-et Dockerben minden utasítást részletez.
FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
WORKDIR /src
COPY FontCheck.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish --no-restore -c Release -o /app
FROM mcr.microsoft.com/dotnet/runtime:10.0
RUN apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 fonts-dejavu-core \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY --from=build /app .
RUN mkdir output && chown $APP_UID output
USER $APP_UID
ENTRYPOINT ["dotnet", "FontCheck.dll"]
Építse fel a képet, és futtassa az ellenőrzést:
docker build -t font-check .
docker run --rm font-check
A képen csak a DejaVu betűtípusok vannak, ezért mindhárom betűtípus a DejaVu Sans-ra lesz cserélve:
Font folders: /usr/share/fonts, /usr/local/share/fonts, .local/share/fonts, /app/.fonts
Font substitutions:
Calibri -> DejaVu Sans
Arial -> DejaVu Sans
Times New Roman -> DejaVu Sans
Az ön saját prezentációinak betűtípusainak ellenőrzéséhez adja át a neveket argumentumként, például docker run --rm font-check "Segoe UI" Consolas. A output/fonts.pdf konténerből történő másolásához használja a Kimenet másolása a gépére parancsokat.
Betűtípusok telepítése Debianra és Ubuntu-ra
Microsoft Core betűtípusok
ttf-mscorefonts-installer csomag letölti és telepíti a Microsoft core betűtípusokat a webhez, köztük az Arial, Times New Roman, Courier New, Verdana, Georgia és Trebuchet MS betűtípusokat. A betűtípusok a Microsoft felhasználói licencszerződése (EULA) alatt vannak, és a csomag csak akkor telepíti őket, ha az EULA elfogadásra került. Egy Docker build nem tud válaszolni a kérdésre, ezért a telepítő elutasítja az EULA-t és nem telepít betűtípusokat, miközben az apt-get install mégis sikeresnek jelzi. Fogadja el az EULA-t a debconf-set-selections paranccsal mielőtt a csomagot telepítené.
A Dockerfile-ban cserélje le a runtime szakaszban a csomagokat telepítő RUN utasítást a következőre:
RUN echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | debconf-set-selections \
&& apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 fonts-dejavu-core ttf-mscorefonts-installer \
&& rm -rf /var/lib/apt/lists/*
Építse fel újra a képet, és futtassa az ellenőrzést ugyanazokkal a két paranccsal. Az Arial és a Times New Roman most már telepítve van:
Font folders: /usr/share/fonts, /usr/local/share/fonts, .local/share/fonts, /app/.fonts
Font substitutions:
Calibri -> Arial
Az Aspose.Slides által létrehozott prezentációk alapértelmezett betűtípusa, a Calibri, nem része a core betűtípusoknak, ezért továbbra is helyettesítve lesz. Lásd a Alapértelmezett betűtípus beállítása hiányzó betűtípusokhoz szekciót.
Debianon a csomag a contrib tárolókomponensben található, amelyet a Debian képek alapértelmezésben nem engedélyeznek; az alapértelmezett .NET 8 és .NET 9 képek Debian 12 alapúak. Engedélyezze a contrib-ot ugyanabban az utasításban:
RUN sed -i 's/^Components: main$/Components: main contrib/' /etc/apt/sources.list.d/debian.sources \
&& echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | debconf-set-selections \
&& apt-get update \
&& apt-get install -y --no-install-recommends libfontconfig1 fonts-dejavu-core ttf-mscorefonts-installer \
&& rm -rf /var/lib/apt/lists/*
Az Ubuntu-alapú .NET 10 képek már engedélyezik a multiverse-t, az Ubuntu komponensét, amely tartalmazza a csomagot.
Egyéb betűtípuscsomagok
Debian és Ubuntu szabad licence alatt álló betűtípusokat is csomagol, például:
| Csomag | Betűtípusok |
|---|---|
fonts-dejavu-core |
DejaVu Sans, DejaVu Serif, DejaVu Sans Mono |
fonts-liberation |
Liberation Sans, Serif, and Mono, with the same metrics as Arial, Times New Roman, and Courier New |
fonts-crosextra-carlito |
Carlito, with the same metrics as Calibri |
fonts-crosextra-caladea |
Caladea, with the same metrics as Cambria |
Telepítse őket az apt-get install paranccsal ugyanabban a RUN utasításban. Az Aspose.Slides.NET6.CrossPlatform nem alkalmazza a Linux betűtípus konfiguráció aliasait: a fonts-liberation telepítése után is az Arial szöveg általános helyettesítő betűtípussal jelenik meg, nem a Liberation Sans-szal. Egy metrikailag kompatibilis betűtípus használatához egy hiányzó helyett, állítsa be alapértelmezett betűtípusként (alapértelmezett betűtípus), vagy adjon hozzá egy betűtípus helyettesítési szabályt.
Saját betűtípusfájlok hozzáadása
Azok a betűtípusok, amelyeket a disztribúciók nem csomagolnak, például a szervezete betűtípusai vagy egyéb olyan betűtípusok, amelyeket a szerveren használhat licenc alapján, hozzáadhatók betűtípusfájlokként. Helyezze a betűtípusfájlokat, például .ttf fájlokat, egy fonts nevű mappába a FontCheck mappán belül. Az alábbi példák a Carlito fájlokat használják, egy Calibri-hez hasonló metrikájú betűtípus, amelyet letölthet a Google Fonts oldalról.
A betűtípusok telepítése egy rendszer betűtípus mappába
Az Aspose.Slides a Font folders sorban kiírt mappákban lévő betűtípusokat olvassa. A betűtípusok minden alkalmazás számára történő telepítéséhez a képen, másolja őket a /usr/local/share/fonts könyvtárba, amely a helyi telepítésű betűtípusok mappája. Adja hozzá ezt az utasítást a Dockerfile runtime szakaszához, a csomagokat telepítő RUN utasítás után:
COPY fonts/ /usr/local/share/fonts/
Betűtípusok betöltése az alkalmazás mappájából
A betűtípusok a képbe való telepítése helyett csatolhatók az alkalmazáshoz, és betölthetők a FontsLoader.LoadExternalFonts metódussal. Ekkor a betűtípusok csak az Aspose.Slides számára lesznek elérhetők, és az alkalmazással együtt kerülnek telepítésre. A FontCheck ezt teszi: a FontCheck.csproj másolja a fonts mappát az alkalmazás kimenetébe, a Program.cs pedig a LoadExternalFonts-nek átadja ezt a mappát a prezentáció létrehozása előtt. A Egyedi betűtípus leírja a betűtípusok más módon történő biztosítását, például memóriából történő betöltést.
Építse újra a képet, majd ellenőrizze a Calibri és a Carlito betűtípusokat:
docker build -t font-check .
docker run --rm font-check Calibri Carlito
Az alkalmazás mappa most már megjelenik a betűtípus mappák között, és a Carlito már nem lesz helyettesítve:
Font folders: /app/fonts, /usr/share/fonts, /usr/local/share/fonts, .local/share/fonts, /app/.fonts
Font substitutions:
Calibri -> Arial
Alapértelmezett betűtípus beállítása hiányzó betűtípusokhoz
Ha egy betűtípus hiányzik, az Aspose.Slides egy saját maga által választott helyettesítőt használ. A saját helyettesítő beállításához állítsa be a DefaultRegularFont tulajdonságot a LoadOptions osztályban, és adja át ezeket az opciókat a Presentation konstruktorának. A FontCheck a DEFAULT_FONT környezeti változóból olvassa a betűtípus nevét. Carlito betöltése után használja azt hiányzó betűtípusokhoz:
docker run --rm -e DEFAULT_FONT=Carlito font-check
A Calibri most már Carlito-val van megrajzolva, amelynek karakterei ugyanolyan szélességűek, mint a Calibri-é, így a szöveg megtartja a sortöréseket:
Font folders: /app/fonts, /usr/share/fonts, /usr/local/share/fonts, .local/share/fonts, /app/.fonts
Font substitutions:
Calibri -> Carlito
Az alapértelmezett betűtípus minden hiányzó betűtípust lecserél. Az egyes betűtípusok leképezéséhez, például az Arial-t a Liberation Sans-re és a Calibri-t a Carlito-ra, használja a betűtípus helyettesítési szabályokat. A szabályok megváltoztatják a renderelt kimenetet, de a GetSubstitutions nem tükrözi őket, ezért ellenőrizze a betűtípusokat a kimeneti fájlban. Ázsiai szöveg esetén állítsa be a DefaultAsianFont értéket is; lásd a Alapértelmezett betűtípus oldalt.
Betűtípusok telepítése Alpine Linuxon
Alpine Linuxon használja az Aspose.Slides.NET csomagot; a Futtatás Alpine Linuxon felsorolja a projekt módosításait. Végezze el ugyanazokat a módosításokat a FontCheck-en: cserélje ki a csomagreferenciát, adja hozzá a SetSwitch utasítást a Program.cs-hez, és használja ezt a runtime szakaszt, amely telepíti a Microsoft core betűtípusokat is:
FROM mcr.microsoft.com/dotnet/runtime:10.0-alpine
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false
RUN apk add --no-cache icu-libs libgdiplus font-dejavu msttcorefonts-installer \
&& update-ms-fonts \
&& fc-cache -f
WORKDIR /app
COPY --from=build /app .
RUN mkdir output && chown $APP_UID output
USER $APP_UID
ENTRYPOINT ["dotnet", "FontCheck.dll"]
update-ms-fonts letölti és telepíti ugyanazokat a Microsoft core betűtípusokat, mint a Debian és Ubuntu csomag, és az EULA ugyanúgy érvényes. Az fc-cache frissíti a betűtípus gyorsítótárát.
Az Aspose.Slides.NET Linuxon a betűtípus konfigurációs könyvtár (fontconfig) választja ki a helyettesítőt egy hiányzó betűtípusra, és a GetSubstitutions nem jelenti azt, ezért a FontCheck azt írja ki, hogy No font substitutions. Ahhoz, hogy megtekintse, mely betűtípus használatos egy betűtípus névhez, kérdezze meg a fontconfig-ot a konténerben:
docker run --rm --entrypoint fc-match font-check Arial
A Microsoft core betűtípusok telepítése után az Arial lett használva az Arial helyett:
Arial.ttf: "Arial" "Regular"
Ezek nélkül, ha a RUN utasítás csak a icu-libs libgdiplus font-dejavu csomagokat telepíti, ugyanaz a parancs a következőt írja ki:
DejaVuSans.ttf: "DejaVu Sans" "Book"
GYIK
Miért néz ki másképp egy prezentáció, amikor szerveren konvertálják?
A szerveren nincsenek meg a prezentáció által használt betűtípusok, ezért az Aspose.Slides helyettesítő betűtípussal rajzolja a szöveget, amelynek karakterei más szélességűek. Futtassa a FontCheck-et a prezentáció betűtípusneveivel, hogy lássa, mely betűtípusok helyettesítve vannak, majd telepítse ezeket a betűtípusokat vagy töltse be őket az alkalmazás mappájából.
A build telepítette a ttf-mscorefonts-installer csomagot, de az Arial még mindig helyettesítve van. Miért?
Az EULA nem lett elfogadva a csomag telepítése előtt, ezért a telepítő kihagyta a betűtípusokat. Adja hozzá a debconf-set-selections parancsot az apt-get install előtt, ahogy a Microsoft Core betűtípusok részben látható, majd építse újra a képet.
A PDF-et megnyitó számítógépnek szüksége van a betűtípusokra?
Nem. Ezekben a példákban a PDF tartalmazza azokat a betűtípusokat, amelyekkel a szöveg meg lett rajzolva, így minden számítógépen egyformán néz ki. A betűtípusokra csak ott van szükség, ahol az Aspose.Slides rendereli a prezentációt.