PHP'de Sunum Slaytlarını SVG Görüntüsü Olarak Oluşturma
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.
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 Aktar
Bir Presentation oluşturun, bir slayt seçin ve Slide.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 = 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();
}
Dosya adı, döngü indeksinin yerine Slide.getSlideNumber kullanır. Bir slayt görüntüleyicisinin veya web sayfasının yalnızca belirli bir şekle ihtiyaç duyduğu durumlarda Shape.writeAsSvg ile tek bir şekli de dışa aktarabilirsiniz.
SVG Çıktısını Yapılandırma
SVGOptions SVG oluşturmayı kontrol eder. Metin çerçeveleri için, SVGOptions.setUseFrameSize metin çerçevesini oluşturma alanına dahil eder ve SVGOptions.setUseFrameRotation çerçeve dönüşünün uygulanıp uygulanmayacağını belirler. Metnin ligatürsüz oluşturulması gerektiğinde SVGOptions.setDisableFontLigatures değerini true olarak ayarlayın.
$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();
}
Metin ve Yazı Tiplerini Kontrol Etme
Tüm Metni Vektörleştir
SVGOptions.setVectorizeText değerini true olarak ayarlayarak tüm slayt metnini vektör 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çilemez veya aranamaz.
$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();
}
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 AddLinksToFontFiles, yazı tipi verisini SVG’ye dahil etmek için Embed ve harici yazı tipleri kullanan metni yalnızca grafik olarak oluşturmak için Vectorize seçeneklerini seçin. Yazı tiplerini gömmeden önce lisanslamayı doğrulayın.
$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();
}
Gömülü Görüntü Boyutunu Azaltma
SVGOptions.setPicturesCompression kullanarak gömülü resimlerin çözünürlüğünü azaltın, SVGOptions.setDeletePicturesCroppedAreas ile kırpılmış kaynak alanlarını atlayın ve JPEG kodlama kalitesini kontrol etmek için SVGOptions.setJpegQuality ayarlayın. Bu ayarlar, görüntü doğruluğu veya saklanan görüntü verisi pahasına dosya boyutunu küçültür.
$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();
}
Şekillere ve Metne Kararlı ID’ler Atama
SVGOptions.setShapeFormattingController için bir biçimlendirme geri araması sağlayarak her SVG şekli için SvgShape.setId belirleyin. Geri arama, metin tspan öğeleri üzerinde de SvgTSpan.setId değerlerini ayarlayabilir.
PhpJavaBridge, akış modunda çalışırken writeAsSvg den bir PHP geri aramasını çağıramaz. Biçimlendirme mantığını küçük bir Java yardımcı sınıfına koyun, derleyin ve ortaya çıkan JAR dosyasını köprü sınıf yoluna ekleyin. Yardımcı, şeklin ömrü boyunca kararlı olan ve metin span’ları için tekrarlanabilir bir sayaç sağlayan Shape.getOfficeInteropShapeId kullanabilir. Yardımcı kodu görmek için Java implementation of StableSvgIdController adresine bakın.
Derlenmiş com.example.slides.StableSvgIdController sınıfını köprü sınıf yoluna ekledikten sonra, PHP üzerinden örnekleyin ve SVGOptions‘a atayın:
$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 Olay İşleyicileri Ekleme
Bir biçimlendirme geri aramasında, dışa aktarılan bir şekle JavaScript olay işleyicisi eklemek için bir SvgEvent değeriyle SvgShape.setEventHandler çağırın. Geri aramayı SVGOptions.setShapeFormattingController ile atayın ve sonucu barındıran sayfa veya SVG belgesinde JavaScript fonksiyonunu tanımlayın.
Kararlı ID’ler gibi, PhpJavaBridge akış modunu kullandığında geri aramayı bir Java yardımcı sınıfında uygulayın. Java implementation of SvgEventController ActionButton adlı bir şekle bir ID ve bir OnClick işleyicisi atar. Bu yardımcıyı derleyin, köprü sınıf yoluna com.example.slides.SvgEventController olarak ekleyin ve aşağıdaki gibi PHP üzerinden kullanın:
$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();
}
Barındırma sayfası, işleyici tarafından referans verilen JavaScript fonksiyonunu tanımlayabilir. ID’lerin ve olay işleyicilerin atanması slayt görüntüleyicileri, erişilebilirlik iyileştirmeleri ve diğer etkileşimli SVG iş akışlarını etkinleştirir.
SSS
SVGOptions.setVectorizeText yerine SvgExternalFontsHandling.Vectorize ne zaman kullanmalıyım?
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 yol nedir?
Öncelikle gömülü resimleri sıkıştırın, kırpılmış görüntü alanlarını silin ve hedef ortam bunları sunabiliyorsa bağlı font 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ım sonrası değiştirebilir miyim?
Evet. Biçimlendirme geri aramasıyla ID’leri atayın, ardından eşleşen SVG öğelerini ardından işleme aracınızda veya tarayıcı betiğinizde seçin.