Java'da Sunum Bilgilerini Al ve Güncelle

Genel Bakış

Aspose.Slides, bir sunumun formatını belirleyebilir ve tam bir sunum nesne modeli oluşturmadan belge meta verilerini okuyabilir. Bu, dosyaları sınıflandırmanız, bir envanter oluşturmanız veya sunum içeriğini yükleyip işleme almaya karar vermeden önce özellikleri incelemeniz gerektiğinde faydalıdır.

Bu makale, hafif denetimi PresentationFactory ve IPresentationInfo aracılığıyla, ayrıca hedeflenmiş güncellemeleri IDocumentProperties üzerinden göstermektedir.

Sunum Formatını Kontrol Et

Bir dosyayı Presentation örneği oluşturmadan incelemek için PresentationFactory.getPresentationInfo kullanın. IPresentationInfo.getLoadFormat yöntemi, PPTX, PPT veya ODP gibi tespit edilen formatı raporlar.

import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadFormat;
import com.aspose.slides.PresentationFactory;

String[] fileNames = { "pres.pptx", "pres.ppt", "pres.odp" };

for (String fileName : fileNames) {
    IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(fileName);
    int loadFormat = presentationInfo.getLoadFormat();
    String formatName = "Other (" + loadFormat + ")";

    if (loadFormat == LoadFormat.Pptx) {
        formatName = "PPTX";
    } else if (loadFormat == LoadFormat.Ppt) {
        formatName = "PPT";
    } else if (loadFormat == LoadFormat.Odp) {
        formatName = "ODP";
    }

    System.out.println(fileName + ": " + formatName);
}

Hafif Bir Sunum Envanteri Oluşturma

Birçok sunum dosyasını işlerken, doğrulama, indeksleme veya bir belge yönetim sistemi için kompakt bir envantere ihtiyaç duyabilirsiniz. Bu senaryoda, PresentationFactory.getPresentationInfo kullanarak bir IPresentationInfo nesnesi elde edin ve ardından IPresentationInfo.readDocumentProperties yöntemini çağırarak belge meta verilerini okuyun. Bu yaklaşım bir Presentation örneği oluşturmaz ve tam sunum nesne modelinde gezinmenizi gerektirmez.

IDocumentProperties tarafından sağlanan genişletilmiş özellikler aşağıdaki envanter değerlerini sunar:

Yöntem Envanter değeri
getSlides Toplam slayt sayısı.
getHiddenSlides Gizli slayt sayısı.
getNotes Not içeren slayt sayısı.
getParagraphs Mevcut olduğunda toplam paragraf sayısı.
getWords Toplam kelime sayısı.
getMultimediaClips Toplam ses ve video klip sayısı.

Aşağıdaki örnek bu değerleri bir Presentation nesnesi oluşturmadan okur ve kompakt bir envanter yazdırır. Ayrıca getHeadingPairs ile getTitlesOfParts kombinasyonunu kullanarak yazı tipleri, temalar ve slayt başlıkları gibi içerik gruplarını gösterir.

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IHeadingPair;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.LoadFormat;
import com.aspose.slides.PresentationFactory;
import java.nio.file.Paths;

String filePath = "sample.pptx";
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(filePath);
IDocumentProperties documentProperties = presentationInfo.readDocumentProperties();

int loadFormat = presentationInfo.getLoadFormat();
String formatName = "Other (" + loadFormat + ")";

if (loadFormat == LoadFormat.Pptx) {
    formatName = "PPTX";
} else if (loadFormat == LoadFormat.Ppt) {
    formatName = "PPT";
} else if (loadFormat == LoadFormat.Odp) {
    formatName = "ODP";
}

System.out.println("File: " + Paths.get(filePath).getFileName());
System.out.println("Format: " + formatName);
System.out.println("Title: " + documentProperties.getTitle());
System.out.println("Author: " + documentProperties.getAuthor());
System.out.println("Statistics:");
System.out.println("  Slides: " + documentProperties.getSlides());
System.out.println("  Hidden slides: " + documentProperties.getHiddenSlides());
System.out.println("  Slides with notes: " + documentProperties.getNotes());
System.out.println("  Paragraphs: " + documentProperties.getParagraphs());
System.out.println("  Words: " + documentProperties.getWords());
System.out.println("  Multimedia clips: " + documentProperties.getMultimediaClips());

