Print Presentation
Contents
[
Hide
]
In Aspose.Slides for Java 24.4, we have introduced a Modern API that limits print support. However, we have taken a new approach to help you overcome this limitation. In this article, we will show you how to print a presentation using the current API.
Print Presentation
This Java code snippet demonstrates how to print a PowerPoint presentation using Aspose.Slides for Java API.
To print a presentation, follow these steps:
- Create an instance of the
PrintRequestAttributeSet
and specify printing attributes such as orientation and page range. - Create an instance of the
RenderingOptions
and specify options for slide notes layout. - Create an instance of the Presentation class, specifying the presentation file.
- Create an instance of the
PrinterJob
to specify the desired printer. - Generate an array of Slide Images using the getImages method.
- Set the
IImage
array as Printable forPrinterJob
. - Call the
print
method of thePrinterJob
class.
Ensure to replace “printerName” with the name of your specific printer and configure the PrintRequestAttributeSet
and RenderingOptions
according to your printing requirements.
Please note that printing Notes must require changing the page orientation to
OrientationRequested.PORTRAIT
.
If you encounter any issues or need further assistance, feel free to reach out to our support team.
public void print()
{
// Define the printer name
String printerName = "Adobe PDF";
// Define the slides to print
int[] slidesToPrint = { 2, 3, 4 };
// Define the page orientation
OrientationRequested pageOrientation = OrientationRequested.LANDSCAPE;
// Define the scale factor for image rendering
final int scaleFactor = 4;
// Set printing attributes
final PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(pageOrientation);
// Configure rendering options for slides
final RenderingOptions renderingOptions = new RenderingOptions();
final INotesCommentsLayoutingOptions slidesLayoutOptions = new NotesCommentsLayoutingOptions();
// To print Notes, use OrientationRequested.PORTRAIT
//slidesLayoutOptions.setNotesPosition(NotesPositions.BottomFull);
renderingOptions.setSlidesLayoutOptions(slidesLayoutOptions);
// Load the presentation file
final Presentation pres = new Presentation("presentation.pptx");
try {
// Get the printer job
final PrinterJob printerJob = PrinterJob.getPrinterJob();
// Set the desired print service
printerJob.setPrintService(findPrintService(printerName));
// Get the default page format
final PageFormat pageFormat = printerJob.defaultPage();
// Define image dimensions based on orientation
IImage[] slideImages;
Dimension imageSize;
if (pres.getSlideSize().getOrientation() == SlideOrientation.Landscape &&
slidesLayoutOptions.getNotesPosition() != NotesPositions.BottomFull) {
// Landscape orientation
imageSize = new Dimension(
(int) pageFormat.getImageableHeight() * scaleFactor,
(int) pageFormat.getImageableWidth() * scaleFactor);
} else {
// Portrait orientation
imageSize = new Dimension(
(int) pageFormat.getImageableWidth() * scaleFactor,
(int) pageFormat.getImageableHeight() * scaleFactor);
}
// Render slide images
slideImages = pres.getImages(renderingOptions, slidesToPrint, imageSize);
// Dispose of the presentation object
pres.dispose();
// Set the multi-image printable for the printer job
printerJob.setPrintable(new MultiImagePrintable(convertToBufferedImage(slideImages)), pageFormat);
// Print the slides with specified attributes
printerJob.print(attributes);
} catch (PrinterException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
// Method to find a PrintService by its name
static PrintService findPrintService(String printerName)
{
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
for (PrintService service : printServices) {
if (service.getName().equals(printerName)) {
return service;
}
}
return null;
}
// Method to convert an array of IImage objects to a list of BufferedImage objects
static List<BufferedImage> convertToBufferedImage(IImage[] images) throws IOException {
List<BufferedImage> result = new ArrayList<>();
for (IImage img : images)
{
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
img.save(baos, ImageFormat.Png);
img.dispose();
result.add(ImageIO.read(new ByteArrayInputStream(baos.toByteArray())));
}
return result;
}
// A static class MultiImagePrintable that implements the Printable interface
static class MultiImagePrintable implements Printable
{
private java.util.List<BufferedImage> images;
public MultiImagePrintable(java.util.List<BufferedImage> images)
{
this.images = images;
}
@Override
public int print(Graphics g, PageFormat pf, int pageIndex)
{
if (pageIndex >= images.size())
return Printable.NO_SUCH_PAGE;
Graphics2D g2d = (Graphics2D) g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
Image image = images.get(pageIndex);
double scaleX = pf.getImageableWidth() / image.getWidth(null);
double scaleY = pf.getImageableHeight() / image.getHeight(null);
double scale = Math.min(scaleX, scaleY);
int width = (int) (image.getWidth(null) * scale);
int height = (int) (image.getHeight(null) * scale);
g.drawImage(image, 0, 0, width, height, null);
return Printable.PAGE_EXISTS;
}
}