Aspose.Slides for C++ 22.11 Release Notes

Supported Platforms

  • Aspose.Slides for C++ for Windows x64/x86 (Microsoft Visual Studio 2017 or later).
  • Aspose.Slides for C++ for Linux (Clang 3.9 or later, GCC 6.1 or later).
  • Aspose.Slides for C++ for macOS (Xcode 13.4 or later).

New Features and Enhancements

Key Summary Category Related Documentation
SLIDESNET-43281 PDF 1.7 support Feature https://docs.aspose.com/slides/net/convert-powerpoint-to-pdf/
SLIDESNET-37423 Support to render PDF v 1.7 with compliance PDF/A 3B Feature https://docs.aspose.com/slides/net/convert-powerpoint-to-pdf/
SLIDESNET-43178 Supporting PDF/A-2u compliance level for PDF export Feature https://docs.aspose.com/slides/net/convert-powerpoint-to-pdf/
SLIDESNET-42675 PDF/A-2a standard compliance level for PDF export Feature https://docs.aspose.com/slides/net/convert-powerpoint-ppt-and-pptx-to-pdf/
SLIDESNET-41958 Support for exporting to PDF using PDF/A3 compliance Feature https://docs.aspose.com/slides/net/convert-powerpoint-to-pdf/
SLIDESNET-43445 Don’t load image in memory when PresentationLockingBehavior is KeepLocked Enhancement https://docs.aspose.com/slides/net/open-presentation/
SLIDESNET-43425 Getting effect sound settings from animated object Feature https://docs.aspose.com/slides/net/shape-animation/
SLIDESNET-43091 A relative link is returned as an absolute link Enhancement https://docs.aspose.com/slides/net/manage-ole/
SLIDESNET-43424 Getting embedded audio file from hyperlinkClick settings Feature https://docs.aspose.com/slides/net/manage-hyperlinks/
SLIDESNET-43350 Convert Presentation to video Feature
SLIDESNET-43457 RandomBar animation effects Feature
SLIDESNET-36753 Create video of animated slide Feature
SLIDESNET-24332 Rendering presentation transitions like video Feature
SLIDESNET-43442 Animation of text Feature

Other Improvements and Changes

Key Summary Category Related Documentation
SLIDESCPP-3318 Use Aspose.Slides for .NET 22.11 features Enhancement https://docs.aspose.com/slides/net/aspose-slides-for-net-22-11-release-notes/
SLIDESCPP-3544 Table cells contain an entire source table when converting slides to images Bug https://docs.aspose.com/slides/cpp/convert-slide/
SLIDESCPP-3562 ArgumentOutOfRangeException is thrown when loading PPT Bug https://docs.aspose.com/slides/cpp/open-presentation/
SLIDESCPP-3561 PptxReadException is thrown when loading PPTX Bug https://docs.aspose.com/slides/cpp/open-presentation/
SLIDESCPP-3546 Aspose.Slides for C++ returns null pointer instead of an image Bug https://docs.aspose.com/slides/cpp/extracting-images-from-presentation-shapes/

Public API Changes

Convert PowerPoint Presentation to video with animations and transitions

We’ve added a new feature: PowerPoint presentation-to-video conversion. This feature includes:

  • animation of transitions between slides
  • shape animation
  • text animation

Aspose.Slides can now play presentations and generate a set of frames for an entire animation with a specific frame per second (FPS). Those frames can then be used to create a video through tools like FFmpeg.

This C++ code demonstrates a presentation to video export operation with frames set at 30FPS:

void SampleClass::OnFrameTick(System::SharedPtr<Aspose::Slides::Export::PresentationPlayer> sender, System::SharedPtr<Aspose::Slides::Export::FrameTickEventArgs> args)
{
    args->GetFrame()->Save(System::String::Format(u"frame_{0}.png", sender->get_FrameIndex()), System::Drawing::Imaging::ImageFormat::get_Png());
}

void SampleClass::SaveFrames()
{
    const int32_t FPS = 30;

    auto presentation = System::MakeObject<Presentation>(u"animated.pptx");

    auto animationsGenerator = System::MakeObject<PresentationAnimationsGenerator>(presentation);

    auto player = System::MakeObject<PresentationPlayer>(animationsGenerator, FPS);

    player->FrameTick.connect(&SampleClass::OnFrameTick, this);

    animationsGenerator->Run(presentation->get_Slides());
}

The PresentationAnimationsGenerator class is a source that sequentially generates individual animation effects, which are then played back using the PresentationPlayer class. A FrameTick event is generated for each frame to allow you to save the current frame to disk or write the frame to a video stream.

