Извлечение изображений из PDF‑файла с помощью Java

Aspose.PDF for Java поддерживает прямое извлечение ресурсов изображений и фильтрацию на основе размещения.

Извлечение встроенного изображения по индексу

Используйте этот пример, когда необходимо сохранить конкретный ресурс изображения со страницы PDF.

  1. Откройте исходный PDF в объекте Document.
  2. Получите доступ к целевому XImage из ресурсов страницы.
  3. Сохраните поток изображения в выходной файл.
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);
    }
}

Извлечение изображений из определённой области страницы

Используйте этот пример, когда нужно экспортировать только изображения, размещённые внутри выбранного прямоугольника.

  1. Определите нужную область Rectangle и откройте исходный PDF.
  2. Используйте ImagePlacementAbsorber для проверки размещения изображений на странице.
  3. Сохраняйте только изображения, размещение которых попадает в выбранную область.
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++;
            }
        }
    }
}