IHeadingPair[] headingPairs = documentProperties.getHeadingPairs();
String[] titlesOfParts = documentProperties.getTitlesOfParts();
headingPairs = headingPairs != null ? headingPairs : new IHeadingPair[0];
titlesOfParts = titlesOfParts != null ? titlesOfParts : new String[0];
int partIndex = 0;

if (headingPairs.length == 0 || titlesOfParts.length == 0) {
    System.out.println("Content groups: not available");
} else {
    System.out.println("Content groups:");

    for (IHeadingPair headingPair : headingPairs) {
        System.out.println("  " + headingPair.getName() + " (" + headingPair.getCount() + ")");

        for (int partOffset = 0; partOffset < headingPair.getCount() && partIndex < titlesOfParts.length; partOffset++) {
            System.out.println("    - " + titlesOfParts[partIndex]);
            partIndex++;
        }
    }

    if (partIndex < titlesOfParts.length) {
        System.out.println("  Other parts:");

        while (partIndex < titlesOfParts.length) {
            System.out.println("    - " + titlesOfParts[partIndex]);
            partIndex++;
        }
    }
}

Her IHeadingPair bir grup adı ve o gruptaki öğe sayısını sağlar. IDocumentProperties.getTitlesOfParts düz, sıralı bir dizi döndürür, bu yüzden her başlık çiftinin belirttiği ardışık başlık sayısını tüketin.

Depolanmış Meta Veriler ve Biçim Kısıtlamaları

IPresentationInfo.readDocumentProperties tarafından döndürülen envanter özellikleri, kaynak belgede bulunan meta verileri yansıtır. Aspose.Slides bu çağrı için bu değerleri yeniden hesaplamak amacıyla sunum nesne modelini yükleyip gezinmez. Eksik özellikler varsayılan değerlerle temsil edilir ve saklanan değerler, dosyayı en son kaydeden uygulama belge özelliklerini güncellemediyse eski olabilir.

  • PPTX: Biçim, slayt, not, gizli‑slayt, paragraf, kelime ve multimedya sayılarını, ayrıca başlık çiftlerini ve bölüm başlıklarını içeren genişletilmiş belge özellikleri sağlar. Kullanılabilirlik, belge üreticisinin hangi özellikleri yazdığına bağlıdır.
  • PPT: İkili biçim, karşılık gelen belge‑özet özelliklerini depolayabilir. Bir özellik yoksa veya belge üreticisi tarafından güncellenmemişse, Aspose.Slides bu özelliğin depolanmış ya da varsayılan değerini döndürür, slaytlardan yeniden hesaplamaz.
  • ODP: OpenDocument meta verileri, sayfa, paragraf ve kelime sayısı gibi genel belge istatistikleri sağlar, ancak bu değerler her PowerPoint‑özel genişletilmiş özelliğe karşılık gelmez. Gizli‑slayt, not‑slayt, multimedya, başlık‑çifti ve bölüm‑başlığı meta verileri mevcut olmayabilir ve envanter özellikleri varsayılan değerleri döndürebilir. Sıfır değeri ya da boş dizi, ilgili içeriğin yok olduğuna kesin kanıt olarak kabul edilmemelidir.

Hafif meta veri yaklaşımını envanterler ve ön kontrol amaçları için kullanın. Sonucun bellek içi değişiklikleri yansıtması gerektiğinde veya gerçek sunum içeriğini doğrulamanız gerektiğinde sunumu yükleyip canlı nesne modelini inceleyin.

Sunum Özelliklerini Güncelleme

IPresentationInfo.readDocumentProperties tarafından döndürülen özellikler, bir Presentation örneği oluşturmadan da değiştirilebilir. Değişiklikleri IPresentationInfo.updateDocumentProperties ile uygulayın ve ardından bağlı sunumu IPresentationInfo.writeBindedPresentation ile yazın.

