The latest Aspose Slides Java 19.12 does not show fill patterns in rotated shapes. I only know that it worked with Aspose Slides 15.11 and I don’t know when it stopped working.
Reproducable like this:
- Add a shape of type
Triangle
to a slide. - Define fill pattern: vertical
- Rotate triangle by 90 degrees.
- Generate thumbnail.
Expected result: Triangle should be filled with the vertical lines pattern as in the PPTX file (pattern not rotated).
Actual result: Triangle is filled with the foreColor only.
Here my sample code that produces this behavior:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.aspose.slides.FillType;
import com.aspose.slides.IAutoShape;
import com.aspose.slides.IColorFormat;
import com.aspose.slides.IShapeFrame;
import com.aspose.slides.ISlide;
import com.aspose.slides.NullableBool;
import com.aspose.slides.PatternStyle;
import com.aspose.slides.Presentation;
import com.aspose.slides.SaveFormat;
import com.aspose.slides.ShapeFrame;
import com.aspose.slides.ShapeType;
public class Main {
public static void main(String[] args) {
final Presentation presentation = new Presentation();
final ISlide slide = presentation.getSlides().get_Item(0);
addTriangle(slide, 60);
final IAutoShape rotated90 = addTriangle(slide, 220);
rotate(rotated90, 90);
final IAutoShape rotated270 = addTriangle(slide, 380);
rotate(rotated270, 270);
final File pngFile = new File("MissingFillPatternInThumbnail.png");
try (final FileOutputStream outputStream = new FileOutputStream(pngFile)) {
System.out.println("Writing file " + pngFile.getAbsolutePath());
ImageIO.write(slide.getThumbnail(1, 1), "png", outputStream);
} catch (final IOException e) {
e.printStackTrace();
}
final File pptxFile = new File("MissingFillPatternInThumbnail.pptx");
System.out.println("Writing file " + pptxFile.getAbsolutePath());
try (final FileOutputStream outputStream = new FileOutputStream(pptxFile)) {
presentation.save(outputStream, SaveFormat.Pptx);
} catch (IOException e) {
e.printStackTrace();
}
}
private static IAutoShape addTriangle(final ISlide slide, final float y) {
final IAutoShape shape = slide.getShapes().addAutoShape(ShapeType.Triangle, 310, y, 100, 100);
final IColorFormat foreColor = slide.getPresentation().getMasterTheme().getColorScheme().getAccent1();
final IColorFormat backColor = slide.getPresentation().getMasterTheme().getColorScheme().getLight1();
shape.getFillFormat().setFillType(FillType.Pattern);
shape.getFillFormat().getPatternFormat().setPatternStyle(PatternStyle.Vertical);
shape.getFillFormat().getPatternFormat().getForeColor().copyFrom(foreColor);
shape.getFillFormat().getPatternFormat().getBackColor().copyFrom(backColor);
return shape;
}
private static void rotate(final IAutoShape shape, final float rotationAngle) {
final IShapeFrame frame = shape.getFrame();
final float x = frame.getX() - (frame.getHeight() - frame.getWidth()) / 2;
final float y = frame.getY() - (frame.getWidth() - frame.getHeight()) / 2;
shape.setFrame(new ShapeFrame(x, y, frame.getHeight(), frame.getWidth(), NullableBool.False, NullableBool.False, rotationAngle));
}
}
MissingFillPatternInThumbnail.png (25.2 KB)