Browse our Products

Aspose.Slides for Java 22.11 Release Notes

KeySummaryCategoryRelated Documentation
SLIDESNET-43442Animation of textFeature
SLIDESNET-43457RandomBar animation effectsFeature
SLIDESNET-43350Convert Presentation to videoFeature
SLIDESNET-36753Create video of animated slideFeature
SLIDESNET-24332Rendering presentation transitions like videoFeature
SLIDESNET-43281PDF 1.7 supportFeaturehttps://docs.aspose.com/slides/net/convert-powerpoint-to-pdf/
SLIDESNET-37423Support to render PDF v 1.7 with compliance PDF/A 3BFeaturehttps://docs.aspose.com/slides/net/convert-powerpoint-to-pdf/
SLIDESNET-43178Supporting PDF/A-2u compliance level for PDF exportFeaturehttps://docs.aspose.com/slides/net/convert-powerpoint-to-pdf/
SLIDESNET-42675PDF/A-2a standard compliance level for PDF exportFeaturehttps://docs.aspose.com/slides/net/convert-powerpoint-ppt-and-pptx-to-pdf/
SLIDESNET-41958Support for exporting to PDF using PDF/A3 complianceFeaturehttps://docs.aspose.com/slides/net/convert-powerpoint-to-pdf/
SLIDESNET-43445Don’t load image in memory when PresentationLockingBehavior is KeepLockedEnhancementhttps://docs.aspose.com/slides/net/open-presentation/
SLIDESNET-43425Getting effect sound settings from animated objectFeaturehttps://docs.aspose.com/slides/net/shape-animation/
SLIDESNET-43091A relative link is returned as an absolute linkEnhancementhttps://docs.aspose.com/slides/net/manage-ole/
SLIDESNET-43424Getting embedded audio file from hyperlinkClick settingsFeaturehttps://docs.aspose.com/slides/net/manage-hyperlinks/
SLIDESJAVA-38300Use Aspose.Slides for Net 22.11 featuresEnhancement
SLIDESJAVA-338543-D effects on shapes are missing in generated PDFBughttps://docs.aspose.com/slides/java/convert-powerpoint-to-pdf/
SLIDESJAVA-38107Support for exporting to PDF using PDF/A3 complianceFeaturehttps://docs.aspose.com/slides/java/convert-powerpoint-to-pdf/
SLIDESJAVA-38830PDF 1.7 supportFeaturehttps://docs.aspose.com/slides/java/convert-powerpoint-to-pdf/
SLIDESJAVA-38896Getting effect sound settings from animated objectFeaturehttps://docs.aspose.com/slides/java/shape-animation/
SLIDESJAVA-38933PPTX to PDF: Invalid characters are shown in text editor after conversionBughttps://docs.aspose.com/slides/java/convert-powerpoint-to-pdf/
SLIDESJAVA-38825Chart data labels are missing when converting PPTX to PDF/PNGBughttps://docs.aspose.com/slides/java/powerpoint-charts/
SLIDESJAVA-38898Getting embedded audio file from hyperlinkClick settingsFeaturehttps://docs.aspose.com/slides/java/manage-hyperlinks/
SLIDESJAVA-38924Exception when saving presentationBughttps://docs.aspose.com/slides/java/clone-slides/
SLIDESJAVA-38901Aspose.Slides retrieves incorrect background gradient colorsBughttps://docs.aspose.com/slides/java/presentation-background/

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 Java code demonstrates a presentation to video export operation with frames set at 30FPS:

