Extraer imágenes de archivo PDF usando Java

Aspose.PDF for Java admite la extracción directa de recursos de imagen y el filtrado basado en la ubicación.

Extraer una imagen incrustada por índice

Utilice este ejemplo cuando necesite guardar un recurso de imagen específico de una página PDF.

  1. Abra el PDF de origen Document.
  2. Acceda al destino XImage de los recursos de la página.
  3. Guarde el flujo de la imagen en un archivo de salida.
public static void extractImage(Path inputFile, Path outputFile) throws Exception {
    try (Document document = new Document(inputFile.toString());
         OutputStream outputImage = Files.newOutputStream(outputFile)) {
        XImage image = document.getPages().get_Item(1).getResources().getImages().get_Item(1);
        image.save(outputImage);
    }
}

Extraer imágenes de una región de página específica

Utilice este ejemplo cuando solo se deben exportar las imágenes ubicadas dentro de un rectángulo seleccionado.

  1. Defina el objetivo Rectangle y abra el PDF de origen.
  2. Utilice ImagePlacementAbsorber para inspeccionar la ubicación de las imágenes en la página.
  3. Guarde solo las imágenes cuya ubicación encaje dentro de la región seleccionada.
public static void extractImageFromSpecificRegion(Path inputFile, Path outputFile) throws Exception {
    Rectangle rectangle = new Rectangle(0, 0, 590, 590, true);

    try (Document document = new Document(inputFile.toString())) {
        ImagePlacementAbsorber absorber = new ImagePlacementAbsorber();
        document.getPages().get_Item(1).accept(absorber);
        int index = 1;
        for (ImagePlacement imagePlacement : absorber.getImagePlacements()) {
            Point point1 = new Point(imagePlacement.getRectangle().getLLX(), imagePlacement.getRectangle().getLLY());
            Point point2 = new Point(imagePlacement.getRectangle().getURX(), imagePlacement.getRectangle().getURX());
            if (rectangle.contains(point1, true) && rectangle.contains(point2, true)) {
                Path indexedOutputFile = Path.of(outputFile.toString().replace("index", String.valueOf(index)));
                try (OutputStream outputImage = Files.newOutputStream(indexedOutputFile)) {
                    imagePlacement.getImage().save(outputImage);
                }
                index++;
            }
        }
    }
}