Android'de Sunum Slaytlarını SVG Görüntüleri Olarak Oluştur
Genel Bakış
SVG, web yayıncılığı, slayt izleyicileri, erişilebilirlik iş akışları ve otomatik son işleme için iyi çalışan ölçeklenebilir bir XML tabanlı görüntü formatıdır. Aspose.Slides for Android via Java, her slaytı ayrı bir SVG dosyasına dışa aktarır ve metin, yazı tipleri, resimler ve SVG öğelerinin nasıl yazılacağını kontrol etmenizi sağlar.
Dışa aktarılan SVG’nin kompakt, tarayıcılar arasında öngörülebilir veya etkileşimli kullanım için hazır olması gerektiğinde SVGOptions kullanın.
Bir Slaytı SVG Olarak Dışa Aktarma
Bir Presentation oluşturun, bir slaytı seçin ve onu bir akışa ISlide.writeAsSvg ile yazın. Aşağıdaki örnek, bir sunumdaki her slaytı ayrı bir SVG dosyası olarak dışa aktarır.
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();
}
Dosya adı, döngü indeksi yerine ISlide.getSlideNumber kullanır. Bir slayt görüntüleyicisinin veya web sayfasının yalnızca o şekli gerektirdiği durumlarda, IShape.writeAsSvg ile bireysel bir şekil de dışa aktarabilirsiniz.
SVG Çıktısını Yapılandırma
SVGOptions SVG renderlemesini kontrol eder. Metin çerçeveleri için, SVGOptions.setUseFrameSize metin çerçevesini renderleme alanına dahil eder ve SVGOptions.setUseFrameRotation çerçeve döndürmesinin uygulanıp uygulanmayacağını belirler. Metnin ligatürsüz renderlenmesi gerektiğinde SVGOptions.setDisableFontLigatures değerini true olarak ayarlayın.
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();
}
Metin ve Yazı Tiplerini Kontrol Etme
Tüm Metni Vektörleştir
SVGOptions.setVectorizeText değerini true olarak ayarlayın, böylece tüm slayt metni vektör grafiği olarak yazılır. Bu, yazı tipi bağımlılıklarını ortadan kaldırır ve görsel sonucu tarayıcılar arasında daha tutarlı hâle getirir, ancak metin artık SVG metni olarak seçilebilir veya aranabilir olmaz.
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();
}
Harici Yazı Tiplerinin Nasıl İşleneceğini Seçin
SVGOptions.setExternalFontsHandling harici olarak yüklenen yazı tipleri için bir SvgExternalFontsHandling değeri kullanır. Ayrı yazı tipi dosyalarına referans vermek için SvgExternalFontsHandling.AddLinksToFontFiles, yazı tipi verilerini SVG’ye dahil etmek için SvgExternalFontsHandling.Embed veya harici yazı tipleri kullanan metni yalnızca grafik olarak renderlemek için SvgExternalFontsHandling.Vectorize seçin. Yazı tiplerini gömmeden önce lisanslamayı doğrulayın.
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();
}
Gömülü Görüntü Boyutunu Azaltma
SVGOptions.setPicturesCompression ile gömülü resimlerin çözünürlüğünü azaltın, SVGOptions.setDeletePicturesCroppedAreas ile kırpılmış kaynak bölgelerini atlayın ve SVGOptions.setJpegQuality ile JPEG kodlama kalitesini kontrol edin. Bu ayarlar, dosya boyutunu görüntü doğruluğu veya tutulan görüntü verisi maliyeti karşılığında azaltır.
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();
}
Şekillere ve Metne Kararlı Kimlikler Atama
Her SVG şekli için ISvgShape.setId ayarlamak üzere ISvgShapeFormattingController kullanın. Metin tspan öğelerine de ISvgTSpan.setId değerleri atamak için ISvgShapeAndTextFormattingController uygulayın. Bu denetleyicilerden birini SVGOptions.setShapeFormattingController ile atayın.
Aşağıdaki denetleyici, şeklin ömrü boyunca kararlı olan ve metin span’ları için tekrar edilebilir bir sayaç sağlayan IShape.getOfficeInteropShapeId değerini kullanır. Bu, oluşturulan kimliklerin değişmemiş bir sunumun son işlemelerinde kullanılmasını sağlar.
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();
}
SVG Olay İşleyicileri Ekleme
ISvgShapeFormattingController içinde, dışa aktarılan bir şekle JavaScript olay işleyicisi eklemek için bir SvgEvent değeriyle ISvgShape.setEventHandler çağırın. Denetleyiciyi SVGOptions.setShapeFormattingController ile atayın ve sonucu barındıran sayfa veya SVG belgesinde JavaScript işlevini tanımlayın.
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();
}
Ana sayfa, işleyici tarafından referans verilen JavaScript işlevini tanımlayabilir. Kimliklerin ve olay işleyicilerin atanması, slayt izleyicileri, erişilebilirlik artırımları ve diğer etkileşimli SVG iş akışlarını mümkün kılar.
SSS
SVGOptions.setVectorizeText yerine SvgExternalFontsHandling.Vectorize ne zaman kullanılmalı?
SVGOptions.setVectorizeText tüm metnin yazı tiplerinden bağımsız olması gerektiğinde kullanın. SvgExternalFontsHandling.Vectorize yalnızca harici yazı tipleri kullanan metnin grafiklere dönüştürülmesi gerektiğinde kullanın.
Bir SVG’yi daha küçük yapmak için en iyi yöntem nedir?
Başlangıç olarak gömülü resimleri sıkıştırın, kırpılmış görüntü bölgelerini silin ve hedef ortam bunları sunabiliyorsa bağlanmış yazı tipi dosyalarını seçin. Sonucu test edin; çünkü daha düşük görüntü çözünürlüğü, daha düşük JPEG kalitesi ve vektörleştirilmiş metin farklı kalite ve boyut dengelerine sahiptir.
Dışa aktarılan SVG öğelerini dışa aktarımdan sonra değiştirebilir miyim?
Evet. Bir biçimlendirme denetleyicisi aracılığıyla kimlikler atayın, ardından eşleşen SVG öğelerini post‑işleme aracınızda veya tarayıcı betiğinizde seçin.