ayuda Como crear multi tiff?

Hola a todos, les agradesco de antemano su ayuda.

Se me a solicitado crear una aplicacion que guarde imagenes escaneadas en un archivo de varias paginas en este caso un multi tiff, eh buscado en la web por los mejores ejemplos que me lleven a el resultado deseado pero sin nada por el momento.

Lo mas cercano que eh encontrado en este codigo que uno 2 archivos tiff a 1 multi tiff, pero me genera un error de que no se encuentra algun lector de tiff alguna idea de que es lo que me falte para que funciones el codigo.

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageInputStream;
import javax.imageio.stream.ImageOutputStream;

class JAIprueba {
   
    public static void concateTiff(String[] inputTiffs, String outputTiff) {
                List<IIOImage> imageList = new ArrayList<IIOImage>();
                ImageInputStream tiffStream = null;
                IIOImage tiffImage = null;

                try {
                        // locate a TIFF reader
                        Iterator<ImageReader> tiffReaders = ImageIO.getImageReadersByFormatName("tiff");
                        if (!tiffReaders.hasNext())
                                throw new IllegalStateException("No TIFF reader found");
                        ImageReader tiffReader = tiffReaders.next();

                        for (int i = 0; i < inputTiffs.length; i++) {
                                System.out.println("image-" + i);
                                // point it to our image file
                                tiffStream = ImageIO.createImageInputStream(new File(inputTiffs[i]));
                                tiffReader.setInput(tiffStream);
                                // read pages until end of image from the TIFF file
                                try {
                                        for (int index = 0;; index++) {
                                                tiffImage = tiffReader.readAll(index, tiffReader.getDefaultReadParam());
                                                imageList.add(tiffImage);
                                        }
                                } catch (IndexOutOfBoundsException ex) {
                                        System.out.println("page limit crossed!");
                                }
                        }

                        Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("tiff");
                        ImageWriter writer = writers.next();
                        ImageOutputStream ios = ImageIO.createImageOutputStream(new File(outputTiff));
                        writer.setOutput(ios);

                        IIOImage firstIioImage = imageList.remove(0);
                        writer.write(firstIioImage);
                        int i = 1;
                        for (IIOImage iioImage : imageList) {
                                writer.writeInsert(i++, iioImage, null);
                        }
                        ios.close();
                        tiffStream.close();
                } catch (IOException e) {
                        System.out.println("error merging tiff. Msg=" + e.getMessage());
                }
        }

    public static void main(String Args[]){
        String rutas[]={
            "imagen1.tiff",
            "imagen2.tiff"
        };
        concateTiff(rutas, "d:/resultado.tiff");
    }
}