PDF 1.7 and PDF 1.6 export support added

We implemented support for PDF export to formats 1.6 and 1.7:

  • PdfCompliance.Pdf16
  • PdfCompliance.Pdf17

This C++ code demonstrates an export to PDF 1.7 operation:

auto presentation = System::MakeObject<Presentation>(u"pres.pptx");

auto options = System::MakeObject<PdfOptions>();

options->set_Compliance(Aspose::Slides::Export::PdfCompliance::Pdf17);

presentation->Save(u"pres.pdf", Aspose::Slides::Export::SaveFormat::Pdf, options);

PDF A2a, A2b, A2u, A3a and A3b compliance levels export support added

We implemented support for PDF export operations with A2a, A2b, A2u, A3a and A3b compliance levels:

  • PdfCompliance.PdfA2a
  • PdfCompliance.PdfA2b
  • PdfCompliance.PdfA2u
  • PdfCompliance.PdfA3a
  • PdfCompliance.PdfA3b

This C++ code demonstrates an operation where a PDF is saved based on the PdfA2a compliance level:

auto presentation = System::MakeObject<Presentation>(u"pres.pptx");

auto options = System::MakeObject<PdfOptions>();

options->set_Compliance(Aspose::Slides::Export::PdfCompliance::PdfA2a);

presentation->Save(u"pres.pdf", Aspose::Slides::Export::SaveFormat::Pdf, options);

The get_Sound() and set_Sound() methods have been added to the Hyperlink class to represent the played sound of an hyperlink.

auto presentation = System::MakeObject<Presentation>(u"demo.pptx");

System::SharedPtr<ISlide> slide = presentation->get_Slides()->idx_get(0);

// Gets the first shape hyperlink
System::SharedPtr<IHyperlink> link = presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0)->get_HyperlinkClick();

if (link->get_Sound() != nullptr)
{
    // Extracts the hyperlink sound in byte array
    System::ArrayPtr<uint8_t> audioData = link->get_Sound()->get_BinaryData();
}

OLE object frame relative path to a linked file support added

We implemented a new ability that allows you to access the relative file path data for OleObjectFrame using the new get_LinkPathRelative() method.

auto presentation = System::MakeObject<Presentation>(u"demo.ppt");

System::SharedPtr<IOleObjectFrame> oleFrame = System::AsCast<Aspose::Slides::IOleObjectFrame>(presentation->get_Slides()->idx_get(0)->get_Shapes()->idx_get(0));

if (oleFrame != nullptr)
{
    System::Console::WriteLine(System::String(u"The relative path: ") + oleFrame->get_LinkPathRelative());
}

StopPreviousSound property added for animation effects

The get_StopPreviousSound() and set_StopPreviousSound() methods of the Effect class specifies whether the animation effect stops the previous sound.

auto presentation = System::MakeObject<Presentation>(u"demo.pptx");

// Gets the first effect of the first slide.
System::SharedPtr<IEffect> firstSlideEffect = presentation->get_Slides()->idx_get(0)->get_Timeline()->get_MainSequence()->idx_get(0);

// Gets the first effect of the second slide.
System::SharedPtr<IEffect> secondSlideEffect = presentation->get_Slides()->idx_get(1)->get_Timeline()->get_MainSequence()->idx_get(0);

if (firstSlideEffect->get_Sound() != nullptr)
{
    // Changes the second effect Enhancements/Sound to "Stop Previous Sound"
    secondSlideEffect->set_StopPreviousSound(true);
}

Get base placeholder support added

The Shape::GetBasePlaceholder() method has been added. It returns a basic placeholder shape (shape from the layout and/or master slide that the current shape is inherited from).

This C++ code shows you how to get all (master/layout/slide) animated effects of a placeholder shape:

auto pres = System::MakeObject<Presentation>(u"sample.pptx");

System::SharedPtr<ISlide> slide = pres->get_Slides()->idx_get(0);
System::SharedPtr<IShape> shape = slide->get_Shapes()->idx_get(0);
System::ArrayPtr<System::SharedPtr<IEffect>> shapeEffects = slide->get_LayoutSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(shape);

System::SharedPtr<IShape> layoutShape = shape->GetBasePlaceholder();
System::ArrayPtr<System::SharedPtr<IEffect>> layoutShapeEffects = slide->get_LayoutSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(layoutShape);

System::SharedPtr<IShape> masterShape = layoutShape->GetBasePlaceholder();
System::ArrayPtr<System::SharedPtr<IEffect>> masterShapeEffects = slide->get_LayoutSlide()->get_MasterSlide()->get_Timeline()->get_MainSequence()->GetEffectsByShape(masterShape);