Impression de Présentation

Dans Aspose.Slides pour Java 24.4, nous avons introduit une API Moderne qui limite le support d’impression. Cependant, nous avons adopté une nouvelle approche pour vous aider à surmonter cette limitation. Dans cet article, nous allons vous montrer comment imprimer une présentation en utilisant l’API actuelle.

Impression de Présentation

Ce fragment de code Java démontre comment imprimer une présentation PowerPoint en utilisant l’API Aspose.Slides pour Java.

Pour imprimer une présentation, suivez ces étapes :

  1. Créez une instance de PrintRequestAttributeSet et spécifiez les attributs d’impression tels que l’orientation et la plage de pages.
  2. Créez une instance de RenderingOptions et spécifiez les options pour la mise en page des notes de diapositive.
  3. Créez une instance de la classe Presentation en spécifiant le fichier de présentation.
  4. Créez une instance de PrinterJob pour spécifier l’imprimante désirée.
  5. Générez un tableau d’images de diapositives en utilisant la méthode getImages .
  6. Définissez le tableau IImage comme imprimable pour le PrinterJob.
  7. Appelez la méthode print de la classe PrinterJob.

Assurez-vous de remplacer “printerName” par le nom de votre imprimante spécifique et de configurer le PrintRequestAttributeSet et RenderingOptions selon vos besoins en matière d’impression.

Si vous rencontrez des problèmes ou avez besoin de plus d’assistance, n’hésitez pas à contacter notre équipe de support.

public void print() 
{
    // Définir le nom de l'imprimante
    String printerName = "Adobe PDF";
    // Définir les diapositives à imprimer
    int[] slidesToPrint = { 2, 3, 4 };
    // Définir l'orientation de la page
    OrientationRequested pageOrientation = OrientationRequested.LANDSCAPE;

    // Définir le facteur d'échelle pour le rendu des images
    final int scaleFactor = 4;

    // Définir les attributs d'impression
    final PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
    attributes.add(pageOrientation);

    // Configurer les options de rendu pour les diapositives
    final RenderingOptions renderingOptions = new RenderingOptions();
    final INotesCommentsLayoutingOptions slidesLayoutOptions = new NotesCommentsLayoutingOptions();
    // Pour imprimer des notes, utilisez OrientationRequested.PORTRAIT
    //slidesLayoutOptions.setNotesPosition(NotesPositions.BottomFull);
    renderingOptions.setSlidesLayoutOptions(slidesLayoutOptions);

    // Charger le fichier de présentation
    final Presentation pres = new Presentation("presentation.pptx");
    try {
        // Obtenir le job d'impression
        final PrinterJob printerJob = PrinterJob.getPrinterJob();
        // Définir le service d'impression désiré
        printerJob.setPrintService(findPrintService(printerName));

        // Obtenir le format de page par défaut
        final PageFormat pageFormat = printerJob.defaultPage();

        // Définir les dimensions de l'image en fonction de l'orientation
        IImage[] slideImages;
        Dimension imageSize;
        if (pres.getSlideSize().getOrientation() == SlideOrientation.Landscape &&
            slidesLayoutOptions.getNotesPosition() != NotesPositions.BottomFull) {
            // Orientation paysage
            imageSize = new Dimension(
                    (int) pageFormat.getImageableHeight() * scaleFactor,
                    (int) pageFormat.getImageableWidth() * scaleFactor);

        } else {
            // Orientation portrait
            imageSize = new Dimension(
                    (int) pageFormat.getImageableWidth() * scaleFactor,
                    (int) pageFormat.getImageableHeight() * scaleFactor);
        }
        // Rendre les images de diapositive
        slideImages = pres.getImages(renderingOptions, slidesToPrint, imageSize);
        // Libérer l'objet présentation
        pres.dispose();

        // Définir l'imprimable multi-image pour le job d'impression
        printerJob.setPrintable(new MultiImagePrintable(convertToBufferedImage(slideImages)), pageFormat);
        // Imprimer les diapositives avec les attributs spécifiés
        printerJob.print(attributes);
    } catch (PrinterException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

// Méthode pour trouver un PrintService par son nom
static PrintService findPrintService(String printerName)
{
    PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
    for (PrintService service : printServices) {
        if (service.getName().equals(printerName)) {
            return service;
        }
    }
    return null;
}

// Méthode pour convertir un tableau d'objets IImage en une liste d'objets BufferedImage
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;
}

// Une classe statique MultiImagePrintable qui implémente l'interface Printable
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;
    }
}