Vykreslit snímky prezentace jako obrázky SVG na Androidu
Přehled
SVG je škálovatelný formát obrázků založený na XML, který se dobře hodí pro webové publikování, prohlížeče snímků, workflow přístupnosti a automatické post-processing. Aspose.Slides for Android via Java exportuje každou snímek do samostatného souboru SVG a umožňuje vám řídit, jak jsou zapisovány text, písma, obrázky a prvky SVG.
Použijte SVGOptions , když exportované SVG musí být kompaktní, předvídatelné napříč prohlížeči nebo připravené pro interaktivní použití.
Exportovat snímek jako SVG
Vytvořte Presentation, vyberte snímek a zapište jej do proudu pomocí ISlide.writeAsSvg. Následující příklad exportuje každý snímek v prezentaci do samostatného souboru SVG.
Presentation presentation = new Presentation("presentation.pptx");
try {
for (ISlide slide : presentation.getSlides()) {
String outputFileName = String.format("slide-%d.svg", slide.getSlideNumber());
try (FileOutputStream svgStream = new FileOutputStream(outputFileName)) {
slide.writeAsSvg(svgStream);
}
}
} finally {
presentation.dispose();
}
Název souboru používá ISlide.getSlideNumber místo indexu smyčky. Můžete také exportovat jednotlivý tvar pomocí IShape.writeAsSvg, pokud prohlížeč snímků nebo webová stránka potřebuje jen tento tvar.
Konfigurovat výstup SVG
SVGOptions řídí vykreslování SVG. Pro textové rámy SVGOptions.setUseFrameSize zahrnuje textový rám do oblasti vykreslování a SVGOptions.setUseFrameRotation určuje, zda se má aplikovat rotace rámu. Nastavte SVGOptions.setDisableFontLigatures na true, když musí být text vykreslen bez ligatur.
Presentation presentation = new Presentation("presentation.pptx");
try {
SVGOptions svgOptions = new SVGOptions();
svgOptions.setDisableFontLigatures(true);
svgOptions.setUseFrameSize(true);
svgOptions.setUseFrameRotation(false);
ISlide slide = presentation.getSlides().get_Item(0);
try (FileOutputStream svgStream = new FileOutputStream("slide-with-custom-options.svg")) {
slide.writeAsSvg(svgStream, svgOptions);
}
} finally {
presentation.dispose();
}
Řízení textu a písem
Vektorizovat celý text
Nastavte SVGOptions.setVectorizeText na true, aby byl celý text snímku zapisován jako vektorová grafika. Tím se odstraní závislosti na písmech a výsledek bude vizuálně konzistentnější napříč prohlížeči, avšak text již nebude možné v SVG vybrat ani vyhledávat.
Presentation presentation = new Presentation("presentation.pptx");
try {
SVGOptions svgOptions = new SVGOptions();
svgOptions.setVectorizeText(true);
ISlide slide = presentation.getSlides().get_Item(0);
try (FileOutputStream svgStream = new FileOutputStream("slide-with-vectorized-text.svg")) {
slide.writeAsSvg(svgStream, svgOptions);
}
} finally {
presentation.dispose();
}
Zvolte, jak jsou zpracovávána externí písma
SVGOptions.setExternalFontsHandling používá hodnotu SvgExternalFontsHandling pro písma načítaná externě. Zvolte SvgExternalFontsHandling.AddLinksToFontFiles pro odkazování na samostatné soubory písem, SvgExternalFontsHandling.Embed pro vložení dat písem do SVG, nebo SvgExternalFontsHandling.Vectorize pro vykreslení pouze textu používajícího externí písma jako grafiky. Před vložením písem ověřte licencování písem.
Presentation presentation = new Presentation("presentation.pptx");
try {
ISlide slide = presentation.getSlides().get_Item(0);
SVGOptions linkedFontsOptions = new SVGOptions();
linkedFontsOptions.setExternalFontsHandling(SvgExternalFontsHandling.AddLinksToFontFiles);
try (FileOutputStream linkedFontsStream = new FileOutputStream("slide-with-font-links.svg")) {
slide.writeAsSvg(linkedFontsStream, linkedFontsOptions);
}
SVGOptions embeddedFontsOptions = new SVGOptions();
embeddedFontsOptions.setExternalFontsHandling(SvgExternalFontsHandling.Embed);
try (FileOutputStream embeddedFontsStream = new FileOutputStream("slide-with-embedded-fonts.svg")) {
slide.writeAsSvg(embeddedFontsStream, embeddedFontsOptions);
}
SVGOptions vectorizedExternalFontsOptions = new SVGOptions();
vectorizedExternalFontsOptions.setExternalFontsHandling(SvgExternalFontsHandling.Vectorize);
try (FileOutputStream vectorizedExternalFontsStream = new FileOutputStream("slide-with-vectorized-external-fonts.svg")) {
slide.writeAsSvg(vectorizedExternalFontsStream, vectorizedExternalFontsOptions);
}
} finally {
presentation.dispose();
}
Snížit velikost vložených obrázků
Použijte SVGOptions.setPicturesCompression ke snížení rozlišení vložených obrázků, SVGOptions.setDeletePicturesCroppedAreas k vynechání oříznutých oblastí zdroje a SVGOptions.setJpegQuality ke kontrole kvality JPEG kódování. Tato nastavení zmenšují velikost souboru na úkor věrnosti obrazu nebo zachovaných dat obrázku.
Presentation presentation = new Presentation("presentation.pptx");
try {
SVGOptions svgOptions = new SVGOptions();
svgOptions.setPicturesCompression(PicturesCompression.Dpi150);
svgOptions.setDeletePicturesCroppedAreas(true);
svgOptions.setJpegQuality(80);
ISlide slide = presentation.getSlides().get_Item(0);
try (FileOutputStream svgStream = new FileOutputStream("compressed-slide.svg")) {
slide.writeAsSvg(svgStream, svgOptions);
}
} finally {
presentation.dispose();
}
Přiřadit stabilní ID tvarům a textu
Použijte ISvgShapeFormattingController k nastavení ISvgShape.setId pro každý tvar SVG. Pro nastavení hodnot ISvgTSpan.setId na elementech textu tspan rovněž implementujte ISvgShapeAndTextFormattingController. Přidělte jeden z těchto kontrolerů pomocí SVGOptions.setShapeFormattingController.
Následující kontroler používá IShape.getOfficeInteropShapeId, který je stabilní po celou dobu existence tvaru, a opakovatelný čítač pro jeho textové spany. To činí generovaná ID vhodná pro post-processing nezměněné prezentace.
class StableSvgIdController implements ISvgShapeAndTextFormattingController {
private String currentShapeId = "";
private int textSpanIndex;
public void formatShape(ISvgShape svgShape, IShape shape) {
currentShapeId = String.format("shape-%d", shape.getOfficeInteropShapeId());
textSpanIndex = 0;
svgShape.setId(currentShapeId);
}
public void formatText(ISvgTSpan svgTSpan, IPortion portion, ITextFrame textFrame) {
svgTSpan.setId(String.format("%s-text-%d", currentShapeId, textSpanIndex++));
}
}
Presentation presentation = new Presentation("presentation.pptx");
try {
SVGOptions svgOptions = new SVGOptions();
svgOptions.setShapeFormattingController(new StableSvgIdController());
ISlide slide = presentation.getSlides().get_Item(0);
try (FileOutputStream svgStream = new FileOutputStream("slide-with-stable-ids.svg")) {
slide.writeAsSvg(svgStream, svgOptions);
}
} finally {
presentation.dispose();
}
Přidat SVG událostní obslužné funkce
V ISvgShapeFormattingController zavolejte ISvgShape.setEventHandler s hodnotou SvgEvent pro přidání JavaScriptového obslužného funkce události k exportovanému tvaru. Přidělte kontroler pomocí SVGOptions.setShapeFormattingController a definujte JavaScriptovou funkci na stránce nebo v SVG dokumentu, který výsledek hostuje.
class SvgEventController implements ISvgShapeFormattingController {
public void formatShape(ISvgShape svgShape, IShape shape) {
if ("ActionButton".equals(shape.getName())) {
svgShape.setId("action-button");
svgShape.setEventHandler(SvgEvent.OnClick, "handleShapeClick(event)");
}
}
}
Presentation presentation = new Presentation("presentation.pptx");
try {
SVGOptions svgOptions = new SVGOptions();
svgOptions.setShapeFormattingController(new SvgEventController());
ISlide slide = presentation.getSlides().get_Item(0);
try (FileOutputStream svgStream = new FileOutputStream("interactive-slide.svg")) {
slide.writeAsSvg(svgStream, svgOptions);
}
} finally {
presentation.dispose();
}
Hostitelská stránka může definovat JavaScriptovou funkci odkazovanou obslužným prvkem. Přiřazování ID a obslužných funkcí událostí umožňuje prohlížeče snímků, vylepšení přístupnosti a další interaktivní SVG workflow.
Často kladené otázky
Kdy bych měl použít SVGOptions.setVectorizeText místo SvgExternalFontsHandling.Vectorize?
Použijte [SVGOptions.setVectorizeText], když musí být celý text nezávislý na písmech. Použijte [SvgExternalFontsHandling.Vectorize], když by měl být převáděn na grafiku pouze text, který používá externí písma.
Jaký je nejlepší způsob, jak zmenšit SVG?
Začněte kompresí vložených obrázků, odstraněním oříznutých oblastí obrázků a výběrem odkazovaných souborů písem, pokud cílové prostředí může tyto soubory poskytovat. Otestujte výsledek, protože nižší rozlišení obrázku, nižší kvalita JPEG a vektorizovaný text mají různé kompromisy mezi kvalitou a velikostí.
Mohu po exportu upravit exportované SVG elementy?
Ano. Přidělte ID pomocí kontroleru formátování a poté vyberte odpovídající SVG elementy ve vašem post-processing nástroji nebo skriptu v prohlížeči.