Aşağıdaki resim, orijinal belge özelliklerini gösterir.

PowerPoint sunumunun orijinal belge özellikleri

import com.aspose.slides.IDocumentProperties;
import com.aspose.slides.IPresentationInfo;
import com.aspose.slides.PresentationFactory;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;

String sourceFile = "sample.pptx";
String outputFile = "sample_with_updated_properties.pptx";
IPresentationInfo presentationInfo = PresentationFactory.getInstance().getPresentationInfo(sourceFile);
IDocumentProperties documentProperties = presentationInfo.readDocumentProperties();

documentProperties.setTitle("Quarterly sales report");
documentProperties.setLastSavedTime(new Date());

presentationInfo.updateDocumentProperties(documentProperties);
try (OutputStream outputStream = new FileOutputStream(outputFile)) {
    presentationInfo.writeBindedPresentation(outputStream);
}

Aşağıdaki resim, güncellenmiş belge özelliklerini gösterir.

PowerPoint sunumunun değiştirilmiş belge özellikleri

Yararlı Bağlantılar

İlgili güvenlik kontrolleri ve koruma ayarları için aşağıdaki makalelere bakın:

SSS

Yazı tiplerinin gömülü olup olmadığını ve hangileri olduğunu nasıl kontrol edebilirim?

Sunumu yükleyin ve Presentation.getFontsManager yöntemini kullanın. Gömülü yazı tiplerini elde etmek için IFontsManager.getEmbeddedFonts ve sunum tarafından kullanılan yazı tiplerini almak için IFontsManager.getFonts çağırın. İki sonucu karşılaştırarak render için gerekli ancak gömülmemiş yazı tiplerini bulun.

Dosyanın gizli slaytları olup olmadığını ve kaç tane olduğunu hızlıca nasıl öğrenebilirim?

Depolanmış belge meta verileri yeterli olduğunda, PresentationFactory.getPresentationInfo ve IPresentationInfo.readDocumentProperties aracılığıyla IDocumentProperties.getHiddenSlides okuyun. Bu, hafif bir envanter için uygundur. Sunum bellek içinde değiştirilmişse, depolanmış meta veriler eksik ya da eski olabilir; bu durumda canlı değerleri doğrulamak için Presentation.getSlides üzerinden gezinip her slaytın ISlide.getHidden yöntemini inceleyin.

Özel slayt boyutu ve yönünün kullanılıp kullanılmadığını ve varsayılanlardan farklı olup olmadığını tespit edebilir miyim?

Evet. Sunumu yükleyin ve Presentation.getSlideSize yöntemini çağırın. Mevcut ayarları beklenen ön ayar ve boyutlarla karşılaştırmak için ISlideSize.getType, ISlideSize.getSize ve ISlideSize.getOrientation kullanın.

Grafiklerin dış veri kaynaklarına başvurup başvurmadığını hızlı bir şekilde görmenin bir yolu var mı?

Evet. Her Chart bulun ve IChartData.getDataSourceType yöntemini çağırın. Dış bir çalışma kitabı için IChartData.getExternalWorkbookPath yöntemini kullanın. Veri kaynağı tipi ve yolu dış referansı tanımlar, ancak hedefin mevcut olup olmadığını doğrulamak ayrı bir kaynak kontrolü gerektirir.

Renderlama veya PDF dışa aktarmayı yavaşlatabilecek ‘ağır’ slaytları nasıl değerlendirebilirim?

Tek bir karmaşıklık özelliği yoktur. Presentation.getSlides ve her slaytın IBaseSlide.getShapes koleksiyonunu gezerek şekil sayısını, büyük görüntüleri, efektleri, animasyonları veya multimedyaları inceleyin. Bu sinyaller bir ön eleme sağlar; ardından temsili bir render veya dışa aktarma ölçümü yaparak bir slaytı kesin bir performans darboğazı olarak sınıflandırın.