final int FPS = 30;
Presentation presentation = new Presentation("animated.pptx");
try {
    PresentationAnimationsGenerator animationsGenerator = new PresentationAnimationsGenerator(presentation);
    try {
        PresentationPlayer player = new PresentationPlayer(animationsGenerator, FPS);
        try {
            player.setFrameTick((sender, args) ->
            {
                try {
                    ImageIO.write(args.getFrame(), "PNG", new File("frame_" + sender.getFrameIndex() + ".png"));
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            });
            animationsGenerator.run(presentation.getSlides());
        } finally {
            if (player != null) player.dispose();
        }
    } finally {
        if (animationsGenerator != null) animationsGenerator.dispose();
    }
} finally {
    if (presentation != null) presentation.dispose();
}

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 Java code demonstrates an export to PDF 1.7 operation:

Presentation presentation = new Presentation("pres.pptx");
try {
    PdfOptions pdfOptions = new PdfOptions();
    pdfOptions.setCompliance(PdfCompliance.Pdf17);

    presentation.save("pres.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    if (presentation != null) presentation.dispose();
}

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 Java code demonstrates an operation where a PDF is saved based on the PdfA2a compliance level:

Presentation presentation = new Presentation("pres.pptx");
try {
    PdfOptions pdfOptions = new PdfOptions();
    pdfOptions.setCompliance(PdfCompliance.PdfA2a);

    presentation.save("pres.pdf", SaveFormat.Pdf, pdfOptions);
} finally {
    if (presentation != null) presentation.dispose();
}

getSound and setSound methods, have been added to the Hyperlink class to represent the played sound of an hyperlink.

Presentation presentation = new Presentation("demo.pptx");
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    // Gets the first shape hyperlink
    IHyperlink link = presentation.getSlides().get_Item(0).getShapes().get_Item(0).getHyperlinkClick();

    if (link.getSound() != null)
    {
        // Extracts the hyperlink sound in byte array
        byte[] audioData = link.getSound().getBinaryData();
    }
} finally {
    if (presentation != null) presentation.dispose();
}

OLE object frame relative path to a linked file support added

We implemented a new ability that allows you to access and change the relative file path data for OleObjectFrame using the new getLinkPathRelative method.

Presentation presentation = new Presentation("demo.ppt");
try {
    IOleObjectFrame oleFrame = (IOleObjectFrame)presentation.getSlides().get_Item(0).getShapes().get_Item(0);
    if (oleFrame != null)
    {
        System.out.println("The relative path: " + oleFrame.getLinkPathRelative());
    }
} finally {
    if (presentation != null) presentation.dispose();
}

StopPreviousSound property added for animation effects

getStopPreviousSound and getStopPreviousSound methods of the Effect class specifies whether the animation effect stops the previous sound.

Presentation presentation = new Presentation("demo.pptx");
try {
    // Gets the first effect of the first slide.
    IEffect firstSlideEffect = presentation.getSlides().get_Item(0).getTimeline().getMainSequence().get_Item(0);

    // Gets the first effect of the second slide.
    IEffect secondSlideEffect = presentation.getSlides().get_Item(1).getTimeline().getMainSequence().get_Item(0);

    if (firstSlideEffect.getSound() != null)
    {
        // Changes the second effect Enhancements/Sound to "Stop Previous Sound"
        secondSlideEffect.setStopPreviousSound(true);
    }
} finally {
    if (presentation != null) presentation.dispose();
}

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 Java code shows you how to get all (master/layout/slide) animated effects of a placeholder shape:

Presentation pres = new Presentation("sample.pptx");
try {
    ISlide slide = pres.getSlides().get_Item(0);
    IShape shape = slide.getShapes().get_Item(0);
    IEffect[] shapeEffects = slide.getLayoutSlide().getTimeline().getMainSequence().getEffectsByShape(shape);

    IShape layoutShape = shape.getBasePlaceholder();
    IEffect[] layoutShapeEffects = slide.getLayoutSlide().getTimeline().getMainSequence().getEffectsByShape(layoutShape);

    IShape masterShape = layoutShape.getBasePlaceholder();
    IEffect[] masterShapeEffects = slide.getLayoutSlide().getMasterSlide().getTimeline().getMainSequence().getEffectsByShape(masterShape);
} finally {
    if (pres != null) pres.dispose();
}