Substituir imagem em arquivo PDF existente usando Java

Use a coleção de imagens da página ou a busca baseada em posicionamento, dependendo de quão precisamente você precisa direcionar a imagem.

Substituir uma imagem por índice de recurso

  1. Abra o PDF de origem em um objeto Document.
  2. Acesse os recursos de imagem no destino Page.
  3. Substitua o recurso de imagem de destino pelo novo arquivo de imagem.
  4. Salve o PDF atualizado Document.
public static void replaceImage(Path inputFile, Path imageFile, Path outputFile) throws Exception {
    try (Document document = new Document(inputFile.toString());
         InputStream imageStream = Files.newInputStream(imageFile)) {
        document.getPages().get_Item(1).getResources().getImages().replace(1, imageStream);
        document.save(outputFile.toString());
    }
}

Substituir uma imagem usando ImagePlacementAbsorber

  1. Abra o PDF de origem em um objeto Document.
  2. Crie um ImagePlacementAbsorber e visite o destino Page.
  3. Obtenha o destino ImagePlacement e substitua-o pelo novo fluxo de imagem.
  4. Salve o PDF atualizado Document.
public static void replaceImageWithAbsorber(Path inputFile, Path imageFile, Path outputFile) throws Exception {
    try (Document document = new Document(inputFile.toString())) {
        ImagePlacementAbsorber absorber = new ImagePlacementAbsorber();
        document.getPages().get_Item(1).accept(absorber);

        if (absorber.getImagePlacements().size() > 0) {
            ImagePlacement imagePlacement = absorber.getImagePlacements().get_Item(1);
            try (InputStream imageStream = Files.newInputStream(imageFile)) {
                imagePlacement.replace(imageStream);
            }
        }

        document.save(outputFile.toString());
    }
}