Prezentációs diák renderelése SVG képekként PHP-ben
Áttekintés
Az SVG egy skálázható XML-alapú képfájlformátum, amely jól működik webes közzétételhez, diavetítőkhöz, akadálymentesítési munkafolyamatokhoz és automatikus utófeldolgozáshoz. Az Aspose.Slides minden diát külön SVG-fájlba exportál, és lehetővé teszi a szöveg, betűkészletek, képek és SVG-elemek írásának vezérlését.
Használja a SVGOptions akkor, amikor az exportált SVG-nek kompaktnak, böngészők között kiszámíthatónak vagy interaktív használatra készen kell lennie.
Dia exportálása SVG-ként
Hozzon létre egy Presentation, válasszon ki egy diát, és írja ki egy streambe a Slide.writeAsSvg segítségével. Az alábbi példa a prezentáció minden diáját külön SVG-fájlként exportálja.
$presentation = new Presentation("presentation.pptx");
try {
$slideCount = java_values($presentation->getSlides()->size());
for ($slideIndex = 0; $slideIndex < $slideCount; $slideIndex++) {
$slide = $presentation->getSlides()->get_Item($slideIndex);
$slideNumber = java_values($slide->getSlideNumber());
$outputFileName = sprintf("slide-%d.svg", $slideNumber);
$svgStream = new Java("java.io.FileOutputStream", $outputFileName);
$slide->writeAsSvg($svgStream);
$svgStream->close();
}
} finally {
$presentation->dispose();
}
A fájlnév a Slide.getSlideNumber értékét használja a ciklusindex helyett. Egyetlen alakzatot is exportálhat a Shape.writeAsSvg segítségével, ha egy diavetítőnek vagy weboldalnak csak az adott alakzatra van szüksége.
SVG kimenet beállítása
A SVGOptions szabályozza az SVG renderelését. Szövegkeretek esetén a SVGOptions.setUseFrameSize a szövegkeretet belefoglalja a renderelési területbe, a SVGOptions.setUseFrameRotation pedig meghatározza, hogy a keret forgatása alkalmazásra kerül-e. Állítsa a SVGOptions.setDisableFontLigatures értékét true-ra, amikor a szöveget ligatúrák nélkül kell megjeleníteni.
$presentation = new Presentation("presentation.pptx");
$svgStream = null;
try {
$svgOptions = new SVGOptions();
$svgOptions->setDisableFontLigatures(true);
$svgOptions->setUseFrameSize(true);
$svgOptions->setUseFrameRotation(false);
$slide = $presentation->getSlides()->get_Item(0);
$svgStream = new Java("java.io.FileOutputStream", "slide-with-custom-options.svg");
$slide->writeAsSvg($svgStream, $svgOptions);
} finally {
$svgStream->close();
$presentation->dispose();
}
Szöveg és betűkészletek vezérlése
Minden szöveg vektorizálása
A SVGOptions.setVectorizeText értékét true-ra állítva a dián lévő összes szöveget vektoros grafikaként írja ki. Ez megszünteti a betűkészlet-függőséget, és a vizuális eredményt egységesebbé teszi a böngészők között, de a szöveg már nem választható vagy kereshető SVG-szövegként.
$presentation = new Presentation("presentation.pptx");
$svgStream = null;
try {
$svgOptions = new SVGOptions();
$svgOptions->setVectorizeText(true);
$slide = $presentation->getSlides()->get_Item(0);
$svgStream = new Java("java.io.FileOutputStream", "slide-with-vectorized-text.svg");
$slide->writeAsSvg($svgStream, $svgOptions);
} finally {
$svgStream->close();
$presentation->dispose();
}
Válassza ki, hogyan kezelje a külső betűkészleteket
A SVGOptions.setExternalFontsHandling egy SvgExternalFontsHandling értéket használ a külsőleg betöltött betűkészletekhez. Válassza a AddLinksToFontFiles-t, ha külön fájlokra szeretne hivatkozni, az Embed-et, ha a betűkészlet adatot beágyazza az SVG-be, vagy a Vectorize-t, ha csak a külső betűkészleteket használó szöveget grafikaként jeleníti meg. Ellenőrizze a betűkészlet licencelését, mielőtt beágyazná a betűket.
$presentation = new Presentation("presentation.pptx");
try {
$slide = $presentation->getSlides()->get_Item(0);
$linkedFontsOptions = new SVGOptions();
$linkedFontsOptions->setExternalFontsHandling(SvgExternalFontsHandling::AddLinksToFontFiles);
$linkedFontsStream = new Java("java.io.FileOutputStream", "slide-with-font-links.svg");
try {
$slide->writeAsSvg($linkedFontsStream, $linkedFontsOptions);
} finally {
$linkedFontsStream->close();
}
$embeddedFontsOptions = new SVGOptions();
$embeddedFontsOptions->setExternalFontsHandling(SvgExternalFontsHandling::Embed);
$embeddedFontsStream = new Java("java.io.FileOutputStream", "slide-with-embedded-fonts.svg");
try {
$slide->writeAsSvg($embeddedFontsStream, $embeddedFontsOptions);
} finally {
$embeddedFontsStream->close();
}
$vectorizedExternalFontsOptions = new SVGOptions();
$vectorizedExternalFontsOptions->setExternalFontsHandling(SvgExternalFontsHandling::Vectorize);
$vectorizedExternalFontsStream = new Java("java.io.FileOutputStream", "slide-with-vectorized-external-fonts.svg");
try {
$slide->writeAsSvg($vectorizedExternalFontsStream, $vectorizedExternalFontsOptions);
} finally {
$vectorizedExternalFontsStream->close();
}
} finally {
$presentation->dispose();
}
Beágyazott képek méretének csökkentése
Használja a SVGOptions.setPicturesCompression a beágyazott képek felbontásának csökkentéséhez, a SVGOptions.setDeletePicturesCroppedAreas a levágott forrásterületek kihagyásához, és a SVGOptions.setJpegQuality a JPEG kódolás minőségének szabályozásához. Ezek a beállítások csökkentik a fájlméretet a kép pontosságának vagy a megmaradt képadatok árán.
$presentation = new Presentation("presentation.pptx");
$svgStream = null;
try {
$svgOptions = new SVGOptions();
$svgOptions->setPicturesCompression(PicturesCompression::Dpi150);
$svgOptions->setDeletePicturesCroppedAreas(true);
$svgOptions->setJpegQuality(80);
$slide = $presentation->getSlides()->get_Item(0);
$svgStream = new Java("java.io.FileOutputStream", "compressed-slide.svg");
$slide->writeAsSvg($svgStream, $svgOptions);
} finally {
$svgStream->close();
$presentation->dispose();
}
Stabil azonosítók hozzárendelése alakzatokhoz és szöveghez
Adjon meg egy formázási visszahívást a SVGOptions.setShapeFormattingController segítségével, hogy minden SVG alakzathoz beállítsa a SvgShape.setId értékét. A visszahívás a szöveg tspan elemekhez is beállíthatja a SvgTSpan.setId értékeket.
A PhpJavaBridge nem tud PHP visszahívást meghívni a writeAsSvg-ből, amikor stream módban fut. Helyezze a formázási logikát egy kis Java segédosztályba, fordítsa le, és adja hozzá a kapott JAR fájlt a bridge osztályútvonalához. A segéd a Shape.getOfficeInteropShapeId használhatja, amely stabil az alakzat életciklusa alatt, valamint egy újrahasználható számlálót a szövegszakaszaihoz. Tekintse meg a Java implementation of StableSvgIdController segédkódot.
$presentation = new Presentation("presentation.pptx");
$svgStream = null;
try {
$shapeFormattingController = new Java("com.example.slides.StableSvgIdController");
$svgOptions = new SVGOptions();
$svgOptions->setShapeFormattingController($shapeFormattingController);
$slide = $presentation->getSlides()->get_Item(0);
$svgStream = new Java("java.io.FileOutputStream", "slide-with-stable-ids.svg");
$slide->writeAsSvg($svgStream, $svgOptions);
} finally {
$svgStream->close();
$presentation->dispose();
}
SVG eseménykezelők hozzáadása
Egy formázási visszahívásban hívja meg a SvgShape.setEventHandler egy SvgEvent értékkel, hogy JavaScript eseménykezelőt adjon hozzá egy exportált alakzathoz. A visszahívást a SVGOptions.setShapeFormattingController segítségével rendelheti hozzá, és definiálja a JavaScript függvényt az eredményt hostoló oldalon vagy SVG-dokumentumban.
Az stabil azonosítókhoz hasonlóan a visszahívást Java segédben kell megvalósítani, amikor a PhpJavaBridge stream módot használ. A Java implementation of SvgEventController egy ActionButton nevű alakzathoz rendel egy azonosítót és egy OnClick kezelőt. Fordítsa le ezt a segédet, adja hozzá a bridge osztályútvonalához com.example.slides.SvgEventController néven, és használja PHP-ból a következőképpen:
$presentation = new Presentation("presentation.pptx");
$svgStream = null;
try {
$shapeFormattingController = new Java("com.example.slides.SvgEventController");
$svgOptions = new SVGOptions();
$svgOptions->setShapeFormattingController($shapeFormattingController);
$slide = $presentation->getSlides()->get_Item(0);
$svgStream = new Java("java.io.FileOutputStream", "interactive-slide.svg");
$slide->writeAsSvg($svgStream, $svgOptions);
} finally {
$svgStream->close();
$presentation->dispose();
}
A hostoldal definiálhatja a kezelő által hivatkozott JavaScript függvényt. Azonosítók és eseménykezelők hozzárendelése lehetővé teszi a diavetítőket, a hozzáférhetőségi fejlesztéseket és egyéb interaktív SVG munkafolyamatokat.
GYIK
Mikor kell a SVGOptions.setVectorizeText helyett a SvgExternalFontsHandling.Vectorize használni?
Használja a SVGOptions.setVectorizeText akkor, amikor minden szövegnek függetlennek kell lennie a betűkészletektől. Használja a SvgExternalFontsHandling.Vectorize akkor, amikor csak a külső betűkészleteket használó szöveget kell grafikává alakítani.
Mi a legjobb módja egy SVG kisebbé tételének?
Kezdje a beágyazott képek tömörítésével, a levágott képrészek törlésével, és a hivatkozott betűkészlet-fájlok kiválasztásával, ha a célkörnyezet képes azokat kiszolgálni. Tesztelje az eredményt, mivel az alacsonyabb képfelbontás, a gyengébb JPEG minőség és a vektorizált szöveg mind különböző minőség‑ és méret‑kompromisszumokkal jár.
Módosíthatom-e az exportált SVG elemeket az export után?
Igen. Rendezzen azonosítókat egy formázási visszahíváson keresztül, majd válassza ki a megfelelő SVG elemeket az utófeldolgozó eszközében vagy a böngésző szkriptjében.