C++'ta Sunumları Açma
Giriş
Sıfırdan PowerPoint sunumları oluşturmanın yanı sıra, Aspose.Slides mevcut sunumları da açmanıza olanak tanır. Bir sunumu yükledikten sonra, onun hakkında bilgi alabilir, slayt içeriğini düzenleyebilir, yeni slaytlar ekleyebilir, mevcut slaytları kaldırabilir ve daha fazlasını yapabilirsiniz.
Sunumları Açma
Mevcut bir sunumu açmak için, Presentation sınıfının bir örneğini oluşturun ve dosya yolunu yapıcıya geçirin.
Aşağıdaki C++ örneği, bir sunumu nasıl açıp slayt sayısını nasıl alacağınızı gösterir:
// Presentation sınıfının bir örneğini oluşturun ve dosya yolunu yapıcıya geçiriniz.
auto presentation = MakeObject<Presentation>(u"Sample.pptx");
// Sunumdaki toplam slayt sayısını yazdır.
Console::WriteLine(presentation->get_Slides()->get_Count());
presentation->Dispose();
Şifreli Sunumları Açma
Şifre korumalı bir sunumu açmanız gerektiğinde, şifreyi LoadOptions sınıfının set_Password yöntemiyle geçirerek çözebilir ve yükleyebilirsiniz. Aşağıdaki C++ kodu bu işlemi gösterir:
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_Password(u"YOUR_PASSWORD");
auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
// Şifrelenmiş sunum üzerinde işlemler gerçekleştir.
presentation->Dispose();
Büyük Sunumları Açma
Aspose.Slides, büyük sunumları yüklemenize yardımcı olmak için seçenekler—özellikle LoadOptions sınıfındaki get_BlobManagementOptions yöntemi—sağlar.
Aşağıdaki C++ kodu, büyük bir sunumu (örneğin 2 GB) nasıl yükleyeceğinizi gösterir:
auto filePath = u"LargePresentation.pptx";
auto loadOptions = MakeObject<LoadOptions>();
// KeepLocked davranışını seçin—sunum dosyası yaşam süresi boyunca kilitli kalacaktır
// Presentation örneği için, ancak belleğe yüklenmesi veya geçici bir dosyaya kopyalanması gerekmez.
loadOptions->get_BlobManagementOptions()->set_PresentationLockingBehavior(PresentationLockingBehavior::KeepLocked);
loadOptions->get_BlobManagementOptions()->set_IsTemporaryFilesAllowed(true);
loadOptions->get_BlobManagementOptions()->set_MaxBlobsBytesInMemory(10 * 1024 * 1024); // 10 MB
auto presentation = MakeObject<Presentation>(filePath, loadOptions);
// Büyük sunum yüklendi ve kullanılabilir, bellek tüketimi düşük kalır.
// Sunumda değişiklikler yapın.
presentation->get_Slide(0)->set_Name(u"Large presentation");
// Sunumu başka bir dosyaya kaydedin. Bu işlem sırasında bellek tüketimi düşük kalır.
presentation->Save(u"LargePresentation-copy.pptx", SaveFormat::Pptx);
// Bunu yapmayın! Dosya, sunum nesnesi bertaraf edilene kadar kilitli olduğu için bir I/O istisnası fırlatılacak.
File::Delete(filePath);
presentation->Dispose();
// Burada yapmak uygundur. Kaynak dosya artık sunum nesnesi tarafından kilitli değil.
File::Delete(filePath);
Info
Akışlarla çalışırken belirli kısıtlamaları aşmak için Aspose.Slides, akışın içeriğini kopyalayabilir. Bir akıştan büyük bir sunumu yüklemek, sunumun kopyalanmasına neden olur ve yükleme süresini yavaşlatabilir. Bu nedenle, büyük bir sunumu yüklemeniz gerektiğinde, akış yerine sunum dosya yolunu kullanmanızı şiddetle öneririz.
Büyük nesneler (video, ses, yüksek çözünürlüklü resimler vb.) içeren bir sunum oluştururken, bellek tüketimini azaltmak için BLOB yönetimi kullanabilirsiniz.
Harici Kaynakları Kontrol Etme
Aspose.Slides, harici kaynakları yönetmenizi sağlayan IResourceLoadingCallback arabirimini sunar. Aşağıdaki C++ kodu, IResourceLoadingCallback arabirimini nasıl kullanacağınızı gösterir:
class ImageLoadingHandler : public IResourceLoadingCallback
{
public:
ResourceLoadingAction ResourceLoading(SharedPtr<IResourceLoadingArgs> args) override
{
if (args->get_OriginalUri().EndsWith(u".jpg"))
{
try
{
// Yerine geçen bir resmi yükleyin.
auto imageData = File::ReadAllBytes(u"aspose-logo.jpg");
args->SetData(imageData);
return ResourceLoadingAction::UserProvided;
}
catch (Exception&)
{
return ResourceLoadingAction::Skip;
}
}
else if (args->get_OriginalUri().EndsWith(u".png"))
{
// Yerine geçen bir URL ayarlayın.
args->set_Uri(u"http://www.google.com/images/logos/ps_logo2.png");
return ResourceLoadingAction::Default;
}
// Diğer tüm resimleri atlayın.
return ResourceLoadingAction::Skip;
}
};
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_ResourceLoadingCallback(MakeObject<ImageLoadingHandler>());
auto presentation = MakeObject<Presentation>(u"Sample.pptx", loadOptions);
Gömülü İkili Nesneler Olmadan Sunumları Yükleme
PowerPoint sunumu aşağıdaki türde gömülü ikili nesneler içerebilir:
- VBA projesi (IPresentation::get_VbaProject aracılığıyla erişilebilir);
- OLE nesnesi gömülü verileri (IOleEmbeddedDataInfo::get_EmbeddedFileData aracılığıyla erişilebilir);
- ActiveX kontrol ikili verileri (IControl::get_ActiveXControlBinary aracılığıyla erişilebilir).
ILoadOptions::set_DeleteEmbeddedBinaryObjects yöntemini kullanarak, gömülü ikili nesneler içermeyen bir sunumu yükleyebilirsiniz.
Bu yöntem, potansiyel olarak kötü amaçlı ikili içeriği kaldırmak için faydalıdır. Aşağıdaki C++ kodu, gömülü ikili içerik olmadan bir sunumu nasıl yükleyeceğinizi gösterir:
auto loadOptions = MakeObject<LoadOptions>();
loadOptions->set_DeleteEmbeddedBinaryObjects(true);
auto presentation = MakeObject<Presentation>(u"malware.ppt", loadOptions);
// Sunum üzerinde işlemler gerçekleştirin.
presentation->Dispose();
SSS
Bir dosyanın bozuk ve açılamaz olduğunu nasıl anlayabilirim?
Yükleme sırasında bir ayrıştırma/format doğrulama istisnası alırsınız. Bu tür hatalar genellikle geçersiz bir ZIP yapısı veya bozuk PowerPoint kayıtlarını belirtir.
Açarken gerekli yazı tipleri eksikse ne olur?
Dosya açılacaktır, ancak daha sonra rendering/export yazı tiplerini değiştirebilir. Çalışma zamanına yazı tipi ikamelerini yapılandırın veya gerekli yazı tiplerini ekleyin.
Açarken gömülü medya (video/ses) ne olur?
Bunlar sunum kaynakları olarak kullanılabilir hale gelir. Medya dış yollarla referanslanıyorsa, bu yolların ortamınızda erişilebilir olduğundan emin olun; aksi takdirde rendering/export medya dosyalarını atlayabilir.