Presentación de impresión
En Aspose.Slides para Java 24.4, hemos introducido una API moderna que limita el soporte de impresión. Sin embargo, hemos adoptado un nuevo enfoque para ayudarle a superar esta limitación. En este artículo, le mostraremos cómo imprimir una presentación utilizando la API actual.
Presentación de impresión
Este fragmento de código en Java demuestra cómo imprimir una presentación de PowerPoint utilizando la API de Aspose.Slides para Java.
Para imprimir una presentación, siga estos pasos:
- Cree una instancia de
PrintRequestAttributeSet
y especifique los atributos de impresión como la orientación y el rango de páginas. - Cree una instancia de
RenderingOptions
y especifique las opciones para el diseño de notas de las diapositivas. - Cree una instancia de la clase Presentation, especificando el archivo de presentación.
- Cree una instancia de
PrinterJob
para especificar la impresora deseada. - Genere un array de imágenes de diapositivas utilizando el método getImages .
- Establezca el array
IImage
como imprimible paraPrinterJob
. - Llame al método
print
de la clasePrinterJob
.
Asegúrese de reemplazar “printerName” con el nombre de su impresora específica y configure PrintRequestAttributeSet
y RenderingOptions
de acuerdo con sus requisitos de impresión.
OrientationRequested.PORTRAIT
.
Si encuentra algún problema o necesita asistencia adicional, no dude en comunicarse con nuestro equipo de soporte.
public void print()
{
// Definir el nombre de la impresora
String printerName = "Adobe PDF";
// Definir las diapositivas a imprimir
int[] slidesToPrint = { 2, 3, 4 };
// Definir la orientación de la página
OrientationRequested pageOrientation = OrientationRequested.LANDSCAPE;
// Definir el factor de escala para el renderizado de imágenes
final int scaleFactor = 4;
// Establecer atributos de impresión
final PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet();
attributes.add(pageOrientation);
// Configurar opciones de renderizado para las diapositivas
final RenderingOptions renderingOptions = new RenderingOptions();
final INotesCommentsLayoutingOptions slidesLayoutOptions = new NotesCommentsLayoutingOptions();
// Para imprimir notas, usar OrientationRequested.PORTRAIT
//slidesLayoutOptions.setNotesPosition(NotesPositions.BottomFull);
renderingOptions.setSlidesLayoutOptions(slidesLayoutOptions);
// Cargar el archivo de presentación
final Presentation pres = new Presentation("presentation.pptx");
try {
// Obtener el trabajo de impresión
final PrinterJob printerJob = PrinterJob.getPrinterJob();
// Establecer el servicio de impresión deseado
printerJob.setPrintService(findPrintService(printerName));
// Obtener el formato de página predeterminado
final PageFormat pageFormat = printerJob.defaultPage();
// Definir dimensiones de imagen según la orientación
IImage[] slideImages;
Dimension imageSize;
if (pres.getSlideSize().getOrientation() == SlideOrientation.Landscape &&
slidesLayoutOptions.getNotesPosition() != NotesPositions.BottomFull) {
// Orientación apaisada
imageSize = new Dimension(
(int) pageFormat.getImageableHeight() * scaleFactor,
(int) pageFormat.getImageableWidth() * scaleFactor);
} else {
// Orientación vertical
imageSize = new Dimension(
(int) pageFormat.getImageableWidth() * scaleFactor,
(int) pageFormat.getImageableHeight() * scaleFactor);
}
// Renderizar imágenes de las diapositivas
slideImages = pres.getImages(renderingOptions, slidesToPrint, imageSize);
// Descartar el objeto de presentación
pres.dispose();
// Establecer el multi-imagen imprimible para el trabajo de impresión
printerJob.setPrintable(new MultiImagePrintable(convertToBufferedImage(slideImages)), pageFormat);
// Imprimir las diapositivas con los atributos especificados
printerJob.print(attributes);
} catch (PrinterException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
}
// Método para encontrar un PrintService por su nombre
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étodo para convertir un array de objetos IImage a una lista de objetos 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;
}
// Una clase estática MultiImagePrintable que implementa la interfaz 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;
}
}