Java'da Sunum Slaytlarını SVG Görüntülerine Dönüştür

Genel Bakış

SVG, web yayıncılığı, slayt görüntüleyicileri, erişilebilirlik iş akışları ve otomatik sonrası işleme için iyi çalışan ölçeklenebilir bir XML tabanlı görüntü formatıdır. Aspose.Slides, 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.

İhraç edilen 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

Presentation oluşturun, bir slaytı seçin ve ISlide.writeAsSvg ile bir akıma 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ü dizini yerine ISlide.getSlideNumber kullanır. Bir slayt görüntüleyicisi veya web sayfasının yalnızca o şekle ihtiyacı olduğunda IShape.writeAsSvg ile tek bir şekli 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önüşünün 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 ayarlayarak tüm slayt metnini vektörel grafik olarak yazın. Bu, yazı tipi bağımlılıklarını ortadan kaldırır ve görsel sonucu tarayıcılar arasında daha tutarlı hale getirir, ancak metin artık SVG metni olarak seçilebilir veya aranabilir değildir.

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 Ele Alınacağını 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 AddLinksToFontFiles, yazı tipi verisini SVG’ye dahil etmek için Embed veya harici yazı tiplerini kullanan metni grafik olarak renderlemek için Vectorize seçeneğini tercih edin. 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

Gömülü resimlerin çözünürlüğünü azaltmak için SVGOptions.setPicturesCompression, kırpılmış kaynak alanlarını atlamak için SVGOptions.setDeletePicturesCroppedAreas, ve JPEG kodlama kalitesini kontrol etmek için SVGOptions.setJpegQuality kullanın. Bu ayarlar, dosya boyutunu azaltır ancak görüntü doğruluğu veya tutulan görüntü verisi pahasına olur.

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 amacıyla ISvgShapeFormattingController kullanın. Metin tspan öğeleri için de ISvgTSpan.setId değerlerini ayarlamak isterseniz ISvgShapeAndTextFormattingController uygulayın. Bu denetleyicilerden birini SVGOptions.setShapeFormattingController ile atayın.

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 ISvgShape.setEventHandler metodunu bir SvgEvent değeriyle çağırın. Denetleyiciyi SVGOptions.setShapeFormattingController ile atayın ve JavaScript fonksiyonunu sonucu barındıran sayfada veya SVG belgesinde 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();
}

Barındırıcı sayfa, işleyici tarafından başvurulan JavaScript fonksiyonunu tanımlayabilir. Kimliklerin ve olay işleyicilerin atanması, slayt görüntüleyicileri, erişilebilirlik iyileştirmeleri 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. Yalnızca harici yazı tiplerini kullanan metnin grafiklere dönüştürülmesi gerektiğinde ise SvgExternalFontsHandling.Vectorize kullanın.

Bir SVG’yi daha küçük yapmak için en iyi yol nedir?

İlk olarak gömülü resimleri sıkıştırın, kırpılmış görüntü alanlarını silin ve hedef ortam bu dosyaları sunabiliyorsa bağlanmış yazı tipi dosyalarını seçin. Sonucu test edin; çünkü düşük görüntü çözünürlüğü, düşük JPEG kalitesi ve vektörleştirilmiş metin farklı kalite ve boyut dengelerine sahiptir.

Dışa aktarılan SVG öğelerini dışa aktardıktan sonra değiştirebilir miyim?

Evet. Bir biçimlendirme denetleyicisi aracılığıyla kimlikler atayın, ardından eşleşen SVG öğelerini sonrası işleme aracınızda veya tarayıcı betiğinizde seçin.