package com.fitbank.pdfmerger; import lombok.extern.slf4j.Slf4j; import com.sun.media.jai.codec.ImageCodec; import com.sun.media.jai.codec.ImageDecoder; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.RenderedImage; import java.awt.image.WritableRaster; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Hashtable; import java.util.List; /** * Lee páginas de un archivo tiff multipágina. * * @author FitBank CI */ @Slf4j public class TiffPageSource extends ImagePageSource { public static List getPageSources(File file) { ImageDecoder imageDecoder; try { imageDecoder = ImageCodec.createImageDecoder("tiff", new FileInputStream(file), null); List pageSources = new ArrayList(imageDecoder. getNumPages()); for (int i = 0; i < imageDecoder.getNumPages(); i++) { BufferedImage image = toBufferedImage(imageDecoder. decodeAsRenderedImage(i)); pageSources.add(new TiffPageSource(image)); } return pageSources; } catch (IOException e) { log.error("", e); return Collections.EMPTY_LIST; } } public static BufferedImage toBufferedImage(RenderedImage img) { if (img instanceof BufferedImage) { return (BufferedImage) img; } ColorModel cm = img.getColorModel(); WritableRaster raster = cm.createCompatibleWritableRaster(img.getWidth(), img.getHeight()); Hashtable properties = new Hashtable(); String[] keys = img.getPropertyNames(); if (keys != null) { for (String key : keys) { properties.put(key, img.getProperty(key)); } } BufferedImage result = new BufferedImage(cm, raster, cm.isAlphaPremultiplied(), properties); img.copyData(raster); return result; } private final BufferedImage image; private TiffPageSource(BufferedImage image) { this.image = image; } @Override protected BufferedImage getImage() throws Exception { return image; } }