es.jscan.Pantallas.PantallaPrincipal.java Source code

Java tutorial

Introduction

Here is the source code for es.jscan.Pantallas.PantallaPrincipal.java

Source

package es.jscan.Pantallas;

import java.awt.Color;
import java.awt.Dialog;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.text.NumberFormat;
import java.util.*;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.xml.ws.Action;
import org.apache.pdfbox.pdmodel.PDPage;
import org.imgscalr.Scalr;
import uk.co.mmscomputing.device.scanner.Scanner;
import uk.co.mmscomputing.device.scanner.ScannerIOException;
import uk.co.mmscomputing.device.scanner.ScannerIOMetadata;
import uk.co.mmscomputing.device.scanner.ScannerListener;
import uk.co.mmscomputing.device.twain.*;
import com.itextpdf.text.Document;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfDocument;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.text.pdf.RandomAccessFileOrArray;
import com.itextpdf.text.pdf.codec.TiffImage;
import com.thoughtworks.xstream.XStream;
import es.jscan.Beans.ProcesosBean;
import es.jscan.Beans.XmlDocumento;
import es.jscan.Beans.XmlInfo;
import es.jscan.Beans.XmlLote;
import es.jscan.utilidades.CodigoBarras;
import es.jscan.utilidades.ConexionUnica;
import es.jscan.utilidades.EscuchadorMensajes;
import es.jscan.utilidades.Utilidades;
import es.jscan.utilidades.UtilidadesPantalla;
import es.jscan.Beans.DigitaLotesBean;
import java.awt.AWTException;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.io.FileInputStream;
import java.io.FilenameFilter;
import java.io.InputStream;
import java.net.Socket;
import java.net.URI;
import javax.imageio.IIOImage;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import javax.swing.filechooser.FileFilter;

/**
 * @author julian.collado
 */
public class PantallaPrincipal extends javax.swing.JFrame implements PropertyChangeListener, ScannerListener {

    public Robot robot;
    public int SESION_LOG = 0;
    public static PantallaPrincipal ventanapadre = null;
    public ProcesosBean procesosbean = null;
    public Utilidades utilidades = new Utilidades();
    public String rutadigita = utilidades.crearDirBase();
    public String separador = utilidades.separador();
    public String lote = "";
    public String rutalote = "";
    public String rutapendiente = "";
    public String rutalog = utilidades.crearDirBase() + separador + "logs";
    public Boolean errorpdf = false;
    public Boolean errortiff = false;
    private Scanner scanner;
    public String[] listaseleccion = null;
    public String miescaner = "";
    public String titulolista = "";
    public UtilidadesPantalla pantutil = new UtilidadesPantalla();
    public int contimagen = 0;
    public PanelDibujo pd;
    private Properties propiniescaner = null;
    private Properties proplote = null;
    public JButton[] boton = new JButton[1];
    public String[] rutaboton = new String[1];
    public boolean desdemin = false;
    public int contpaginas = 0;
    public int maxpaginas = 32765;
    public String titulo = this.getTitle();
    public Boolean escaneando = false;
    public int minisel = -1;
    public int provinciausuario = 0;
    private Boolean arranque = true;
    File ficherolog = null;
    FileOutputStream fis;
    PrintStream out;
    ArrayList<JLabel> arrayLabel = new ArrayList<JLabel>();
    ArrayList<JTextField> arrayCampoTexto = new ArrayList<JTextField>();
    ArrayList<JCheckBox> arrayCheck = new ArrayList<JCheckBox>();
    ArrayList<JComboBox> arrayComboBox = new ArrayList<JComboBox>();
    ArrayList<String> listaMultiAdjuntos = new ArrayList<String>();
    Boolean multiAdjuntos = false;
    TwainCapability[] escanercap = null;
    TwainCapability contraste = null;
    TwainCapability brillo = null;
    TwainCapability resolucion = null;
    boolean escanerconfig = false;
    public static final String COMPRESSION_TYPE_GROUP4FAX = "CCITT T.6";
    public Boolean revisar = false;
    public Boolean enviar = false;
    public static int CONTCONEX = 0;
    public static Boolean DEBUG = false;
    public static Boolean MOSTRARMENSAJE = true;
    public javax.swing.Timer timer = new javax.swing.Timer(2000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            String memoria = (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024
                    + " KB / " + Runtime.getRuntime().totalMemory() / 1024 + " KB ";
            setTitle(titulo + "     -     Memoria utilizada: " + memoria);
        }
    });

    /**
     * Mdulo principal de la aplicacin PantallaPrincipal
     */
    @SuppressWarnings("LeakingThisInConstructor")
    public PantallaPrincipal() {

        ventanapadre = this;

        Calendar cal = Calendar.getInstance();
        String anio = String.valueOf(cal.get(Calendar.YEAR));
        String mes = String.valueOf((cal.get(Calendar.MONTH) + 1)).length() == 1
                ? "0" + String.valueOf((cal.get(Calendar.MONTH) + 1))
                : String.valueOf((cal.get(Calendar.MONTH) + 1));
        String dia = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH))
                : String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
        ficherolog = new File(
                rutalog + separador + "jscan-" + utilidades.ip() + "-" + dia + "-" + mes + "-" + anio + ".log");

        try {
            fis = new FileOutputStream(ficherolog, true);
            out = new PrintStream(fis);
            System.setOut(out);
        } catch (FileNotFoundException ex) {
            Utilidades.escribeLog(PantallaPrincipal.class.getName().toString() + " - " + ex.getMessage());
        }

        System.out.println();
        Utilidades.escribeLog("INICIANDO jScan\n\n");

        try {
            this.robot = new Robot();
        } catch (AWTException ex) {
            Utilidades.escribeLog("Error al crear 'robot' para PantallaPrincipal - Error " + ex.getMessage());
        }

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Utilidades.escribeLog("Resolucin de pantalla: " + screenSize.width + " x " + screenSize.height);

        if (screenSize.width < 1023) {
            utilidades.mensaje(this, "Resolucin de Pantalla no vlida",
                    "\nLa resolucin mnima requerida de la pantalla debe ser 1024 x 768\n\nLa resolucin de su pantalla es "
                            + screenSize.width + " x " + screenSize.height);
            System.exit(0);
        }

        String so = "";
        if (utilidades.so().toLowerCase().contains("windows")) {
            so = utilidades.so() + " " + utilidades.soBits();
        } else {
            so = utilidades.so();
        }

        initComponents();
        // Opciones del men "Apariencia" , por defecto se usa el Nimbus como tema visual
        opcionRBMetal.setSelected(false);
        opcionRBNimbus.setSelected(true);
        opcionRBWindows.setSelected(false);
        opcionRBWindowsClassic.setSelected(false);
        opcionRBPorDefecto.setSelected(false);
        opcionDebug.setSelected(false);
        opcionLeerLog.setText("Ver fichero de log del " + Utilidades.today());

        try {
            setIconImage(new ImageIcon(getLogo()).getImage());
        } catch (NullPointerException e) {
            Utilidades.escribeLog("\nError cargando el Logo " + e.getMessage() + "\n");
        }

        Utilidades.escribeLog("Versin de java: " + utilidades.versionJavaBits());

        //        if (!utilidades.versionJavaBits().equals("x86") && utilidades.so().toLowerCase().contains("windows")) {
        //            utilidades.mensaje(this, "Error de versin de runtime de Java", "La versin de runtime de Java debe ser de 32 Bits");
        //            System.exit(0);
        //        }

        Utilidades.escribeLog(
                "Espacio disponible en disco: " + (utilidades.discoLibre(rutadigita) / 1024 / 1024) + " MB");
        // Espacio mnimo en disco 1GB (1073741824 bytes)
        if (utilidades.discoLibre(rutadigita) < (1073741824l)) {
            utilidades.mensaje(this, "Espacio insuficiente en disco",
                    "  Espacio insuficiente en el directorio de trabajo:\n  " + rutadigita
                            + "\n\n  Espacio disponible: " + (utilidades.discoLibre(rutadigita) / 1024 / 1024)
                            + " MB\n" + "  Espacio mnimo necesario: " + (1073741824l) / 1024 / 1024 + " MB");
            System.exit(0);
        }

        setLocationRelativeTo(null);

        try {
            InputStream in = Acercade.class.getClassLoader()
                    .getResourceAsStream("es/jscan/Pantallas/propiedades/version.txt");
            if (in == null && DEBUG) {
                Utilidades.escribeLog("No existe el fichero 'version.txt'");
            }
            Properties pro = new java.util.Properties();
            pro.load(in);

            this.setTitle(pro.getProperty("nombre") + " " + pro.getProperty("version"));
        } catch (Exception ex) {
            Utilidades.escribeLog("Error al cargar el fichero version.txt. Error: " + ex.getMessage());
        }

        titulo = getTitle();
        timer.start();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        scrollImagenes = new javax.swing.JScrollPane();
        panelImagenes = new javax.swing.JPanel();
        panelVisorImagen = new javax.swing.JScrollPane();
        panelImagen = new javax.swing.JPanel();
        panelIconosImagen = new javax.swing.JPanel();
        zoomMas = new javax.swing.JButton();
        zoomMenos = new javax.swing.JButton();
        zoom100 = new javax.swing.JButton();
        ajustarAncho = new javax.swing.JButton();
        rotar = new javax.swing.JButton();
        botonCB = new javax.swing.JButton();
        guardarImagen = new javax.swing.JButton();
        borrarImagen = new javax.swing.JButton();
        botonCB2D = new javax.swing.JButton();
        botonCrearBidi = new javax.swing.JButton();
        panelVisorMini = new javax.swing.JScrollPane();
        panelMini = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        labelPagina = new javax.swing.JLabel();
        labelde = new javax.swing.JLabel();
        labelTotalPaginas = new javax.swing.JLabel();
        labelNumPaginas = new javax.swing.JLabel();
        scrollConfigura = new javax.swing.JScrollPane();
        panelConfigura = new javax.swing.JPanel();
        panelAccion = new javax.swing.JLayeredPane();
        botonDigitalizar = new javax.swing.JButton();
        botonImportar = new javax.swing.JButton();
        panelEscaner = new javax.swing.JLayeredPane();
        botonSelEscaner = new javax.swing.JButton();
        comboColor = new javax.swing.JComboBox();
        comboResolucion = new javax.swing.JComboBox();
        checkDuplex = new javax.swing.JCheckBox();
        nombreEscaner = new javax.swing.JTextField();
        sliderBrillo = new javax.swing.JSlider();
        labelContraste = new javax.swing.JLabel();
        sliderContraste = new javax.swing.JSlider();
        labelBrillo = new javax.swing.JLabel();
        labelBrillo1 = new javax.swing.JLabel();
        labelBrillo2 = new javax.swing.JLabel();
        botonEnviar = new javax.swing.JButton();
        botonGuardar = new javax.swing.JButton();
        botonEliminar = new javax.swing.JButton();
        panelValores = new javax.swing.JLayeredPane();
        jLabel1 = new javax.swing.JLabel();
        textoFichero = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        textoDirectorio = new javax.swing.JTextField();
        botonDirectorio = new javax.swing.JToggleButton();
        comboTipoFichero = new javax.swing.JComboBox();
        jScrollPane2 = new javax.swing.JScrollPane();
        etiquetaCB = new javax.swing.JTextArea();
        jMenuPrincipal = new javax.swing.JMenuBar();
        opcionOpciones = new javax.swing.JMenu();
        opcionDigitalizar = new javax.swing.JMenuItem();
        opcionImportar = new javax.swing.JMenuItem();
        jSeparator4 = new javax.swing.JPopupMenu.Separator();
        opcionSelEscaner = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        opcionCerrar = new javax.swing.JMenuItem();
        Lotes = new javax.swing.JMenu();
        opcionEnviarLote = new javax.swing.JMenuItem();
        opcionGuardarLote = new javax.swing.JMenuItem();
        opcionBorrarLote = new javax.swing.JMenuItem();
        jSeparator2 = new javax.swing.JPopupMenu.Separator();
        opcionLotes = new javax.swing.JMenuItem();
        Imagen = new javax.swing.JMenu();
        opcionzoommas = new javax.swing.JMenuItem();
        opcionzoommenos = new javax.swing.JMenuItem();
        opcionzoom100 = new javax.swing.JMenuItem();
        opcionancho = new javax.swing.JMenuItem();
        opcionrotar = new javax.swing.JMenuItem();
        opcionguardarimagen = new javax.swing.JMenuItem();
        opcionborrarimagen = new javax.swing.JMenuItem();
        opcionUtilidades = new javax.swing.JMenu();
        opcionLeerLog = new javax.swing.JMenuItem();
        jSeparator3 = new javax.swing.JPopupMenu.Separator();
        opcionDebug = new javax.swing.JCheckBoxMenuItem();
        opcionApariencia = new javax.swing.JMenu();
        opcionRBMetal = new javax.swing.JRadioButtonMenuItem();
        opcionRBNimbus = new javax.swing.JRadioButtonMenuItem();
        opcionRBWindows = new javax.swing.JRadioButtonMenuItem();
        opcionRBWindowsClassic = new javax.swing.JRadioButtonMenuItem();
        opcionRBPorDefecto = new javax.swing.JRadioButtonMenuItem();
        jSeparator6 = new javax.swing.JPopupMenu.Separator();
        opcionMaximizar = new javax.swing.JCheckBoxMenuItem();
        opcionAcerca = new javax.swing.JMenu();
        opcionManual = new javax.swing.JMenuItem();
        jSeparator5 = new javax.swing.JPopupMenu.Separator();
        opcionLicenciaApache = new javax.swing.JMenuItem();
        opcionLicenciaItext = new javax.swing.JMenuItem();
        opcionLicenciaXStream = new javax.swing.JMenuItem();
        jSeparator7 = new javax.swing.JPopupMenu.Separator();
        opcionAbout = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        setTitle("Digitalizacin v1.0 100");
        setBackground(new java.awt.Color(255, 255, 255));
        setMaximumSize(new java.awt.Dimension(1024, 768));
        setMinimumSize(new java.awt.Dimension(1024, 768));
        setName("JFramePrincipal"); // NOI18N
        setPreferredSize(new java.awt.Dimension(1024, 768));
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                formWindowClosing(evt);
            }

            public void windowOpened(java.awt.event.WindowEvent evt) {
                formWindowOpened(evt);
            }
        });
        addComponentListener(new java.awt.event.ComponentAdapter() {
            public void componentResized(java.awt.event.ComponentEvent evt) {
                formComponentResized(evt);
            }
        });

        scrollImagenes.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollImagenes.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);

        panelImagenes.setAutoscrolls(true);
        panelImagenes.setPreferredSize(new java.awt.Dimension(700, scrollImagenes.getHeight() - 21));

        panelVisorImagen.setBackground(new java.awt.Color(255, 255, 255));
        panelVisorImagen.setAutoscrolls(true);
        panelVisorImagen.setName("VisorImagen"); // NOI18N
        panelVisorImagen.setOpaque(false);
        panelVisorImagen.setPreferredSize(new java.awt.Dimension(panelIconosImagen.getWidth(),
                panelImagenes.getHeight() - panelIconosImagen.getHeight() - 25));

        panelImagen.setBackground(new java.awt.Color(255, 255, 255));
        panelImagen.setAutoscrolls(true);
        panelImagen.setPreferredSize(
                new java.awt.Dimension(panelVisorImagen.getWidth(), panelVisorImagen.getHeight() - 20));

        javax.swing.GroupLayout panelImagenLayout = new javax.swing.GroupLayout(panelImagen);
        panelImagen.setLayout(panelImagenLayout);
        panelImagenLayout.setHorizontalGroup(panelImagenLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 537, Short.MAX_VALUE));
        panelImagenLayout.setVerticalGroup(panelImagenLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 675, Short.MAX_VALUE));

        panelVisorImagen.setViewportView(panelImagen);

        panelIconosImagen
                .setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
        panelIconosImagen.setMaximumSize(new java.awt.Dimension(4, 32767));
        panelIconosImagen.setMinimumSize(new java.awt.Dimension(4, 51));
        panelIconosImagen.setPreferredSize(new java.awt.Dimension(panelVisorImagen.getWidth(), 50));

        zoomMas.setToolTipText("Aumenta el tamao de la Imagen");
        zoomMas.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        zoomMas.setMaximumSize(new java.awt.Dimension(43, 43));
        zoomMas.setMinimumSize(new java.awt.Dimension(43, 43));
        zoomMas.setPreferredSize(new java.awt.Dimension(43, 43));
        zoomMas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                zoomMasActionPerformed(evt);
            }
        });

        zoomMenos.setToolTipText("Reduce el tamao de la Imagen");
        zoomMenos.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        zoomMenos.setMaximumSize(new java.awt.Dimension(43, 43));
        zoomMenos.setMinimumSize(new java.awt.Dimension(43, 43));
        zoomMenos.setPreferredSize(new java.awt.Dimension(43, 43));
        zoomMenos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                zoomMenosActionPerformed(evt);
            }
        });

        zoom100.setFont(new java.awt.Font("Tahoma", 1, 8)); // NOI18N
        zoom100.setToolTipText("Imagen al tamao real (100 %)");
        zoom100.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        zoom100.setMaximumSize(new java.awt.Dimension(43, 43));
        zoom100.setMinimumSize(new java.awt.Dimension(43, 43));
        zoom100.setPreferredSize(new java.awt.Dimension(43, 43));
        zoom100.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                zoom100ActionPerformed(evt);
            }
        });

        ajustarAncho.setFont(new java.awt.Font("Tahoma", 1, 8)); // NOI18N
        ajustarAncho.setToolTipText("Imagen ajustada al ancho de la Pgina");
        ajustarAncho.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        ajustarAncho.setMaximumSize(new java.awt.Dimension(43, 43));
        ajustarAncho.setMinimumSize(new java.awt.Dimension(43, 43));
        ajustarAncho.setPreferredSize(new java.awt.Dimension(43, 43));
        ajustarAncho.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ajustarAnchoActionPerformed(evt);
            }
        });

        rotar.setFont(new java.awt.Font("Tahoma", 1, 8)); // NOI18N
        rotar.setToolTipText("Rotar imgen 90 a la derecha");
        rotar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        rotar.setMaximumSize(new java.awt.Dimension(43, 43));
        rotar.setMinimumSize(new java.awt.Dimension(43, 43));
        rotar.setPreferredSize(new java.awt.Dimension(43, 43));
        rotar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                rotarActionPerformed(evt);
            }
        });

        botonCB.setToolTipText("Detecta el cdigo de barras CODE128 de la imgen");
        botonCB.setBorder(null);
        botonCB.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonCB.setMaximumSize(new java.awt.Dimension(43, 43));
        botonCB.setMinimumSize(new java.awt.Dimension(43, 43));
        botonCB.setPreferredSize(new java.awt.Dimension(43, 43));
        botonCB.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCBActionPerformed(evt);
            }
        });

        guardarImagen.setFont(new java.awt.Font("Tahoma", 1, 8)); // NOI18N
        guardarImagen.setToolTipText("Posibilita guardar la imgen despus de rotarla");
        guardarImagen.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        guardarImagen.setMaximumSize(new java.awt.Dimension(43, 43));
        guardarImagen.setMinimumSize(new java.awt.Dimension(43, 43));
        guardarImagen.setPreferredSize(new java.awt.Dimension(43, 43));
        guardarImagen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                guardarImagenActionPerformed(evt);
            }
        });

        borrarImagen.setFont(new java.awt.Font("Tahoma", 1, 8)); // NOI18N
        borrarImagen.setToolTipText("Borra la imgen que se est visualizando");
        borrarImagen.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        borrarImagen.setMaximumSize(new java.awt.Dimension(43, 43));
        borrarImagen.setMinimumSize(new java.awt.Dimension(43, 43));
        borrarImagen.setPreferredSize(new java.awt.Dimension(43, 43));
        borrarImagen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                borrarImagenActionPerformed(evt);
            }
        });

        botonCB2D.setToolTipText("Detecta el cdigo de barras de la imgen");
        botonCB2D.setBorder(null);
        botonCB2D.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonCB2D.setMaximumSize(new java.awt.Dimension(43, 43));
        botonCB2D.setMinimumSize(new java.awt.Dimension(43, 43));
        botonCB2D.setPreferredSize(new java.awt.Dimension(43, 43));
        botonCB2D.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCB2DActionPerformed(evt);
            }
        });

        botonCrearBidi.setToolTipText("Genera una imgen de un cdigo QR a partir de un texto");
        botonCrearBidi.setBorder(null);
        botonCrearBidi.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonCrearBidi.setMaximumSize(new java.awt.Dimension(43, 43));
        botonCrearBidi.setMinimumSize(new java.awt.Dimension(43, 43));
        botonCrearBidi.setPreferredSize(new java.awt.Dimension(43, 43));
        botonCrearBidi.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCrearBidiActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout panelIconosImagenLayout = new javax.swing.GroupLayout(panelIconosImagen);
        panelIconosImagen.setLayout(panelIconosImagenLayout);
        panelIconosImagenLayout.setHorizontalGroup(panelIconosImagenLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(panelIconosImagenLayout.createSequentialGroup()
                        .addComponent(zoomMas, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(zoomMenos, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(zoom100, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(ajustarAncho, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(rotar, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(guardarImagen, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(borrarImagen, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(botonCrearBidi, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCB2D, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(botonCB, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap()));

        panelIconosImagenLayout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
                new java.awt.Component[] { ajustarAncho, rotar });

        panelIconosImagenLayout.setVerticalGroup(panelIconosImagenLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(panelIconosImagenLayout.createSequentialGroup().addGroup(panelIconosImagenLayout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                        .addComponent(zoomMas, javax.swing.GroupLayout.DEFAULT_SIZE, 45, Short.MAX_VALUE)
                        .addComponent(zoomMenos, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(zoom100, javax.swing.GroupLayout.DEFAULT_SIZE, 45, Short.MAX_VALUE)
                        .addComponent(ajustarAncho, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(rotar, javax.swing.GroupLayout.DEFAULT_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(guardarImagen, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(borrarImagen, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(botonCB, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(botonCB2D, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(botonCrearBidi, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(2, 2, 2)));

        panelIconosImagenLayout.linkSize(javax.swing.SwingConstants.VERTICAL,
                new java.awt.Component[] { ajustarAncho, rotar });

        panelVisorMini.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        panelVisorMini.setAutoscrolls(true);
        panelVisorMini.setMaximumSize(new java.awt.Dimension(186, 32767));
        panelVisorMini.setMinimumSize(new java.awt.Dimension(186, 700));
        panelVisorMini.setName("panelVisorMini"); // NOI18N
        panelVisorMini.setPreferredSize(new java.awt.Dimension(186, 700));

        panelMini.setBorder(javax.swing.BorderFactory.createCompoundBorder(null,
                javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))));
        panelMini.setAutoscrolls(true);
        panelMini.setMaximumSize(new java.awt.Dimension(182, 32767));
        panelMini.setMinimumSize(new java.awt.Dimension(182, 690));
        panelMini.setPreferredSize(new java.awt.Dimension(182, 690));
        panelMini.setVerifyInputWhenFocusTarget(false);

        javax.swing.GroupLayout panelMiniLayout = new javax.swing.GroupLayout(panelMini);
        panelMini.setLayout(panelMiniLayout);
        panelMiniLayout.setHorizontalGroup(panelMiniLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 180, Short.MAX_VALUE));
        panelMiniLayout.setVerticalGroup(panelMiniLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addGap(0, 688, Short.MAX_VALUE));

        panelVisorMini.setViewportView(panelMini);

        jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        jPanel1.setMaximumSize(new java.awt.Dimension(185, 51));
        jPanel1.setMinimumSize(new java.awt.Dimension(185, 51));
        jPanel1.setRequestFocusEnabled(false);

        labelPagina.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        labelPagina.setForeground(new java.awt.Color(0, 0, 102));
        labelPagina.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        labelPagina.setText("Pgina");
        labelPagina.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        labelPagina.setMaximumSize(new java.awt.Dimension(50, 25));
        labelPagina.setMinimumSize(new java.awt.Dimension(50, 25));
        labelPagina.setPreferredSize(new java.awt.Dimension(50, 25));
        labelPagina.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);

        labelde.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        labelde.setForeground(new java.awt.Color(0, 0, 102));
        labelde.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        labelde.setText("de");
        labelde.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);

        labelTotalPaginas.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        labelTotalPaginas.setForeground(new java.awt.Color(0, 0, 102));
        labelTotalPaginas.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        labelTotalPaginas.setText("0");
        labelTotalPaginas.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);

        labelNumPaginas.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        labelNumPaginas.setForeground(new java.awt.Color(0, 0, 102));
        labelNumPaginas.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        labelNumPaginas.setText("0");
        labelNumPaginas.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout
                .setHorizontalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(jPanel1Layout.createSequentialGroup().addContainerGap()
                                .addComponent(labelPagina, javax.swing.GroupLayout.PREFERRED_SIZE, 50,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(labelNumPaginas, javax.swing.GroupLayout.PREFERRED_SIZE, 28,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(labelde, javax.swing.GroupLayout.PREFERRED_SIZE, 28,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(labelTotalPaginas, javax.swing.GroupLayout.PREFERRED_SIZE, 28,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addContainerGap(15, Short.MAX_VALUE)));

        jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL,
                new java.awt.Component[] { labelNumPaginas, labelTotalPaginas, labelde });

        jPanel1Layout
                .setVerticalGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                jPanel1Layout.createSequentialGroup().addContainerGap().addGroup(jPanel1Layout
                                        .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                        .addComponent(labelPagina, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(labelde, javax.swing.GroupLayout.DEFAULT_SIZE,
                                                javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(labelNumPaginas, javax.swing.GroupLayout.DEFAULT_SIZE, 25,
                                                Short.MAX_VALUE)
                                        .addComponent(labelTotalPaginas, javax.swing.GroupLayout.DEFAULT_SIZE, 25,
                                                Short.MAX_VALUE))
                                        .addContainerGap()));

        jPanel1Layout.linkSize(javax.swing.SwingConstants.VERTICAL,
                new java.awt.Component[] { labelNumPaginas, labelTotalPaginas, labelde });

        javax.swing.GroupLayout panelImagenesLayout = new javax.swing.GroupLayout(panelImagenes);
        panelImagenes.setLayout(panelImagenesLayout);
        panelImagenesLayout.setHorizontalGroup(panelImagenesLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(panelImagenesLayout.createSequentialGroup().addGap(0, 0, 0)
                        .addGroup(panelImagenesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(panelIconosImagen, javax.swing.GroupLayout.DEFAULT_SIZE, 539,
                                        Short.MAX_VALUE)
                                .addComponent(panelVisorImagen, javax.swing.GroupLayout.Alignment.TRAILING,
                                        javax.swing.GroupLayout.DEFAULT_SIZE, 539, Short.MAX_VALUE))
                        .addGap(6, 6, 6)
                        .addGroup(panelImagenesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(panelVisorMini, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))));
        panelImagenesLayout.setVerticalGroup(panelImagenesLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(panelImagenesLayout.createSequentialGroup()
                        .addGroup(panelImagenesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(panelIconosImagen, javax.swing.GroupLayout.PREFERRED_SIZE, 51,
                                        javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE,
                                        javax.swing.GroupLayout.DEFAULT_SIZE,
                                        javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(panelImagenesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addComponent(panelVisorMini, javax.swing.GroupLayout.PREFERRED_SIZE, 0,
                                        Short.MAX_VALUE)
                                .addComponent(panelVisorImagen, javax.swing.GroupLayout.DEFAULT_SIZE, 677,
                                        Short.MAX_VALUE))
                        .addContainerGap()));

        panelImagenesLayout.linkSize(javax.swing.SwingConstants.VERTICAL,
                new java.awt.Component[] { jPanel1, panelIconosImagen });

        panelVisorImagen.getAccessibleContext().setAccessibleName("");

        scrollImagenes.setViewportView(panelImagenes);

        scrollConfigura.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
        scrollConfigura.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);
        scrollConfigura.setName("scrollConfigura"); // NOI18N

        panelConfigura.setPreferredSize(new java.awt.Dimension(287, 690));

        panelAccion.setBorder(javax.swing.BorderFactory.createTitledBorder(null, " Accin ",
                javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP,
                new java.awt.Font("Tahoma", 1, 14), new java.awt.Color(0, 0, 102))); // NOI18N
        panelAccion.setName("panelAccion"); // NOI18N

        botonDigitalizar.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        botonDigitalizar.setText("Digitalizar");
        botonDigitalizar.setToolTipText("Escanear documentos");
        botonDigitalizar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonDigitalizar.setMaximumSize(new java.awt.Dimension(79, 50));
        botonDigitalizar.setMinimumSize(new java.awt.Dimension(79, 50));
        botonDigitalizar.setPreferredSize(new java.awt.Dimension(79, 50));
        botonDigitalizar.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        botonDigitalizar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonDigitalizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonDigitalizarActionPerformed(evt);
            }
        });
        botonDigitalizar.setBounds(10, 22, 100, 50);
        panelAccion.add(botonDigitalizar, javax.swing.JLayeredPane.DEFAULT_LAYER);

        botonImportar.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        botonImportar.setText("Importar Imagen");
        botonImportar.setToolTipText(
                "<html>\nPermite importar imgenes de ficheros del tipo <b>GIF,JPG,JPEG,BMP,PNG,TIF,TIFF y PDF</b>");
        botonImportar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonImportar.setMaximumSize(new java.awt.Dimension(113, 50));
        botonImportar.setMinimumSize(new java.awt.Dimension(113, 50));
        botonImportar.setPreferredSize(new java.awt.Dimension(113, 50));
        botonImportar.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        botonImportar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonImportar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonImportarActionPerformed(evt);
            }
        });
        botonImportar.setBounds(122, 22, 138, 50);
        panelAccion.add(botonImportar, javax.swing.JLayeredPane.DEFAULT_LAYER);

        panelEscaner.setBorder(javax.swing.BorderFactory.createTitledBorder(null, " Escner ",
                javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP,
                new java.awt.Font("Tahoma", 1, 14), new java.awt.Color(0, 0, 102))); // NOI18N
        panelEscaner.setName("PanelAccion"); // NOI18N

        botonSelEscaner.setText("Seleccionar");
        botonSelEscaner.setToolTipText("Seleccionar Escaner");
        botonSelEscaner.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSelEscanerActionPerformed(evt);
            }
        });
        botonSelEscaner.setBounds(10, 20, 126, 23);
        panelEscaner.add(botonSelEscaner, javax.swing.JLayeredPane.DEFAULT_LAYER);

        comboColor.setModel(
                new javax.swing.DefaultComboBoxModel(new String[] { "Blanco y Negro", "Escala de Grises" }));
        comboColor.setToolTipText("Escanear en Blanco y Negro o en Escala de Grises");
        comboColor.setName("ComboAccion"); // NOI18N
        comboColor.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                comboColorItemStateChanged(evt);
            }
        });
        comboColor.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                comboColorActionPerformed(evt);
            }
        });
        comboColor.setBounds(100, 88, 160, 20);
        panelEscaner.add(comboColor, javax.swing.JLayeredPane.DEFAULT_LAYER);

        comboResolucion.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "200", "400", "600" }));
        comboResolucion.setToolTipText("Resolucin a la que se Escanea");
        comboResolucion.setName("ComboAccion"); // NOI18N
        comboResolucion.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                comboResolucionItemStateChanged(evt);
            }
        });
        comboResolucion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                comboResolucionActionPerformed(evt);
            }
        });
        comboResolucion.setBounds(142, 118, 118, 20);
        panelEscaner.add(comboResolucion, javax.swing.JLayeredPane.DEFAULT_LAYER);

        checkDuplex.setText("Duplex");
        checkDuplex.setToolTipText("Si se chequea escanea a doble cara. (si lo soporta el escner)");
        checkDuplex.setName("checkDuplex"); // NOI18N
        checkDuplex.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                checkDuplexStateChanged(evt);
            }
        });
        checkDuplex.setBounds(176, 20, 82, 23);
        panelEscaner.add(checkDuplex, javax.swing.JLayeredPane.DEFAULT_LAYER);

        nombreEscaner.setEditable(false);
        nombreEscaner.setMaximumSize(new java.awt.Dimension(97, 25));
        nombreEscaner.setMinimumSize(new java.awt.Dimension(97, 25));
        nombreEscaner.setName("nombreEscaner"); // NOI18N
        nombreEscaner.setPreferredSize(new java.awt.Dimension(97, 25));
        nombreEscaner.setRequestFocusEnabled(false);
        nombreEscaner.setBounds(10, 50, 250, 25);
        panelEscaner.add(nombreEscaner, javax.swing.JLayeredPane.DEFAULT_LAYER);

        sliderBrillo.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        sliderBrillo.setToolTipText("Seleccin del Brillo al Escanear");
        sliderBrillo.setMaximumSize(new java.awt.Dimension(180, 35));
        sliderBrillo.setMinimumSize(new java.awt.Dimension(180, 35));
        sliderBrillo.setPreferredSize(new java.awt.Dimension(180, 35));
        sliderBrillo.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                sliderBrilloStateChanged(evt);
            }
        });
        sliderBrillo.setBounds(80, 140, 180, 40);
        panelEscaner.add(sliderBrillo, javax.swing.JLayeredPane.DEFAULT_LAYER);

        labelContraste.setText("Contraste");
        labelContraste.setBounds(16, 180, 58, 18);
        panelEscaner.add(labelContraste, javax.swing.JLayeredPane.DEFAULT_LAYER);

        sliderContraste.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        sliderContraste.setToolTipText("Seleccin del Contraste al Escanear");
        sliderContraste.setMaximumSize(new java.awt.Dimension(180, 35));
        sliderContraste.setMinimumSize(new java.awt.Dimension(180, 35));
        sliderContraste.setPreferredSize(new java.awt.Dimension(180, 35));
        sliderContraste.setValueIsAdjusting(true);
        sliderContraste.addChangeListener(new javax.swing.event.ChangeListener() {
            public void stateChanged(javax.swing.event.ChangeEvent evt) {
                sliderContrasteStateChanged(evt);
            }
        });
        sliderContraste.setBounds(80, 170, 180, 40);
        panelEscaner.add(sliderContraste, javax.swing.JLayeredPane.DEFAULT_LAYER);

        labelBrillo.setText("Modo");
        labelBrillo.setBounds(16, 88, 76, 18);
        panelEscaner.add(labelBrillo, javax.swing.JLayeredPane.DEFAULT_LAYER);

        labelBrillo1.setText("Brillo");
        labelBrillo1.setBounds(16, 148, 44, 18);
        panelEscaner.add(labelBrillo1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        labelBrillo2.setText("Resolucin (PPP)");
        labelBrillo2.setBounds(16, 118, 112, 18);
        panelEscaner.add(labelBrillo2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        botonEnviar.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        botonEnviar.setText("Guardar");
        botonEnviar.setToolTipText("Genera y envia el Lote de imgenes al Gestor Documental");
        botonEnviar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonEnviar.setMaximumSize(new java.awt.Dimension(85, 65));
        botonEnviar.setMinimumSize(new java.awt.Dimension(85, 65));
        botonEnviar.setName("botonEnviar"); // NOI18N
        botonEnviar.setOpaque(false);
        botonEnviar.setPreferredSize(new java.awt.Dimension(85, 65));
        botonEnviar.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        botonEnviar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonEnviar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEnviarActionPerformed(evt);
            }
        });

        botonGuardar.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        botonGuardar.setText("Actualizar");
        botonGuardar.setToolTipText(
                "<html>\nGuardar el Lote de imgenes.\n<br>Actualiza el nmero de pginas del lote. ");
        botonGuardar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonGuardar.setMaximumSize(new java.awt.Dimension(85, 65));
        botonGuardar.setMinimumSize(new java.awt.Dimension(85, 65));
        botonGuardar.setName("botonGuardar"); // NOI18N
        botonGuardar.setOpaque(false);
        botonGuardar.setPreferredSize(new java.awt.Dimension(85, 65));
        botonGuardar.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        botonGuardar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonGuardarActionPerformed(evt);
            }
        });

        botonEliminar.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        botonEliminar.setText("Eliminar");
        botonEliminar.setToolTipText("Eliminar el Lote de imgenes actual");
        botonEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        botonEliminar.setMaximumSize(new java.awt.Dimension(85, 65));
        botonEliminar.setMinimumSize(new java.awt.Dimension(85, 65));
        botonEliminar.setOpaque(false);
        botonEliminar.setPreferredSize(new java.awt.Dimension(85, 65));
        botonEliminar.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        botonEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        botonEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEliminarActionPerformed(evt);
            }
        });

        panelValores.setBorder(javax.swing.BorderFactory.createTitledBorder(null, " Valores  ",
                javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP,
                new java.awt.Font("Tahoma", 1, 14), new java.awt.Color(0, 0, 102))); // NOI18N
        panelValores.setName("panelValores"); // NOI18N

        jLabel1.setText("Nombre del Fichero (sin extensin)");
        jLabel1.setBounds(10, 98, 210, 14);
        panelValores.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        textoFichero.setMaximumSize(new java.awt.Dimension(250, 25));
        textoFichero.setMinimumSize(new java.awt.Dimension(250, 25));
        textoFichero.setPreferredSize(new java.awt.Dimension(250, 25));
        textoFichero.setBounds(8, 116, 250, 25);
        panelValores.add(textoFichero, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel2.setText("Directorio de destino");
        jLabel2.setBounds(10, 32, 176, 16);
        panelValores.add(jLabel2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        textoDirectorio.setEditable(false);
        textoDirectorio.setBackground(new java.awt.Color(255, 255, 255));
        textoDirectorio.setMinimumSize(new java.awt.Dimension(215, 25));
        textoDirectorio.setPreferredSize(new java.awt.Dimension(215, 25));
        textoDirectorio.setBounds(8, 56, 215, 25);
        panelValores.add(textoDirectorio, javax.swing.JLayeredPane.DEFAULT_LAYER);

        botonDirectorio.setIcon(
                new javax.swing.ImageIcon(getClass().getResource("/es/jscan/Pantallas/imagenes/carpeta.png"))); // NOI18N
        botonDirectorio.setMaximumSize(new java.awt.Dimension(32, 32));
        botonDirectorio.setMinimumSize(new java.awt.Dimension(32, 32));
        botonDirectorio.setPreferredSize(new java.awt.Dimension(32, 32));
        botonDirectorio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonDirectorioActionPerformed(evt);
            }
        });
        botonDirectorio.setBounds(226, 53, 32, 32);
        panelValores.add(botonDirectorio, javax.swing.JLayeredPane.DEFAULT_LAYER);

        comboTipoFichero.setModel(new javax.swing.DefaultComboBoxModel(
                new String[] { "PDF Multipgina", "TIFF Multipgina", "JPG", "GIF", "PNG", "BMP" }));
        comboTipoFichero.setMaximumSize(new java.awt.Dimension(250, 25));
        comboTipoFichero.setMinimumSize(new java.awt.Dimension(250, 25));
        comboTipoFichero.setPreferredSize(new java.awt.Dimension(250, 25));
        comboTipoFichero.setBounds(8, 162, 250, 25);
        panelValores.add(comboTipoFichero, javax.swing.JLayeredPane.DEFAULT_LAYER);

        etiquetaCB.setEditable(false);
        etiquetaCB.setColumns(2);
        etiquetaCB.setLineWrap(true);
        etiquetaCB.setRows(2);
        etiquetaCB.setWrapStyleWord(true);
        jScrollPane2.setViewportView(etiquetaCB);

        javax.swing.GroupLayout panelConfiguraLayout = new javax.swing.GroupLayout(panelConfigura);
        panelConfigura.setLayout(panelConfiguraLayout);
        panelConfiguraLayout.setHorizontalGroup(panelConfiguraLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(panelConfiguraLayout.createSequentialGroup().addContainerGap()
                        .addGroup(panelConfiguraLayout
                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                .addGroup(panelConfiguraLayout.createSequentialGroup()
                                        .addGroup(panelConfiguraLayout
                                                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                                .addComponent(panelAccion, javax.swing.GroupLayout.Alignment.CENTER)
                                                .addComponent(panelEscaner,
                                                        javax.swing.GroupLayout.Alignment.TRAILING)
                                                .addComponent(panelValores))
                                        .addContainerGap())
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
                                        panelConfiguraLayout.createSequentialGroup().addGap(0, 0, Short.MAX_VALUE)
                                                .addComponent(botonEnviar, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        85, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(botonGuardar, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        85, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                                .addComponent(botonEliminar, javax.swing.GroupLayout.PREFERRED_SIZE,
                                                        85, javax.swing.GroupLayout.PREFERRED_SIZE)
                                                .addGap(10, 10, 10))
                                .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelConfiguraLayout
                                        .createSequentialGroup().addComponent(jScrollPane2).addContainerGap()))));
        panelConfiguraLayout.setVerticalGroup(panelConfiguraLayout
                .createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(panelConfiguraLayout.createSequentialGroup().addGroup(panelConfiguraLayout
                        .createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(botonGuardar, javax.swing.GroupLayout.Alignment.LEADING,
                                javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                        .addComponent(botonEnviar, javax.swing.GroupLayout.Alignment.LEADING,
                                javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(botonEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(panelAccion, javax.swing.GroupLayout.PREFERRED_SIZE, 82,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(panelEscaner, javax.swing.GroupLayout.PREFERRED_SIZE, 214,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(panelValores, javax.swing.GroupLayout.PREFERRED_SIZE, 213,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 82,
                                javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(70, Short.MAX_VALUE)));

        panelAccion.getAccessibleContext().setAccessibleName("PanelAccion");
        panelValores.getAccessibleContext().setAccessibleName(" Procesos ");

        scrollConfigura.setViewportView(panelConfigura);

        opcionOpciones.setMnemonic('O');
        opcionOpciones.setText("Opciones");
        opcionOpciones.setName("opcionOpciones"); // NOI18N

        opcionDigitalizar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_D,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionDigitalizar.setText("Digitalizar");
        opcionDigitalizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionDigitalizarActionPerformed(evt);
            }
        });
        opcionOpciones.add(opcionDigitalizar);

        opcionImportar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_I,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionImportar.setText("Importar Imgenes");
        opcionImportar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionImportarActionPerformed(evt);
            }
        });
        opcionOpciones.add(opcionImportar);
        opcionOpciones.add(jSeparator4);

        opcionSelEscaner.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_E,
                java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        opcionSelEscaner.setText("Seleccionar Escner");
        opcionSelEscaner.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionSelEscanerActionPerformed(evt);
            }
        });
        opcionOpciones.add(opcionSelEscaner);
        opcionOpciones.add(jSeparator1);

        opcionCerrar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_ESCAPE, 0));
        opcionCerrar.setText("Cerrar");
        opcionCerrar.setToolTipText("Cerrar la Aplicacin");
        opcionCerrar.setActionCommand("");
        opcionCerrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionCerrarActionPerformed(evt);
            }
        });
        opcionOpciones.add(opcionCerrar);

        jMenuPrincipal.add(opcionOpciones);

        Lotes.setMnemonic('L');
        Lotes.setText("Lotes de Imgenes ");

        opcionEnviarLote.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionEnviarLote.setText("Guardar Imgenes");
        opcionEnviarLote.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionEnviarLoteActionPerformed(evt);
            }
        });
        Lotes.add(opcionEnviarLote);

        opcionGuardarLote.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_A,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionGuardarLote.setText("Actualizar pginas");
        Lotes.add(opcionGuardarLote);

        opcionBorrarLote.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_DELETE,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionBorrarLote.setText("Borrar lote de Imgenes");
        opcionBorrarLote.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionBorrarLoteActionPerformed(evt);
            }
        });
        Lotes.add(opcionBorrarLote);
        Lotes.add(jSeparator2);

        opcionLotes.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_L,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionLotes.setText("Ver lote de Imgenes guardadas");
        opcionLotes.setToolTipText(
                "Muestra los Lotes Guardados (permitiendo recuperarlos) o Lotes Enviados (mostrando su estado actual)");
        opcionLotes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionLotesActionPerformed(evt);
            }
        });
        Lotes.add(opcionLotes);

        jMenuPrincipal.add(Lotes);

        Imagen.setMnemonic('I');
        Imagen.setText("Imgenes");

        opcionzoommas.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_PLUS,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionzoommas.setText("Zoom +");
        opcionzoommas.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionzoommasActionPerformed(evt);
            }
        });
        Imagen.add(opcionzoommas);

        opcionzoommenos.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_MINUS,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionzoommenos.setText("Zoom -");
        opcionzoommenos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionzoommenosActionPerformed(evt);
            }
        });
        Imagen.add(opcionzoommenos);

        opcionzoom100.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_0,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionzoom100.setText("Zoom 100%");
        opcionzoom100.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionzoom100ActionPerformed(evt);
            }
        });
        Imagen.add(opcionzoom100);

        opcionancho.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_1,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionancho.setText("Ajustar a ancho de Pgina");
        opcionancho.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionanchoActionPerformed(evt);
            }
        });
        Imagen.add(opcionancho);

        opcionrotar.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_R,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionrotar.setText("Rotar 90 a la derecha");
        opcionrotar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionrotarActionPerformed(evt);
            }
        });
        Imagen.add(opcionrotar);

        opcionguardarimagen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_G,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionguardarimagen.setText("Guardar Imagen rotada");
        opcionguardarimagen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionguardarimagenActionPerformed(evt);
            }
        });
        Imagen.add(opcionguardarimagen);

        opcionborrarimagen.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_B,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionborrarimagen.setText("Borrar Imagen");
        opcionborrarimagen.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionborrarimagenActionPerformed(evt);
            }
        });
        Imagen.add(opcionborrarimagen);

        jMenuPrincipal.add(Imagen);

        opcionUtilidades.setMnemonic('U');
        opcionUtilidades.setText("Utilidades");

        opcionLeerLog.setText("Ver fichero de log");
        opcionLeerLog.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionLeerLogActionPerformed(evt);
            }
        });
        opcionUtilidades.add(opcionLeerLog);
        opcionUtilidades.add(jSeparator3);

        opcionDebug.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_D,
                java.awt.event.InputEvent.ALT_MASK | java.awt.event.InputEvent.CTRL_MASK));
        opcionDebug.setSelected(true);
        opcionDebug.setText("Activar Debug");
        opcionDebug.setToolTipText(
                "Se activa o desactiva el modo Debug. Aade ms informacin al fichero de Log (no slo los mensajes de error). Desactivado al arrancar la aplicacin.");
        opcionDebug.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                opcionDebugMouseClicked(evt);
            }
        });
        opcionDebug.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionDebugActionPerformed(evt);
            }
        });
        opcionUtilidades.add(opcionDebug);

        jMenuPrincipal.add(opcionUtilidades);

        opcionApariencia.setMnemonic('A');
        opcionApariencia.setText("Apariencia");

        opcionRBMetal.setSelected(true);
        opcionRBMetal.setText("Metal");
        opcionRBMetal.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionRBMetalActionPerformed(evt);
            }
        });
        opcionApariencia.add(opcionRBMetal);

        opcionRBNimbus.setSelected(true);
        opcionRBNimbus.setText("Nimbus");
        opcionRBNimbus.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionRBNimbusActionPerformed(evt);
            }
        });
        opcionApariencia.add(opcionRBNimbus);

        opcionRBWindows.setSelected(true);
        opcionRBWindows.setText("Windows");
        opcionRBWindows.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionRBWindowsActionPerformed(evt);
            }
        });
        opcionApariencia.add(opcionRBWindows);

        opcionRBWindowsClassic.setSelected(true);
        opcionRBWindowsClassic.setText("Windows Classic");
        opcionRBWindowsClassic.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionRBWindowsClassicActionPerformed(evt);
            }
        });
        opcionApariencia.add(opcionRBWindowsClassic);

        opcionRBPorDefecto.setSelected(true);
        opcionRBPorDefecto.setText("Propia del Sistema Operativo");
        opcionRBPorDefecto.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionRBPorDefectoActionPerformed(evt);
            }
        });
        opcionApariencia.add(opcionRBPorDefecto);
        opcionApariencia.add(jSeparator6);

        opcionMaximizar.setSelected(true);
        opcionMaximizar.setText("Maximizar ventana al inicio");
        opcionMaximizar.setToolTipText(
                "Si est marcado maximiza la ventana automticamente al iniciarse la aplicacin.");
        opcionMaximizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionMaximizarActionPerformed(evt);
            }
        });
        opcionApariencia.add(opcionMaximizar);

        jMenuPrincipal.add(opcionApariencia);

        opcionAcerca.setMnemonic('d');
        opcionAcerca.setText("Acerca de ...");
        opcionAcerca.setName("opcionAcerca"); // NOI18N

        opcionManual.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_M,
                java.awt.event.InputEvent.CTRL_MASK));
        opcionManual.setText("Manual de la Aplicacin");
        opcionManual.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionManualActionPerformed(evt);
            }
        });
        opcionAcerca.add(opcionManual);
        opcionAcerca.add(jSeparator5);

        opcionLicenciaApache.setText("Apache License 2.0");
        opcionLicenciaApache.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionLicenciaApacheActionPerformed(evt);
            }
        });
        opcionAcerca.add(opcionLicenciaApache);

        opcionLicenciaItext.setText("Free / Open Source Software License");
        opcionLicenciaItext.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionLicenciaItextActionPerformed(evt);
            }
        });
        opcionAcerca.add(opcionLicenciaItext);

        opcionLicenciaXStream.setText("XStream License");
        opcionLicenciaXStream.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionLicenciaXStreamActionPerformed(evt);
            }
        });
        opcionAcerca.add(opcionLicenciaXStream);
        opcionAcerca.add(jSeparator7);

        opcionAbout.setText("Acerca de ...");
        opcionAbout.setToolTipText("Informacin acerca de la Aplicacin");
        opcionAbout.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                opcionAboutActionPerformed(evt);
            }
        });
        opcionAcerca.add(opcionAbout);

        jMenuPrincipal.add(opcionAcerca);
        opcionAcerca.getAccessibleContext().setAccessibleName("OpcionAcerca");

        setJMenuBar(jMenuPrincipal);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addComponent(scrollConfigura, javax.swing.GroupLayout.PREFERRED_SIZE,
                                javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(2, 2, 2)
                        .addComponent(scrollImagenes, javax.swing.GroupLayout.DEFAULT_SIZE, 733, Short.MAX_VALUE)));
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING).addComponent(scrollImagenes)
                        .addComponent(scrollConfigura, javax.swing.GroupLayout.DEFAULT_SIZE, 747, Short.MAX_VALUE));

        scrollConfigura.getAccessibleContext().setAccessibleName("ScrollConfigura");

        getAccessibleContext().setAccessibleName("JFramePrincipal");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void opcionAboutActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionAboutActionPerformed
        mostrarAcercade();
    }//GEN-LAST:event_opcionAboutActionPerformed

    private void opcionCerrarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionCerrarActionPerformed
        cerrar();
    }//GEN-LAST:event_opcionCerrarActionPerformed

    private void formWindowOpened(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowOpened
        arranque = true;
        asignarIconos();
        inicializarAplicacion();
        arranque = false;
    }//GEN-LAST:event_formWindowOpened

    private void formWindowClosing(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_formWindowClosing
        cerrar();
    }//GEN-LAST:event_formWindowClosing

    private void formComponentResized(java.awt.event.ComponentEvent evt) {//GEN-FIRST:event_formComponentResized
    }//GEN-LAST:event_formComponentResized

    private void zoomMasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomMasActionPerformed
        if (pd != null) {
            pd.zoomMas(20);
            panelImagen.setPreferredSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.setSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.repaint();
            repaint();
            System.gc();
        }
    }//GEN-LAST:event_zoomMasActionPerformed

    private void zoomMenosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomMenosActionPerformed
        if (pd != null) {
            pd.zoomMenos(20);
            panelImagen.setPreferredSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.setSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.repaint();
            repaint();
            System.gc();
        }
    }//GEN-LAST:event_zoomMenosActionPerformed

    private void zoom100ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoom100ActionPerformed
        if (pd != null) {
            pd.zoom100();
            panelVisorImagen.setPreferredSize(new java.awt.Dimension(panelIconosImagen.getWidth(),
                    scrollImagenes.getHeight() - panelIconosImagen.getHeight() - 8));
            panelVisorImagen.setSize(new java.awt.Dimension(panelIconosImagen.getWidth(),
                    scrollImagenes.getHeight() - panelIconosImagen.getHeight() - 8));
            panelVisorImagen.repaint();
            panelImagen.setPreferredSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.setSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.repaint();
            repaint();
            System.gc();
        }
    }//GEN-LAST:event_zoom100ActionPerformed

    @Action
    private void enviar() {
        if (contimagen > 0) {
            if (comprobarValores()) {
                String tipofichero = comboTipoFichero.getItemAt(comboTipoFichero.getSelectedIndex()).toString()
                        .toUpperCase();
                if (tipofichero.contains("TIFF")) {
                    guardarTiff();
                    return;
                }
                if (tipofichero.contains("PDF")) {
                    guardarPdf();
                    return;
                }
                if (tipofichero.contains("JPG")) {
                    guardarImagenTipo("JPG");
                    return;
                }
                if (tipofichero.contains("GIF")) {
                    guardarImagenTipo("GIF");
                    return;
                }
                if (tipofichero.contains("PNG")) {
                    guardarImagenTipo("PNG");
                    return;
                }
                if (tipofichero.contains("BMP")) {
                    guardarImagenTipo("BMP");
                    return;
                }
            }
        }
    }

    private void ajustarAnchoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_ajustarAnchoActionPerformed
        if (pd != null) {
            pd.ajustarAncho(panelVisorImagen.getWidth());
            panelVisorImagen.setPreferredSize(new java.awt.Dimension(panelIconosImagen.getWidth(),
                    scrollImagenes.getHeight() - panelIconosImagen.getHeight() - 8));
            panelVisorImagen.setSize(new java.awt.Dimension(panelIconosImagen.getWidth(),
                    scrollImagenes.getHeight() - panelIconosImagen.getHeight() - 8));
            panelVisorImagen.repaint();
            panelImagen.setPreferredSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.setSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.repaint();
            repaint();
            System.gc();
        }
    }//GEN-LAST:event_ajustarAnchoActionPerformed

    private void rotarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_rotarActionPerformed
        if (pd != null) {
            pd.rotar();
            panelImagen.setPreferredSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.setSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.repaint();
            repaint();
            System.gc();
        }
    }//GEN-LAST:event_rotarActionPerformed

    private void botonCBActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCBActionPerformed
        if (contimagen > 0) {
            CodigoBarras cb = new CodigoBarras();
            ArrayList<String> resultadoCB = cb.leerCodigo(rutaboton[minisel]);
            if (!resultadoCB.isEmpty()) {
                if (resultadoCB.size() > 1) {
                    etiquetaCB.setText(resultadoCB.get(1));
                } else {
                    etiquetaCB.setText(resultadoCB.get(0));
                }
            } else {
                etiquetaCB.setText("");
            }
        }
    }//GEN-LAST:event_botonCBActionPerformed

    private void borrarImagenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_borrarImagenActionPerformed
        if (minisel >= 0) {
            PantallaConfirmaDialogo confirma = new PantallaConfirmaDialogo(this, true);
            confirma.setTitle("Borrar Imgen");
            confirma.etiqueta.setText("Desea realmente borrar esta imgen?");
            confirma.repaint();
            confirma.setVisible(true);
            Boolean resultado = confirma.respuesta();
            if (resultado) {
                borrarImagen();
            }
        }
    }//GEN-LAST:event_borrarImagenActionPerformed

    private void guardarImagenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_guardarImagenActionPerformed
        if (minisel >= 0) {
            guardarImagenModificada();
        }
    }//GEN-LAST:event_guardarImagenActionPerformed

    private void opcionLotesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionLotesActionPerformed
        mostrarLotes();

    }//GEN-LAST:event_opcionLotesActionPerformed

    private void opcionManualActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionManualActionPerformed
        //        VisorPdfs vpdf = new VisorPdfs();
        //        String manual=rutadigita + separador + "manual jscan.pdf";
        //        try {
        //            vpdf.verPdf(manual);
        //            if (DEBUG){
        //                Utilidades.escribeLog("Ruta del manual: "+manual);
        //            }
        //        } catch (Exception ex) {
        //            Utilidades.escribeLog("Error al abrir el manual de la aplicacin ("+manual+") - Error " + ex.getMessage());
        //        }
        //       vpdf=null;
        String manual = rutadigita + separador + "manual jscan.pdf";
        try {
            File path = new File(manual);
            Desktop.getDesktop().open(path);
        } catch (IOException ex) {
            Utilidades.escribeLog(
                    "Error al abrir el manual de la aplicacin (" + manual + ") - Error " + ex.getMessage());
        }

    }//GEN-LAST:event_opcionManualActionPerformed

    private void opcionRBMetalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionRBMetalActionPerformed
        opcionRBMetal.setSelected(true);
        opcionRBNimbus.setSelected(false);
        opcionRBWindows.setSelected(false);
        opcionRBWindowsClassic.setSelected(false);
        opcionRBPorDefecto.setSelected(false);
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Metal".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
            SwingUtilities.updateComponentTreeUI(this);
            this.pack();
        } catch (Exception ex) {
            Utilidades.escribeLog("Error al cambiar Aspecto Visual a Metal - " + ex.getMessage());
        }
    }//GEN-LAST:event_opcionRBMetalActionPerformed

    private void opcionRBNimbusActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionRBNimbusActionPerformed
        opcionRBMetal.setSelected(false);
        opcionRBNimbus.setSelected(true);
        opcionRBWindows.setSelected(false);
        opcionRBWindowsClassic.setSelected(false);
        opcionRBPorDefecto.setSelected(false);
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
            SwingUtilities.updateComponentTreeUI(this);
            this.pack();
        } catch (Exception ex) {
            Utilidades.escribeLog("Error al cambiar Aspecto Visual a Nimbus - " + ex.getMessage());
        }

    }//GEN-LAST:event_opcionRBNimbusActionPerformed

    private void opcionRBWindowsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionRBWindowsActionPerformed
        opcionRBMetal.setSelected(false);
        opcionRBNimbus.setSelected(false);
        opcionRBWindows.setSelected(true);
        opcionRBWindowsClassic.setSelected(false);
        opcionRBPorDefecto.setSelected(false);
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
            SwingUtilities.updateComponentTreeUI(this);
            this.pack();
        } catch (Exception ex) {
            Utilidades.escribeLog("Error al cambiar Aspecto Visual a Windows - " + ex.getMessage());
        }

    }//GEN-LAST:event_opcionRBWindowsActionPerformed

    private void opcionRBWindowsClassicActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionRBWindowsClassicActionPerformed
        opcionRBMetal.setSelected(false);
        opcionRBNimbus.setSelected(false);
        opcionRBWindows.setSelected(false);
        opcionRBWindowsClassic.setSelected(true);
        opcionRBPorDefecto.setSelected(false);
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Windows Classic".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
            SwingUtilities.updateComponentTreeUI(this);
            this.pack();
        } catch (Exception ex) {
            Utilidades.escribeLog("Error al cambiar Aspecto Visual a Windows Classic - " + ex.getMessage());
        }
    }//GEN-LAST:event_opcionRBWindowsClassicActionPerformed

    private void opcionRBPorDefectoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionRBPorDefectoActionPerformed
        try {
            opcionRBMetal.setSelected(false);
            opcionRBNimbus.setSelected(false);
            opcionRBWindows.setSelected(false);
            opcionRBWindowsClassic.setSelected(false);
            opcionRBPorDefecto.setSelected(true);
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            SwingUtilities.updateComponentTreeUI(this);
        } catch (Exception ex) {
            Utilidades.escribeLog("Error al cambiar Aspecto por Defecto - " + ex.getMessage());
        }
    }//GEN-LAST:event_opcionRBPorDefectoActionPerformed

    private void opcionEnviarLoteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionEnviarLoteActionPerformed
        botonEnviarActionPerformed(evt);
    }//GEN-LAST:event_opcionEnviarLoteActionPerformed

    private void opcionDigitalizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionDigitalizarActionPerformed
        botonDigitalizarActionPerformed(evt);
    }//GEN-LAST:event_opcionDigitalizarActionPerformed

    private void opcionImportarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionImportarActionPerformed
        botonImportarActionPerformed(evt);
    }//GEN-LAST:event_opcionImportarActionPerformed

    private void opcionBorrarLoteActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionBorrarLoteActionPerformed
        botonEliminarActionPerformed(evt);
    }//GEN-LAST:event_opcionBorrarLoteActionPerformed

    private void opcionzoommenosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionzoommenosActionPerformed
        zoomMenosActionPerformed(evt);
    }//GEN-LAST:event_opcionzoommenosActionPerformed

    private void opcionzoommasActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionzoommasActionPerformed
        zoomMasActionPerformed(evt);
    }//GEN-LAST:event_opcionzoommasActionPerformed

    private void opcionzoom100ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionzoom100ActionPerformed
        zoom100ActionPerformed(evt);
    }//GEN-LAST:event_opcionzoom100ActionPerformed

    private void opcionanchoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionanchoActionPerformed
        ajustarAnchoActionPerformed(evt);
    }//GEN-LAST:event_opcionanchoActionPerformed

    private void opcionrotarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionrotarActionPerformed
        rotarActionPerformed(evt);
    }//GEN-LAST:event_opcionrotarActionPerformed

    private void opcionborrarimagenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionborrarimagenActionPerformed
        borrarImagenActionPerformed(evt);
    }//GEN-LAST:event_opcionborrarimagenActionPerformed

    private void opcionguardarimagenActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionguardarimagenActionPerformed
        guardarImagenActionPerformed(evt);
    }//GEN-LAST:event_opcionguardarimagenActionPerformed

    private void opcionLeerLogActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionLeerLogActionPerformed
        Calendar cal = Calendar.getInstance();
        String anio = String.valueOf(cal.get(Calendar.YEAR));
        String mes = String.valueOf((cal.get(Calendar.MONTH) + 1)).length() == 1
                ? "0" + String.valueOf((cal.get(Calendar.MONTH) + 1))
                : String.valueOf((cal.get(Calendar.MONTH) + 1));
        String dia = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH))
                : String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
        PantallaLeerFichero log = new PantallaLeerFichero(this, true);
        log.CargarFichero(
                rutalog + separador + "jscan-" + utilidades.ip() + "-" + dia + "-" + mes + "-" + anio + ".log");
        log.setTitle("Fichero de log " + rutalog + separador + "jscan-" + utilidades.ip() + "-" + dia + "-" + mes
                + "-" + anio + ".log");
        log.setVisible(true);
    }//GEN-LAST:event_opcionLeerLogActionPerformed

    private void opcionSelEscanerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionSelEscanerActionPerformed
        botonSelEscanerActionPerformed(evt);
    }//GEN-LAST:event_opcionSelEscanerActionPerformed

    private void opcionMaximizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionMaximizarActionPerformed
        String fichero = rutadigita + separador + "escaner.ini";
        if (opcionMaximizar.isSelected()) {
            propiniescaner.setProperty("Maximizar", "S");
        } else {
            propiniescaner.setProperty("Maximizar", "N");
        }
        utilidades.escribirPropeties(fichero, propiniescaner);
    }//GEN-LAST:event_opcionMaximizarActionPerformed

    private void opcionDebugMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_opcionDebugMouseClicked
        if (opcionDebug.isSelected()) {
            DEBUG = true;
            Utilidades.escribeLog("DEBUG=true");
        } else {
            DEBUG = false;
            Utilidades.escribeLog("DEBUG=false");
        }
    }//GEN-LAST:event_opcionDebugMouseClicked

    private void opcionDebugActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionDebugActionPerformed
        if (opcionDebug.isSelected()) {
            DEBUG = true;
            Utilidades.escribeLog("DEBUG=true");
        } else {
            DEBUG = false;
            Utilidades.escribeLog("DEBUG=false");
        }
    }//GEN-LAST:event_opcionDebugActionPerformed

    private static void open(URI uri) {
        if (Desktop.isDesktopSupported()) {
            try {
                Desktop.getDesktop().browse(uri);
            } catch (IOException e) {
                /* TODO: error handling */ }
        } else {
            /* TODO: error handling */ }
    }

    private void opcionLicenciaApacheActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionLicenciaApacheActionPerformed
        try {
            URI uri = new URI("http://www.apache.org/licenses/LICENSE-2.0");
            open(uri);
        } catch (Exception ex) {
        }
    }//GEN-LAST:event_opcionLicenciaApacheActionPerformed

    private void opcionLicenciaItextActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionLicenciaItextActionPerformed
        try {
            URI uri = new URI("http://itextpdf.com/terms-of-use/agpl.php");
            open(uri);
        } catch (Exception ex) {
        }
    }//GEN-LAST:event_opcionLicenciaItextActionPerformed

    private void opcionLicenciaXStreamActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_opcionLicenciaXStreamActionPerformed
        try {
            URI uri = new URI("http://xstream.codehaus.org/license.html");
            open(uri);
        } catch (Exception ex) {
        }
    }//GEN-LAST:event_opcionLicenciaXStreamActionPerformed

    private void botonCB2DActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCB2DActionPerformed
        if (contimagen > 0) {
            CodigoBarras cb = new CodigoBarras();
            String resultadoCB = cb.leerCodigo2D(rutaboton[minisel]);
            if (!resultadoCB.isEmpty()) {
                etiquetaCB.setText(resultadoCB);
            } else {
                etiquetaCB.setText("");
            }
        }
    }//GEN-LAST:event_botonCB2DActionPerformed

    private void botonDirectorioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonDirectorioActionPerformed
        JFileChooser chooser = new JFileChooser();
        chooser.setCurrentDirectory(new java.io.File("."));
        chooser.setDialogTitle("Seleccionar directorio");
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        chooser.setAcceptAllFileFilterUsed(false);
        if (chooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
            textoDirectorio.setText(chooser.getSelectedFile().toString());
        } else {
            if (DEBUG) {
                Utilidades.escribeLog("No se ha seleccionado directorio de salida ");
            }
        }
    }//GEN-LAST:event_botonDirectorioActionPerformed

    private void botonEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEliminarActionPerformed
        borrarLoteActual();
    }//GEN-LAST:event_botonEliminarActionPerformed

    private void botonGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonGuardarActionPerformed
        if (pd != null) {
            guardarLote();
        }
    }//GEN-LAST:event_botonGuardarActionPerformed

    private void botonEnviarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEnviarActionPerformed
        enviar();
    }//GEN-LAST:event_botonEnviarActionPerformed

    private void sliderContrasteStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_sliderContrasteStateChanged
        seleccionarContraste();
    }//GEN-LAST:event_sliderContrasteStateChanged

    private void sliderBrilloStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_sliderBrilloStateChanged
        seleccionarBrillo();
    }//GEN-LAST:event_sliderBrilloStateChanged

    private void checkDuplexStateChanged(javax.swing.event.ChangeEvent evt) {//GEN-FIRST:event_checkDuplexStateChanged
        seleccionarDuplex();
    }//GEN-LAST:event_checkDuplexStateChanged

    private void comboResolucionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboResolucionActionPerformed
        seleccionarResolucion();
    }//GEN-LAST:event_comboResolucionActionPerformed

    private void comboResolucionItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboResolucionItemStateChanged
        seleccionarResolucion();
    }//GEN-LAST:event_comboResolucionItemStateChanged

    private void comboColorActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_comboColorActionPerformed
        seleccionarColor();
    }//GEN-LAST:event_comboColorActionPerformed

    private void comboColorItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboColorItemStateChanged
        seleccionarColor();
    }//GEN-LAST:event_comboColorItemStateChanged

    private void botonSelEscanerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSelEscanerActionPerformed
        selecionarEscaner();
    }//GEN-LAST:event_botonSelEscanerActionPerformed

    private void botonImportarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonImportarActionPerformed
        importarImagenes();
    }//GEN-LAST:event_botonImportarActionPerformed

    private void botonDigitalizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonDigitalizarActionPerformed
        if (!nombreEscaner.getText().isEmpty()) {
            escanear();
        }
    }//GEN-LAST:event_botonDigitalizarActionPerformed

    private void botonCrearBidiActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCrearBidiActionPerformed
        PantallaTextoIn pantallaTexto = new PantallaTextoIn(this, true);
        pantallaTexto.setTitle("Texto para crear Cdigo QR");
        pantallaTexto.setVisible(true);
        String texto = pantallaTexto.getTexto();
        if (!texto.isEmpty()) {
            CodigoBarras cb = new CodigoBarras();
            cb.CrearBidi(texto);
            importarDeFichero(utilidades.crearDirBase() + utilidades.separador() + "qr_png.png");
        }
    }//GEN-LAST:event_botonCrearBidiActionPerformed

    private Boolean borrarLoteActual() {
        Boolean resultado = true;

        if (minisel < 0) {
            lote = "";
            return false;
        }

        PantallaConfirmaDialogo confirma = new PantallaConfirmaDialogo(this, true);

        confirma.setTitle("Borrar Lote de Imgenes");
        confirma.etiqueta.setText("Desea realmente borrar este lote?");
        confirma.repaint();
        confirma.setVisible(true);
        resultado = confirma.respuesta();
        if (resultado) {

            String ruta = rutalote;
            if (!lote.equals("")) {
                borrarLote(lote);
            }
            inicializar();
            utilidades.borrarDirectorio(ruta);
        }

        return resultado;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            Utilidades.escribeLog(PantallaPrincipal.class.getName().toString() + " - " + ex.getMessage());
        } catch (InstantiationException ex) {
            Utilidades.escribeLog(PantallaPrincipal.class.getName().toString() + " - " + ex.getMessage());
        } catch (IllegalAccessException ex) {
            Utilidades.escribeLog(PantallaPrincipal.class.getName().toString() + " - " + ex.getMessage());
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            Utilidades.escribeLog(PantallaPrincipal.class.getName().toString() + " - " + ex.getMessage());
        }

        // Impide que se abrn ms de una instancia de la aplicacin
        try {
            Socket clientSocket = new Socket("localhost", ConexionUnica.PORT);
            Utilidades.mensa(ventanapadre, "Digita-cliente",
                    "\n  Ya existe una instancia de la aplicacin Digita-cliente en ejecucin.");
            System.exit(0);
        } catch (Exception e) {
            ConexionUnica sds = new ConexionUnica();
            sds.start();
        }

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new PantallaPrincipal().setVisible(true);

            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenu Imagen;
    private javax.swing.JMenu Lotes;
    private javax.swing.JButton ajustarAncho;
    private javax.swing.JButton borrarImagen;
    private javax.swing.JButton botonCB;
    private javax.swing.JButton botonCB2D;
    private javax.swing.JButton botonCrearBidi;
    private javax.swing.JButton botonDigitalizar;
    private javax.swing.JToggleButton botonDirectorio;
    private javax.swing.JButton botonEliminar;
    private javax.swing.JButton botonEnviar;
    private javax.swing.JButton botonGuardar;
    private javax.swing.JButton botonImportar;
    private javax.swing.JButton botonSelEscaner;
    private javax.swing.JCheckBox checkDuplex;
    private javax.swing.JComboBox comboColor;
    private javax.swing.JComboBox comboResolucion;
    private javax.swing.JComboBox comboTipoFichero;
    private javax.swing.JTextArea etiquetaCB;
    private javax.swing.JButton guardarImagen;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JMenuBar jMenuPrincipal;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JPopupMenu.Separator jSeparator2;
    private javax.swing.JPopupMenu.Separator jSeparator3;
    private javax.swing.JPopupMenu.Separator jSeparator4;
    private javax.swing.JPopupMenu.Separator jSeparator5;
    private javax.swing.JPopupMenu.Separator jSeparator6;
    private javax.swing.JPopupMenu.Separator jSeparator7;
    private javax.swing.JLabel labelBrillo;
    private javax.swing.JLabel labelBrillo1;
    private javax.swing.JLabel labelBrillo2;
    private javax.swing.JLabel labelContraste;
    private javax.swing.JLabel labelNumPaginas;
    private javax.swing.JLabel labelPagina;
    private javax.swing.JLabel labelTotalPaginas;
    private javax.swing.JLabel labelde;
    private javax.swing.JTextField nombreEscaner;
    private javax.swing.JMenuItem opcionAbout;
    private javax.swing.JMenu opcionAcerca;
    private javax.swing.JMenu opcionApariencia;
    private javax.swing.JMenuItem opcionBorrarLote;
    private javax.swing.JMenuItem opcionCerrar;
    private javax.swing.JCheckBoxMenuItem opcionDebug;
    private javax.swing.JMenuItem opcionDigitalizar;
    private javax.swing.JMenuItem opcionEnviarLote;
    private javax.swing.JMenuItem opcionGuardarLote;
    private javax.swing.JMenuItem opcionImportar;
    private javax.swing.JMenuItem opcionLeerLog;
    private javax.swing.JMenuItem opcionLicenciaApache;
    private javax.swing.JMenuItem opcionLicenciaItext;
    private javax.swing.JMenuItem opcionLicenciaXStream;
    private javax.swing.JMenuItem opcionLotes;
    private javax.swing.JMenuItem opcionManual;
    private javax.swing.JCheckBoxMenuItem opcionMaximizar;
    private javax.swing.JMenu opcionOpciones;
    private javax.swing.JRadioButtonMenuItem opcionRBMetal;
    private javax.swing.JRadioButtonMenuItem opcionRBNimbus;
    private javax.swing.JRadioButtonMenuItem opcionRBPorDefecto;
    private javax.swing.JRadioButtonMenuItem opcionRBWindows;
    private javax.swing.JRadioButtonMenuItem opcionRBWindowsClassic;
    private javax.swing.JMenuItem opcionSelEscaner;
    private javax.swing.JMenu opcionUtilidades;
    private javax.swing.JMenuItem opcionancho;
    private javax.swing.JMenuItem opcionborrarimagen;
    private javax.swing.JMenuItem opcionguardarimagen;
    private javax.swing.JMenuItem opcionrotar;
    private javax.swing.JMenuItem opcionzoom100;
    private javax.swing.JMenuItem opcionzoommas;
    private javax.swing.JMenuItem opcionzoommenos;
    private javax.swing.JLayeredPane panelAccion;
    private javax.swing.JPanel panelConfigura;
    private javax.swing.JLayeredPane panelEscaner;
    public javax.swing.JPanel panelIconosImagen;
    private javax.swing.JPanel panelImagen;
    public javax.swing.JPanel panelImagenes;
    private javax.swing.JPanel panelMini;
    private javax.swing.JLayeredPane panelValores;
    private javax.swing.JScrollPane panelVisorImagen;
    private javax.swing.JScrollPane panelVisorMini;
    private javax.swing.JButton rotar;
    private javax.swing.JScrollPane scrollConfigura;
    public javax.swing.JScrollPane scrollImagenes;
    private javax.swing.JSlider sliderBrillo;
    private javax.swing.JSlider sliderContraste;
    private javax.swing.JTextField textoDirectorio;
    private javax.swing.JTextField textoFichero;
    private javax.swing.JButton zoom100;
    private javax.swing.JButton zoomMas;
    private javax.swing.JButton zoomMenos;
    // End of variables declaration//GEN-END:variables

    @Action
    public void mostrarAcercade() {
        Acercade about = new Acercade(this, true);
        about.setLocationRelativeTo(this);
        about.setVisible(true);
    }

    public void cerrar() {

        PantallaConfirmaDialogo confirma = new PantallaConfirmaDialogo(this, true);
        confirma.setTitle("Cerrar jScan");
        confirma.etiqueta.setText("Desea realmente cerrar la aplicacin?");
        confirma.repaint();
        confirma.setVisible(true);

        if (confirma.respuesta()) {
            System.exit(0);
        }

        /*
         Object[] opciones = {"Aceptar", "Cancelar"};
            
         int eleccion = JOptionPane.showOptionDialog(this, "Desea cerrar la aplicacin?", "Cerrar jScan",
         JOptionPane.YES_NO_OPTION,
         JOptionPane.QUESTION_MESSAGE, null, opciones, "Aceptar");
         if (eleccion == JOptionPane.YES_OPTION) {
         System.exit(0);
         }
            
         */
    }

    protected static Image getLogo() {
        java.net.URL imgURL = PantallaPrincipal.class.getClassLoader()
                .getResource("es/jscan/Pantallas/imagenes/scaner.jpg");
        if (imgURL != null) {
            return new ImageIcon(imgURL).getImage();
        } else {
            return null;
        }
    }

    private void asignarIconos() {
        java.net.URL imgURL = PantallaPrincipal.class.getClassLoader()
                .getResource("es/jscan/Pantallas/imagenes/guardar.png");
        Icon imgicon = new ImageIcon(imgURL);
        this.botonEnviar.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/borrar.png");
        imgicon = new ImageIcon(imgURL);
        this.botonEliminar.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/enviar.png");
        imgicon = new ImageIcon(imgURL);
        this.botonGuardar.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/escanear.png");
        imgicon = new ImageIcon(imgURL);
        this.botonDigitalizar.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/importar.png");
        imgicon = new ImageIcon(imgURL);
        this.botonImportar.setIcon(imgicon);
        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/zoommas.png");
        imgicon = new ImageIcon(imgURL);
        this.zoomMas.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/zoommenos.png");
        imgicon = new ImageIcon(imgURL);
        this.zoomMenos.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/100x100.png");
        imgicon = new ImageIcon(imgURL);
        this.zoom100.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/ancho.png");
        imgicon = new ImageIcon(imgURL);
        this.ajustarAncho.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/rotar.png");
        imgicon = new ImageIcon(imgURL);
        this.rotar.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader()
                .getResource("es/jscan/Pantallas/imagenes/borrarimagen.png");
        imgicon = new ImageIcon(imgURL);
        this.borrarImagen.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader()
                .getResource("es/jscan/Pantallas/imagenes/guardarimagen.png");
        imgicon = new ImageIcon(imgURL);
        this.guardarImagen.setIcon(imgicon);

        botonCB.setText("");
        //        imgURL = PantallaPrincipal.class.getResource("imagenes/codigobarras.png");
        //        imgicon = new ImageIcon(imgURL);
        //        this.botonCB.setIcon(imgicon);

        imgURL = PantallaPrincipal.class.getClassLoader()
                .getResource("es/jscan/Pantallas/imagenes/codigobarras.png");
        Icon icono = new ImageIcon(imgURL);
        this.botonCB.setIcon(icono);
        this.botonCB.setBorder(null);
        this.botonCB.setContentAreaFilled(false);
        this.botonCB.setBorderPainted(false);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/cb2d.png");
        icono = new ImageIcon(imgURL);
        this.botonCB2D.setIcon(icono);
        this.botonCB2D.setBorder(null);
        this.botonCB2D.setContentAreaFilled(false);
        this.botonCB2D.setBorderPainted(false);

        imgURL = PantallaPrincipal.class.getClassLoader().getResource("es/jscan/Pantallas/imagenes/imagen-qr.png");
        icono = new ImageIcon(imgURL);
        this.botonCrearBidi.setIcon(icono);
        this.botonCrearBidi.setBorder(null);
        this.botonCrearBidi.setContentAreaFilled(false);
        this.botonCrearBidi.setBorderPainted(false);

        scrollConfigura.revalidate();
        scrollImagenes.revalidate();
        this.repaint();

    }

    @Action
    public void inicializarAplicacion() {
        String fichero = rutadigita + separador + "procesos.xml";
        if (utilidades.versionJavaBits().equals("x86")) {
            System.setProperty("java.library.path", rutadigita + separador + "drivers");
        } else {
            System.setProperty("java.library.path", rutadigita + separador + "drivers" + separador + "x64");
        }
        // Saca la DLL jtwain.dll del jar y la copia en el directorio del trabajo dentro de "drivers"
        utilidades.crearDirectorio(rutadigita + separador + "drivers");
        utilidades.crearDirectorio(rutadigita + separador + "drivers" + separador + "x64");
        utilidades.sacarArchivoJar("/es/jscan/utilidades/drivers/jtwain.dll",
                rutadigita + separador + "drivers" + separador + "jtwain.dll");
        utilidades.sacarArchivoJar("/es/jscan/utilidades/drivers/x64/jtwain.dll",
                rutadigita + separador + "drivers" + separador + "x64" + separador + "jtwain.dll");
        //utilidades.sacarArchivoJar("/es/jscan/utilidades/drivers/libjsane.so", rutadigita + separador + "drivers" + separador + "libjsane.so");
        utilidades.sacarArchivoJar("/es/jscan/Pantallas/propiedades/procesos.xml",
                rutadigita + separador + "procesos.xml");
        utilidades.sacarArchivoJar("/es/jscan/manual/manual jscan.pdf",
                rutadigita + separador + "manual jscan.pdf");

        if (!utilidades.existeFichero(fichero)) {
            utilidades.crearFichero(fichero, "xml");
            utilidades.escribeFichero(fichero, "<procesos>");
            utilidades.escribeFichero(fichero, "</procesos>");
        }

        fichero = rutadigita + separador + "escaner.ini";
        if (!utilidades.existeFichero(fichero)) {
            utilidades.crearFichero(fichero, "texto");
            Properties props = new Properties();
            props.setProperty("Escaner", "");
            props.setProperty("Resolucion", "");
            props.setProperty("Duplex", "N");
            props.setProperty("Color", "");
            props.setProperty("Rotada", "N");
            props.setProperty("RutaImportar", "");
            props.setProperty("Brillo", "");
            props.setProperty("Contraste", "");
            props.setProperty("Maximizar", "N");

            utilidades.escribirPropeties(fichero, props);
        }

        propiniescaner = utilidades.leerPropeties(fichero);

        nombreEscaner.setText(propiniescaner.getProperty("Escaner"));
        checkDuplex.setSelected((propiniescaner.getProperty("Duplex").equals("S") ? true : false));

        cargarEscaner();

        if (!nombreEscaner.getText().isEmpty()) {
            configurarEscaner(nombreEscaner.getText());
        }

        int posicion = 0;
        for (int i = 0; i < comboColor.getModel().getSize(); i++) {
            if (comboColor.getModel().getElementAt(i).equals(propiniescaner.getProperty("Color"))) {
                posicion = i;
                break;
            }
        }
        comboColor.setSelectedIndex(posicion);

        posicion = 0;
        for (int i = 0; i < comboResolucion.getModel().getSize(); i++) {
            if (comboResolucion.getModel().getElementAt(i).equals(propiniescaner.getProperty("Resolucion"))) {
                posicion = i;
                break;
            }
        }
        comboResolucion.setSelectedIndex(posicion);

        sliderBrillo.setValue(Integer.parseInt(
                propiniescaner.getProperty("Brillo").equals("") ? "0" : propiniescaner.getProperty("Brillo")));
        sliderContraste.setValue(Integer.parseInt(propiniescaner.getProperty("Contraste").equals("") ? "0"
                : propiniescaner.getProperty("Contraste")));

        if (propiniescaner.getProperty("Maximizar") == null) {
            propiniescaner.setProperty("Maximizar", "N");
            utilidades.escribirPropeties(fichero, propiniescaner);
        }

        if (propiniescaner.getProperty("Maximizar").equals("S")) {
            this.setExtendedState(JFrame.MAXIMIZED_BOTH);
            this.getRootPane().setDefaultButton(botonDigitalizar);
            opcionMaximizar.setSelected(true);
        } else {
            opcionMaximizar.setSelected(false);
        }
        botonDigitalizar.requestFocus();

        EscuchadorMensajes escuchamensa = new EscuchadorMensajes();

    }

    @Action
    public boolean cargarEscaner() {
        ImageIO.scanForPlugins();
        scanner = Scanner.getDevice();
        if (scanner != null) {
            try {
                listaseleccion = scanner.getDeviceNames();
            } catch (Exception ex) {
                Utilidades.escribeLog("No se ha podido cargar la lista de Escneres - Error " + ex.getMessage());
            }
            return true;
        }
        return false;
    }

    @Action
    private void selecionarEscaner() {
        titulolista = "Seleccionar Escaner";
        PantallaSeleccion pantallaescaner = new PantallaSeleccion(this, true);
        miescaner = PantallaSeleccion.getValor();
        if (DEBUG) {
            Utilidades.escribeLog("Mi escaner: " + miescaner);
        }
        nombreEscaner.setText(miescaner);
        String fichero = rutadigita + separador + "escaner.ini";
        propiniescaner.setProperty("Escaner", miescaner);
        utilidades.escribirPropeties(fichero, propiniescaner);
        if (!rutalote.equals("")) {
            proplote = utilidades.leerPropeties(rutalote + separador + "lote.ini");
            proplote.setProperty("Escaner", miescaner);
            utilidades.escribirPropeties(rutalote + separador + "lote.ini", proplote);
        }
        if (!nombreEscaner.getText().isEmpty()) {
            configurarEscaner(nombreEscaner.getText());
        }
    }

    @Action
    private void seleccionarResolucion() {
        String fichero = rutadigita + separador + "escaner.ini";
        propiniescaner.setProperty("Resolucion", comboResolucion.getSelectedItem().toString());
        utilidades.escribirPropeties(fichero, propiniescaner);
        if (!rutalote.equals("")) {
            proplote = utilidades.leerPropeties(rutalote + separador + "lote.ini");
            proplote.setProperty("Resolucion", comboResolucion.getSelectedItem().toString());
            utilidades.escribirPropeties(rutalote + separador + "lote.ini", proplote);
        }
    }

    @Action
    private void seleccionarColor() {
        String fichero = rutadigita + separador + "escaner.ini";
        propiniescaner.setProperty("Color", comboColor.getSelectedItem().toString());
        utilidades.escribirPropeties(fichero, propiniescaner);
        if (!rutalote.equals("")) {
            proplote = utilidades.leerPropeties(rutalote + separador + "lote.ini");
            proplote.setProperty("Color", comboColor.getSelectedItem().toString());
            utilidades.escribirPropeties(rutalote + separador + "lote.ini", proplote);
        }
    }

    @Action
    private void seleccionarDuplex() {
        String fichero = rutadigita + separador + "escaner.ini";
        try {
            propiniescaner.setProperty("Duplex", checkDuplex.isSelected() ? "S" : "N");
        } catch (Exception ex) {
        }
        utilidades.escribirPropeties(fichero, propiniescaner);
        if (!rutalote.equals("")) {
            proplote = utilidades.leerPropeties(rutalote + separador + "lote.ini");
            proplote.setProperty("Duplex", checkDuplex.isSelected() ? "S" : "N");
            utilidades.escribirPropeties(rutalote + separador + "lote.ini", proplote);
        }
    }

    @Action
    private void seleccionarPagRotada() {
        String fichero = rutadigita + separador + "escaner.ini";
        utilidades.escribirPropeties(fichero, propiniescaner);

        if (!rutalote.equals("")) {
            proplote = utilidades.leerPropeties(rutalote + separador + "lote.ini");

            utilidades.escribirPropeties(rutalote + separador + "lote.ini", proplote);
        }
    }

    @Action
    private void seleccionarBrillo() {
        String fichero = rutadigita + separador + "escaner.ini";
        propiniescaner.setProperty("Brillo", "" + sliderBrillo.getValue());
        utilidades.escribirPropeties(fichero, propiniescaner);

        if (!rutalote.equals("")) {
            proplote = utilidades.leerPropeties(rutalote + separador + "lote.ini");
            proplote.setProperty("Brillo", "" + sliderBrillo.getValue());
            utilidades.escribirPropeties(rutalote + separador + "lote.ini", proplote);
        }
    }

    @Action
    private void seleccionarContraste() {
        String fichero = rutadigita + separador + "escaner.ini";
        propiniescaner.setProperty("Contraste", "" + sliderContraste.getValue());
        utilidades.escribirPropeties(fichero, propiniescaner);

        if (!rutalote.equals("")) {
            proplote = utilidades.leerPropeties(rutalote + separador + "lote.ini");
            proplote.setProperty("Contraste", "" + sliderContraste.getValue());
            utilidades.escribirPropeties(rutalote + separador + "lote.ini", proplote);
        }
    }

    @Action
    private void configurarEscaner(String escaner) {
        scanner = Scanner.getDevice();
        try {
            scanner.select(escaner);
            escanerconfig = true;
            scanner.addListener(this);
            scanner.acquire();

            String fichero = rutadigita + separador + "escaner.ini";
            propiniescaner = utilidades.leerPropeties(fichero);
            int valor = Integer.parseInt(propiniescaner.getProperty("Contraste") == null ? "0"
                    : propiniescaner.getProperty("Contraste"));
            int cont = 0;
            while (contraste == null && cont < 1000) {
                Thread.currentThread().sleep(20);
                cont++;
            }

            sliderContraste.setMaximum(contraste.getItems().length - 1);
            sliderContraste.setMinimum(0);

            if (valor > 0 && valor < contraste.getItems().length - 1) {
                sliderContraste.setValue(valor);
            } else {
                sliderContraste.setValue((contraste.getItems().length - 1) / 2);
            }
            sliderContraste.setSnapToTicks(true);
            //            Hashtable etiquetas = new Hashtable();
            //            etiquetas.put(new Integer(0), new JLabel("Mn"));
            //            etiquetas.put(new Integer((contraste.getItems().length - 1) / 2), new JLabel("0"));
            //            etiquetas.put(new Integer(contraste.getItems().length - 1), new JLabel("Mx"));
            //            sliderContraste.setLabelTable(etiquetas);
            //            sliderContraste.setPaintLabels(true);
            valor = Integer.parseInt(
                    propiniescaner.getProperty("Brillo") == null ? "0" : propiniescaner.getProperty("Brillo"));
            cont = 0;
            while (brillo == null && cont < 1000) {
                Thread.currentThread().sleep(20);
                cont++;
            }

            sliderBrillo.setMaximum(brillo.getItems().length - 1);
            sliderBrillo.setMinimum(0);

            if (valor > 0 && valor < brillo.getItems().length - 1) {
                sliderBrillo.setValue(valor);
            } else {
                sliderBrillo.setValue((brillo.getItems().length - 1) / 2);
            }

            sliderBrillo.setSnapToTicks(true);
            //            Hashtable etiquetaBrillo = new Hashtable();
            //            etiquetaBrillo.put(new Integer(0), new JLabel("Mn"));
            //            etiquetaBrillo.put(new Integer((brillo.getItems().length - 1) / 2), new JLabel("0"));
            //            etiquetaBrillo.put(new Integer(brillo.getItems().length - 1), new JLabel("Mx"));
            //            sliderBrillo.setLabelTable(etiquetaBrillo);
            //            sliderBrillo.setPaintLabels(true);
            panelEscaner.repaint();
        } catch (Exception ex) {
            Utilidades.escribeLog("Error al cargar configuracin del escner: " + ex.getMessage());
        }
    }

    @Action
    private void escanear() {
        String escaner = nombreEscaner.getText();
        if (escaner.isEmpty()) {
            return;
        }

        if (contimagen < 0) {
            contimagen = 0;
        }
        if (rutalote.equals("")) {
            crearLote();
        }

        scanner.isAPIInstalled();
        scanner = Scanner.getDevice();
        try {
            scanner.select(escaner);
            scanner.addListener(this);
            scanner.acquire();
            escaneando = true;
            mostrarBarraEscaner();
        } catch (ScannerIOException ex) {
            Utilidades.escribeLog("Error al escanear - " + ex.getMessage());
        }
    }

    PantallaBarra barraescaner = null;

    private void mostrarBarraEscaner() {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                barraescaner = new PantallaBarra(PantallaPrincipal.this, false);
                barraescaner.setTitle("Escaneando ...");
                barraescaner.barra.setIndeterminate(true);
                barraescaner.botonParar.setVisible(true);
                barraescaner.setLabelMensa("");
                barraescaner.barra.setOpaque(true);
                barraescaner.barra.setStringPainted(false);
                barraescaner.validate();
            }
        });
    }

    @Override
    public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata) {
        if (type.equals(ScannerIOMetadata.ACQUIRED)) { // acquired BufferedImage
            java.awt.image.BufferedImage miimage = metadata.getImage();// make reference copy here to avoid race condition
            guardarImagen(miimage, contimagen);
            cargarMiniaturas(contimagen);
            panelVisorMini.repaint();
            repaint();
            pintarImagenPorIndice(contimagen);
            ponerBordeBoton(contimagen);
            contimagen++;

            if (barraescaner.PARAR) {
                //               metadata.setCancel(true);
                TwainSource source = ((TwainIOMetadata) metadata).getSource();
                source.setCancel(true);
                barraescaner.PARAR = false;
                barraescaner.botonParar.setVisible(false);
                barraescaner.setLabelMensa("Cancelando ...");
                barraescaner.validate();
            }

        } else if (type.equals(ScannerIOMetadata.FILE)) { // acquired image as file (twain only for the time being)
            final File file = metadata.getFile(); // make reference copy here to avoid race condition
            new Thread() {
                public void run() {
                    try {
                        pantutil.open(file.getPath(), panelVisorImagen);
                    } catch (Exception e) {
                        Utilidades.escribeLog("9\b" + getClass().getName() + ".update:\n\t" + e);
                        System.err.println(getClass().getName() + ".update:\n\t" + e);
                        e.printStackTrace();
                    } finally {
                        if (!file.delete()) {
                            Utilidades.escribeLog("9\b" + getClass().getName() + ".update:\n\tCould not delete: "
                                    + file.getPath());
                            System.err.println(
                                    getClass().getName() + ".update:\n\tCould not delete: " + file.getPath());
                        }
                    }
                }
            }.start();
        } else if (type.equals(ScannerIOMetadata.NEGOTIATE)) {
            negotiate(metadata);
        } else if (type.equals(ScannerIOMetadata.STATECHANGE)) {
            // Cuando termina de escanear cierra la ventana de la barra de progreso
            if (escaneando && metadata.isFinished()) {
                escaneando = false;
                barraescaner.dispose();
            }

            if (DEBUG) {
                Utilidades.escribeLog("Scanner State " + metadata.getStateStr());
            }
            //    System.err.println("Scanner State " + metadata.getStateStr());

            if (metadata instanceof TwainIOMetadata) { // TWAIN only !
                if (metadata.isState(TwainConstants.STATE_TRANSFERREADY)) { // state = 6
                    TwainSource source = ((TwainIOMetadata) metadata).getSource();
                    try {
                        TwainImageInfo imageInfo = new TwainImageInfo(source);
                        imageInfo.get();
                        if (DEBUG) {
                            Utilidades.escribeLog(imageInfo.toString());
                        }
                    } catch (Exception e) {
                        Utilidades.escribeLog("3\b" + getClass().getName()
                                + ".update:\n\tCannot retrieve image information.\n\t" + e);
                    }
                    try {
                        TwainImageLayout imageLayout = new TwainImageLayout(source);
                        imageLayout.get();
                        //  Utilidades.escribeLog(imageLayout.toString());
                    } catch (Exception e) {
                        Utilidades.escribeLog(
                                "3\b" + getClass().getName() + ".update:\n\tCannot retrieve image layout.\n\t" + e);
                    }
                } else if (metadata.isState(TwainConstants.STATE_TRANSFERRING)) { // state = 7
                    //        In state 4: supportTwainExtImageInfo=source.getCapability(TwainConstants.ICAP_EXTIMAGEINFO).booleanValue();
                    TwainSource source = ((TwainIOMetadata) metadata).getSource();
                    try {
                        int[] tweis = new int[0x1240 - 0x1200];
                        for (int i = 0; i < tweis.length; i++) {
                            tweis[i] = 0x1200 + i;
                        }

                        TwainExtImageInfo imageInfo = new TwainExtImageInfo(source, tweis);
                        imageInfo.get();
                        //  Utilidades.escribeLog(imageInfo.toString());
                    } catch (Exception e) {
                        Utilidades.escribeLog("3\b" + getClass().getName()
                                + ".update:\n\tCannot retrieve extra image information.\n\t" + e);
                    }
                }
            }

        } else if (type.equals(ScannerIOMetadata.INFO)) {
            if (DEBUG) {
                Utilidades.escribeLog(metadata.getInfo());
            }
        } else if (type.equals(ScannerIOMetadata.EXCEPTION)) {
            if (DEBUG) {
                Utilidades.escribeLog("9\b" + metadata.getException().getMessage());
            }
            metadata.getException().printStackTrace();
        }

    }

    private void guardarImagen(BufferedImage pimagen, int conta) {
        String formato = "tif";
        String formatomin = "jpg";
        File fichero = new File(rutalote + separador + "Imagen" + conta + "." + formato);
        File ficheromin = new File(rutalote + separador + "Imagenmin" + conta + "." + formatomin);
        java.awt.image.BufferedImage imagenmin = (java.awt.image.BufferedImage) pimagen;
        // Escala de grises.
        int tipoimagen = pimagen.getType();
        java.awt.image.BufferedImage imagen = null;

        switch (tipoimagen) {
        case java.awt.image.BufferedImage.TYPE_INT_RGB:
        case java.awt.image.BufferedImage.TYPE_INT_ARGB:
        case java.awt.image.BufferedImage.TYPE_INT_ARGB_PRE:
        case java.awt.image.BufferedImage.TYPE_INT_BGR:
        case java.awt.image.BufferedImage.TYPE_3BYTE_BGR:
        case java.awt.image.BufferedImage.TYPE_4BYTE_ABGR:
        case java.awt.image.BufferedImage.TYPE_4BYTE_ABGR_PRE:
            imagen = pantutil.convertirAGris((java.awt.image.BufferedImage) pimagen);
            break;
        default:
            imagen = (java.awt.image.BufferedImage) pimagen;
        }

        if (pimagen.getWidth() < pimagen.getHeight()) {
            imagenmin = org.imgscalr.Scalr.resize(imagenmin, Scalr.Method.AUTOMATIC, Scalr.Mode.AUTOMATIC, 90, 127);
        } else {
            imagenmin = org.imgscalr.Scalr.resize(imagenmin, Scalr.Method.AUTOMATIC, Scalr.Mode.AUTOMATIC, 127, 90);
        }
        try {
            guardarTiff(fichero.getAbsolutePath(), imagen);
            ImageIO.write(imagenmin, formatomin, ficheromin);
        } catch (IOException e) {
            Utilidades.escribeLog("Error al guardar la imagen - " + e.getMessage());
        }
    }

    private void guardarTiff(String fichero, java.awt.image.BufferedImage imagen) {
        try {
            // TIFF Comprimido
            int tipoimagen = imagen.getType();
            File file = new File(fichero);
            ImageOutputStream ios = ImageIO.createImageOutputStream(file);
            ImageWriter writer = ImageIO.getImageWritersByFormatName("tiff").next();
            writer.setOutput(ios);
            ImageWriteParam param = writer.getDefaultWriteParam();
            param.setCompressionMode(param.MODE_EXPLICIT);
            String compresion = "LZW";
            if (tipoimagen == java.awt.image.BufferedImage.TYPE_BYTE_BINARY) {
                compresion = "CCITT T.6";
            }
            param.setCompressionType(compresion);
            IIOImage img = new IIOImage(imagen, null, null);
            writer.write(null, img, param);
            ios.flush();
            ios.close();
            writer.dispose();
        } catch (IOException ex) {
            Utilidades.escribeLog("Error al guardar el fichero TIFF - " + ex.getMessage());
        }
    }

    private void guardarImagenModificada() {
        String formato = "tif";
        String formatomin = "jpg";
        File fichero = new File(rutalote + separador + "Imagen" + minisel + "." + formato);
        File ficheromin = new File(rutalote + separador + "Imagenmin" + minisel + "." + formatomin);

        java.awt.image.BufferedImage imagen = (java.awt.image.BufferedImage) pd.imgmemoria;
        java.awt.image.BufferedImage imagenmin = imagen;

        if (imagen.getWidth() < imagen.getHeight()) {
            imagenmin = org.imgscalr.Scalr.resize(imagenmin, Scalr.Method.AUTOMATIC, Scalr.Mode.AUTOMATIC, 90, 127);
        } else {
            imagenmin = org.imgscalr.Scalr.resize(imagenmin, Scalr.Method.AUTOMATIC, Scalr.Mode.AUTOMATIC, 127, 90);
        }
        try {
            guardarTiff(fichero.getAbsolutePath(), imagen);
            //ImageIO.write(imagen, formato, fichero);
            ImageIO.write(imagenmin, formatomin, ficheromin);
        } catch (IOException ex) {
            Utilidades.escribeLog("Error de escritura tras modificacin " + ex.getMessage());
        }

        ImageIcon icono = new ImageIcon(rutalote + separador + "Imagenmin" + minisel + ".jpg");
        icono.getImage().flush();
        icono = new ImageIcon(rutalote + separador + "Imagenmin" + minisel + ".jpg");

        boton[minisel].setIcon(icono);
        boton[minisel].setBorder(null);
        boton[minisel].setBorderPainted(false);

        if (minisel > 0) {
            if (icono.getIconWidth() < icono.getIconHeight()) {
                boton[minisel].setBounds(35, boton[minisel - 1].getY() + boton[minisel - 1].getHeight() + 10, 90,
                        127);
            } else {
                boton[minisel].setBounds(20, boton[minisel - 1].getY() + boton[minisel - 1].getHeight() + 10, 127,
                        90);
            }

        } else {
            if (icono.getIconWidth() < icono.getIconHeight()) {
                boton[minisel].setBounds(35, 10, 90, 127);
            } else {
                boton[minisel].setBounds(20, 10, 127, 90);
            }
        }
        boton[minisel].repaint();
        panelMini.revalidate();
        pintarImagenPorIndice(minisel);
    }

    private void borrarImagen() {
        if (DEBUG) {
            Utilidades.escribeLog("Borrada la pgina " + minisel);
        }
        if (contimagen == 1) { // Una sola imagen
            inicializar();
            utilidades.borrarDirectorio(rutalote + separador + "Imagen" + minisel + ".tif");
            utilidades.borrarDirectorio(rutalote + separador + "Imagenmin" + minisel + ".jpg");
            labelNumPaginas.setText("0");
            labelTotalPaginas.setText("0");
            return;
        }

        if (minisel == contimagen - 1) { // La ltima imagen si hay ms de 1
            contimagen--;
            utilidades.borrarDirectorio(rutalote + separador + "Imagen" + (contimagen) + ".tif");
            utilidades.borrarDirectorio(rutalote + separador + "Imagenmin" + (contimagen) + ".jpg");
            panelMini.remove(boton[minisel]);
            minisel--;
            boton = (JButton[]) utilidades.resizeArray(boton, contimagen);
            rutaboton = (String[]) utilidades.resizeArray(rutaboton, contimagen);
            pintarImagenPorIndice(minisel);
            pintarMiniaturaPorIndice(minisel);
            ponerBordeBoton(minisel);
            redimesionarPanelMini();
            panelMini.revalidate();
            panelMini.repaint();
            labelTotalPaginas.setText(boton.length + "");
            return;
        }

        contimagen--;
        panelMini.remove(boton[contimagen]);
        panelMini.revalidate();
        boton = (JButton[]) utilidades.resizeArray(boton, contimagen);
        rutaboton = (String[]) utilidades.resizeArray(rutaboton, contimagen);
        for (int i = minisel; i < contimagen; i++) {
            utilidades.copiarFichero(rutalote + separador + "Imagen" + (i + 1) + ".tif",
                    rutalote + separador + "Imagen" + i + ".tif");
            utilidades.copiarFichero(rutalote + separador + "Imagenmin" + (i + 1) + ".jpg",
                    rutalote + separador + "Imagenmin" + i + ".jpg");
            ImageIcon icono = new ImageIcon(rutalote + separador + "Imagenmin" + i + ".jpg");
            icono.getImage().flush();
            icono = new ImageIcon(rutalote + separador + "Imagenmin" + i + ".jpg");
            boton[i].setIcon(icono);
            panelMini.revalidate();
        }

        utilidades.borrarDirectorio(rutalote + separador + "Imagen" + (contimagen) + ".tif");
        utilidades.borrarDirectorio(rutalote + separador + "Imagenmin" + (contimagen) + ".jpg");

        panelMini.validate();

        if (minisel >= 1) {
            pintarImagenPorIndice(minisel - 1);
            pintarMiniaturaPorIndice(minisel - 1);
            ponerBordeBoton(minisel - 1);
        }
        if (minisel <= contimagen) {
            pintarImagenPorIndice(minisel);
            pintarMiniaturaPorIndice(minisel);
            ponerBordeBoton(minisel);
        }

        //        int tam = 0;
        //        for (int n = 0; n < boton.length; n++) {
        //            tam = tam + boton[n].getHeight() + 10;
        //        }
        //        if (panelMini.getHeight() < tam) {
        //            panelMini.setPreferredSize(new java.awt.Dimension(panelMini.getWidth(), panelMini.getHeight() + boton[contimagen].getHeight()));
        //            panelMini.setSize(new java.awt.Dimension(panelMini.getWidth(), panelMini.getHeight() + boton[contimagen].getHeight() + 10));
        //            panelMini.repaint();
        //        }
        redimesionarPanelMini();
        panelMini.revalidate();
        labelTotalPaginas.setText(boton.length + "");
    }

    @Action
    private boolean comprobarValores() {
        boolean valor = true;

        if (textoDirectorio.getText().isEmpty()) {
            utilidades.mensaje(this, "Directorio  de destino", "Debe indicar el directorio de destino");
            botonDirectorio.requestFocus();
            return false;
        }

        if (textoFichero.getText().isEmpty()) {
            utilidades.mensaje(this, "Nombre de Fichero", "Debe indicar el nombre del fichero de destino");
            textoFichero.requestFocus();
            return false;
        }

        return valor;
    }

    private void guardarLote() {
        if (lote.isEmpty()) {
            crearLote();
        }

        proplote = utilidades.leerPropeties(utilidades.dirBase() + utilidades.separador() + "lotes"
                + utilidades.separador() + lote + utilidades.separador() + "lote.ini");
        proplote.setProperty("numpaginas", String.valueOf(contimagen));
        utilidades.escribirPropeties(rutalote + separador + "lote.ini", proplote);
    }

    @Action
    public Boolean guardarPdf() {
        if (contimagen < 1) {
            return false;
        }

        final PantallaBarra pantbarra = new PantallaBarra(PantallaPrincipal.this, false);
        pantbarra.setTitle("Generando fichero de destino");
        pantbarra.botonParar.setVisible(false);
        errorpdf = false;

        new Thread() {
            @Override
            public void run() {
                Document pdfDocument = new Document();
                //                Document pdfDocument = new Document(PageSize.A4, 0, 0, 0, 0);
                Calendar cal = Calendar.getInstance();
                String anio = String.valueOf(cal.get(Calendar.YEAR));
                String mes = String.valueOf((cal.get(Calendar.MONTH) + 1)).length() == 1
                        ? "0" + String.valueOf((cal.get(Calendar.MONTH) + 1))
                        : String.valueOf((cal.get(Calendar.MONTH) + 1));
                String dia = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)).length() == 1
                        ? "0" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH))
                        : String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
                String hora = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)).length() == 1
                        ? "0" + String.valueOf(cal.get(Calendar.HOUR_OF_DAY))
                        : String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
                String minuto = String.valueOf(cal.get(Calendar.MINUTE)).length() == 1
                        ? "0" + String.valueOf(cal.get(Calendar.MINUTE))
                        : String.valueOf(cal.get(Calendar.MINUTE));
                String segundo = String.valueOf(cal.get(Calendar.SECOND)).length() == 1
                        ? "0" + String.valueOf(cal.get(Calendar.SECOND))
                        : String.valueOf(cal.get(Calendar.SECOND));

                try {
                    if (DEBUG) {
                        Utilidades.escribeLog("Generando PDFs -guardarPdf-");
                    }
                    if (contimagen < 2) {
                        pantbarra.barra.setMinimum(1);
                        pantbarra.barra.setMaximum(2);
                    } else {
                        pantbarra.barra.setMinimum(1);
                        pantbarra.barra.setMaximum(rutaboton.length);
                    }
                    pantbarra.barra.setValue(1);
                    pantbarra.setTitle(pantbarra.getTitle());
                    pantbarra.validate();

                    String nombrefichero = "Documentacion.pdf";
                    String ruta = rutalote + separador + nombrefichero + ".pdf";

                    if (!textoFichero.getText().isEmpty()) {
                        nombrefichero = textoFichero.getText() + ".pdf";
                    }

                    if (!textoDirectorio.getText().isEmpty()) {
                        ruta = textoDirectorio.getText();
                        ruta = ruta + separador + nombrefichero;
                    }

                    FileOutputStream ficheroPdf = new FileOutputStream(ruta);
                    File filename = new File(rutaboton[0].toString());
                    java.awt.image.BufferedImage imagen = javax.imageio.ImageIO.read(filename);
                    com.itextpdf.text.Image imagenpdf = com.itextpdf.text.Image.getInstance(imagen, null);
                    pdfDocument.setPageSize(new Rectangle(imagenpdf.getWidth(), imagenpdf.getHeight()));
                    PdfWriter writer = PdfWriter.getInstance(pdfDocument, ficheroPdf);
                    writer.open();
                    pdfDocument.open();
                    pdfDocument.addHeader("IP", lote.substring(16, 19) + "." + lote.substring(19, 22) + "."
                            + lote.substring(22, 25) + "." + lote.substring(25, 28));
                    pdfDocument.addHeader("fechadigita",
                            lote.substring(6, 8) + "/" + lote.substring(4, 6) + "/" + lote.substring(0, 4) + " "
                                    + lote.substring(9, 11) + ":" + lote.substring(11, 13) + ":"
                                    + lote.substring(13, 15));
                    pdfDocument.addHeader("fechacreacion",
                            dia + "/" + mes + "/" + anio + " " + hora + ":" + minuto + ":" + segundo);

                    for (int i = 0; i < rutaboton.length; i++) {
                        filename = new File(rutaboton[i].toString());
                        imagen = javax.imageio.ImageIO.read(filename);
                        imagenpdf = com.itextpdf.text.Image.getInstance(imagen, null);
                        //                        imagenpdf.scaleToFit(PageSize.A4.getWidth(), PageSize.A4.getHeight());
                        //                        imagenpdf.setAlignment(com.itextpdf.text.Image.ALIGN_JUSTIFIED_ALL);
                        //                        com.itextpdf.text.Image instance = com.itextpdf.text.Image.getInstance(imagenpdf);
                        //                        pdfDocument.setPageSize(new com.itextpdf.text.Rectangle(PageSize.A4.getWidth(), PageSize.A4.getHeight()));
                        pantbarra.barra.setValue(i);
                        pantbarra.setTitle(titulo + "     " + (i + 1) + " de " + rutaboton.length);
                        pdfDocument.setPageSize(new Rectangle(imagenpdf.getWidth(), imagenpdf.getHeight()));
                        //                        pdfDocument.add(instance);
                        pdfDocument.add(imagenpdf);
                        pdfDocument.newPage();
                        pantbarra.validate();
                    }
                    pdfDocument.close();
                    writer.close();
                } catch (Exception e) {
                    Utilidades.escribeLog("Error Generando PDFs -guardarPdf- " + e.getMessage());
                    errorpdf = true;
                }
                pantbarra.dispose();
            }
        }.start();
        pantbarra.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
        pantbarra.setVisible(false);
        pantbarra.setVisible(true);
        return !errorpdf;
    }

    private void tiffToPdf(String origen, String destino) {
        try {
            //Read the Tiff File
            RandomAccessFileOrArray myTiffFile = new RandomAccessFileOrArray(origen);
            //Find number of images in Tiff file
            int numberOfPages = TiffImage.getNumberOfPages(myTiffFile);
            //  System.out.println("Number of Images in Tiff File" + numberOfPages);
            com.itextpdf.text.Image tempImage = TiffImage.getTiffImage(myTiffFile, 1);
            Document TifftoPDF = new Document();
            TifftoPDF.setPageSize(new Rectangle(tempImage.getWidth(), tempImage.getHeight()));
            PdfWriter.getInstance(TifftoPDF, new FileOutputStream(destino));
            TifftoPDF.open();
            for (int i = 1; i <= numberOfPages; i++) {
                tempImage = TiffImage.getTiffImage(myTiffFile, i);
                TifftoPDF.setPageSize(new Rectangle(tempImage.getWidth(), tempImage.getHeight()));
                TifftoPDF.add(tempImage);
            }
            TifftoPDF.close();
        } catch (Exception ex) {
            Utilidades.escribeLog("Error al convertir de Tiff a PDF -tiffToPdf- Error " + ex.getMessage());
        }

    }

    private Boolean guardarImagenTipo(String tipo) {
        String nombrefichero = "Documentacion." + tipo.toLowerCase();
        String ruta = rutalote + separador + nombrefichero + "." + tipo.toLowerCase();

        if (!textoFichero.getText().isEmpty()) {
            nombrefichero = textoFichero.getText();
        }

        if (!textoDirectorio.getText().isEmpty()) {
            ruta = textoDirectorio.getText();
            ruta = ruta + separador + nombrefichero + "." + tipo.toLowerCase();
        }
        try {
            File filename = new File(rutaboton[minisel].toString());
            java.awt.image.BufferedImage imagen = javax.imageio.ImageIO.read(filename);
            File fichero = new File(ruta);
            ImageIO.write(imagen, tipo, fichero);
        } catch (Exception ex) {
        }
        return true;
    }

    private Boolean guardarTiff() {
        if (contimagen < 1) {
            return false;
        }

        final PantallaBarra pantbarra = new PantallaBarra(PantallaPrincipal.this, false);
        pantbarra.setTitle("Generando fichero de destino");
        pantbarra.botonParar.setVisible(false);
        errortiff = false;

        new Thread() {
            @Override
            public void run() {
                try {
                    if (contimagen < 2) {
                        pantbarra.barra.setMinimum(1);
                        pantbarra.barra.setMaximum(2);
                    } else {
                        pantbarra.barra.setMinimum(1);
                        pantbarra.barra.setMaximum(rutaboton.length);
                    }
                    pantbarra.barra.setValue(1);
                    pantbarra.setTitle(pantbarra.getTitle());
                    pantbarra.validate();
                    // TIFF Multipgina Comprimido
                    String nombrefichero = "Documentacion.tiff";
                    String ruta = rutalote + separador + nombrefichero + ".tiff";

                    if (!textoFichero.getText().isEmpty()) {
                        nombrefichero = textoFichero.getText();
                    }

                    if (!textoDirectorio.getText().isEmpty()) {
                        ruta = textoDirectorio.getText();
                        ruta = ruta + separador + nombrefichero + ".tiff";
                    }
                    File file = new File(ruta);
                    ImageOutputStream ios = ImageIO.createImageOutputStream(file);
                    ImageWriter writer = ImageIO.getImageWritersByFormatName("tiff").next();
                    writer.setOutput(ios);
                    for (int i = 0; i < rutaboton.length; i++) {
                        File filename = new File(rutaboton[i].toString());
                        java.awt.image.BufferedImage imagen = javax.imageio.ImageIO.read(filename);
                        ImageWriteParam param = writer.getDefaultWriteParam();
                        param.setCompressionMode(param.MODE_EXPLICIT);
                        String compresion = "LZW";
                        int tipoimagen = imagen.getType();
                        if (tipoimagen == java.awt.image.BufferedImage.TYPE_BYTE_BINARY) {
                            compresion = "CCITT T.6";
                        }
                        param.setCompressionType(compresion);
                        IIOImage img = new IIOImage(imagen, null, null);
                        if (i == 0) {
                            writer.write(null, img, param);
                        } else {
                            writer.writeInsert(-1, img, param);
                        }
                        pantbarra.barra.setValue(i);
                        pantbarra.setTitle(titulo + "     " + (i + 1) + " de " + rutaboton.length);
                        pantbarra.validate();
                    }
                    ios.flush();
                    ios.close();
                    writer.dispose();
                    //tiffToPdf(ruta, ruta.replace(".tiff", ".pdf"));
                } catch (IOException ex) {
                    Utilidades.escribeLog("Error al guardar el fichero TIFF multipagina  - " + ex.getMessage());
                    errortiff = false;
                }

                pantbarra.dispose();
            }
        }.start();
        pantbarra.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
        pantbarra.setVisible(false);
        pantbarra.setVisible(true);

        return errortiff;
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
    }

    public void negotiate(ScannerIOMetadata metadata) {

        /*
         * ScannerDevice sd=metadata.getDevice(); // SANE & TWAIN try{ //
         * sd.setShowUserInterface(false); // sd.setShowProgressBar(false); //
         * Twain: works only if user interface is inactive
         * sd.setResolution(100.0); // set resolution in dots per inch //
         * sd.setRegionOfInterest(20,40,600,400); // set region of interest to
         * x,y,width,height in pixels //
         * sd.setRegionOfInterest(20.5,45.0,66.66,40.0); // set region of
         * interest to x,y,width,height in millimeters }catch(Exception e){
         * Utilidades.escribeLog("9\b"+e.getMessage()); //
         * metadata.setCancel(true); // cancel scan if we can't set it up our
         * way }
         */

        if (metadata instanceof TwainIOMetadata) { // TWAIN only!
            TwainSource source = ((TwainIOMetadata) metadata).getSource();
            try {
                //                TwainCapability[] caps = source.getCapabilities();

                if (escanerconfig) {
                    contraste = source.getCapability(TwainConstants.ICAP_CONTRAST, 4);
                    brillo = source.getCapability(TwainConstants.ICAP_BRIGHTNESS, 4);

                    resolucion = source.getCapability(TwainConstants.ICAP_XRESOLUTION);

                    Vector comboBoxItems = new Vector();
                    //                    for (int v = 0; v < resolucion.getItems().length; v++) {
                    //                        String valor = resolucion.getItems()[v].toString();
                    //                        double d = Double.parseDouble(valor);
                    //                        int i = (int) d;
                    //
                    //                        Utilidades.escribeLog("" + i);
                    //
                    //                        comboBoxItems.add("" + i);
                    //                    }
                    comboBoxItems.add("200");
                    comboBoxItems.add("400");
                    comboBoxItems.add("600");

                    final DefaultComboBoxModel model = new DefaultComboBoxModel(comboBoxItems);
                    comboResolucion.setModel(model);

                    escanerconfig = false;
                    source.setShowProgressBar(false);
                    source.setShowUI(false);
                    source.setCancel(true);
                    return;
                }

                //                TwainCapability alimentador = source.getCapability(TwainConstants.CAP_FEEDERENABLED);
                //                  resolucion = source.getCapability(TwainConstants.ICAP_AUTODISCARDBLANKPAGES);
                //                resolucion = source.getCapability(TwainConstants.ICAP_COMPRESSION);
                //
                //                for (int v = 0; v < resolucion.getItems().length; v++) {
                //                    String valor = resolucion.getItems()[v].toString();
                //                   Utilidades.escribeLog("Compression - " + valor);
                //                }

                //                brillo = source.getCapability(TwainConstants.ICAP_BRIGHTNESS);
                //                for (int v = 0; v < brillo.getItems().length; v++) {
                //                    String valor = brillo.getItems()[v].toString();
                //                    Utilidades.escribeLog("" + valor);
                //                }

            } catch (Exception ex) {
                Utilidades.escribeLog("Error en 'negotiate' - " + ex.getMessage());
            }

            aplicarConfiguracionEscaner(source);

            /*
             * String[] names=TwainIdentity.getProductNames(); // let's see what
             * data sources we have for(int i=0;i<names.length;i++){
             * Utilidades.escribeLog(names[i]); }
             *
             * TwainIdentity[] list=TwainIdentity.getIdentities(); for(int
             * i=0;i<list.length;i++){
             * Utilidades.escribeLog(list[i].toString()); }
             */

            /*
             * try { TwainCapability[] caps = source.getCapabilities(); // print
             * out // all the // capabilities for (int i = 0; i < caps.length;
             * i++) { Utilidades.escribeLog(caps[i].toString()); } } catch
             * (Exception e) { Utilidades.escribeLog("9\b" + e.getMessage()); }
             *
             */

            /*
             * // use automatic document feeder, scan 5 pages try{ int
             * transferCount=5;
             * source.setCapability(TwainConstants.CAP_FEEDERENABLED,true);
             * source.setCapability(TwainConstants.CAP_AUTOFEED,true);
             *
             * // source.setCapability(TwainConstants.CAP_AUTOSCAN,true); //
             * System
             * .err.println(source.getCapability(TwainConstants.CAP_AUTOSCAN
             * ).toString());
             *
             * source.setCapability(TwainConstants.CAP_XFERCOUNT,transferCount);
             * transferCount
             * =source.getCapability(TwainConstants.CAP_XFERCOUNT).intValue();
             * System.err.println("set transferCount: "+transferCount);
             * }catch(Exception e){ Utilidades.escribeLog(
             * "9\bCAP_FEEDERENABLED/CAP_AUTOFEED/CAP_XFERCOUNT: "
             * +e.getMessage()); // metadata.setCancel(true); // negotiation
             * failed let's try to abort scan }
             */
            /*
             * try{ // source.setXferMech(TwainConstants.TWSX_NATIVE); // send
             * image as BufferedImage (default)
             *
             * // source.setXferMech(TwainConstants.TWSX_MEMORY); // send image
             * as byte[] blocks (not implemented here yet)
             *
             * source.setXferMech(TwainConstants.TWSX_FILE); // send image as
             * file // source.setImageFileFormat(TwainConstants.TWFF_BMP); //
             * set file format to bmp (must be supported by all sources)
             * source.setImageFileFormat(TwainConstants.TWFF_JFIF); // set file
             * format to jpeg
             *
             * // source.setImageFileFormat(TwainConstants.TWFF_TIFF); // set
             * file format to tiff if supported otherwise use last settings //
             * i.e. source's default. The default does not have to be bmp!
             * Utilidades.escribeLog();
             * Utilidades.escribeLog(source.getCapability(TwainConstants
             * .ICAP_XFERMECH).toString());
             * Utilidades.escribeLog(source.getCapability
             * (TwainConstants.ICAP_IMAGEFILEFORMAT).toString());
             * Utilidades.escribeLog(); }catch(Exception e){
             * Utilidades.escribeLog("9\bTransfer Mechanism : "+e.getMessage());
             * }
             */
            /*
             * try{ // set Black/White aka Lineart
             * source.setCapability(TwainConstants
             * .ICAP_PIXELTYPE,TwainConstants.TWPT_BW);
             * Utilidades.escribeLog(source
             * .getCapability(TwainConstants.ICAP_PIXELTYPE).toString());
             * }catch(Exception e){ Utilidades.escribeLog("9\bPixel Type:
             * "+e.getMessage()); }
             */
            /*
             * try{ int TWSS_NONE = 0; int TWSS_A4LETTER = 1; int TWSS_USLETTER
             * = 3; int TWSS_USLEGAL = 4;
             *
             * TwainCapability
             * tc=source.getCapability(TwainConstants.ICAP_SUPPORTEDSIZES);
             * if(tc.querySupport(TwainConstants.TWQC_SET)){ // is set operation
             * allowed Utilidades.escribeLog(tc.toString());
             * tc.setCurrentValue(TWSS_A4LETTER);
             * Utilidades.escribeLog(source.getCapability
             * (TwainConstants.ICAP_SUPPORTEDSIZES).toString()); }
             * }catch(Exception e){ Utilidades.escribeLog("9\bPaper Sizes:
             * "+e.getMessage()); }
             */

        }
        /*
         * if(metadata instanceof TwainIOMetadata){ // TWAIN only! TwainSource
         * source=((TwainIOMetadata)metadata).getSource(); try{ // set
         * Black/White aka Lineart
         * source.setCapability(TwainConstants.ICAP_PIXELTYPE
         * ,TwainConstants.TWPT_BW);
         * Utilidades.escribeLog(source.getCapability(TwainConstants
         * .ICAP_PIXELTYPE).toString());
         *
         * source.setCapability(TwainConstants.ICAP_THRESHOLD,40.0);
         * Utilidades.escribeLog
         * (source.getCapability(TwainConstants.ICAP_THRESHOLD).toString());
         * }catch(Exception e){ Utilidades.escribeLog("9\bPixel Type:
         * "+e.getMessage()); } }
         */
        /*
         * if(metadata instanceof TwainIOMetadata){ // TWAIN only! TwainSource
         * source=((TwainIOMetadata)metadata).getSource(); try{
         * source.setCapability
         * (TwainConstants.ICAP_PIXELTYPE,TwainConstants.TWPT_GRAY);
         * Utilidades.escribeLog
         * (source.getCapability(TwainConstants.ICAP_PIXELTYPE).toString());
         * source.setCapability(TwainConstants.ICAP_AUTOBRIGHT,false);
         * System.out
         * .println(source.getCapability(TwainConstants.ICAP_AUTOBRIGHT
         * ).toString());
         * source.setCapability(TwainConstants.ICAP_BRIGHTNESS,-800.0);
         * System.out
         * .println(source.getCapability(TwainConstants.ICAP_BRIGHTNESS
         * ).toString()); //
         * source.setCapability(TwainConstants.ICAP_CONTRAST,500); //
         * System.out.
         * println(source.getCapability(TwainConstants.ICAP_CONTRAST).
         * toString()); }catch(Exception e){ Utilidades.escribeLog("9\bPixel
         * Type: "+e.getMessage()); } }
         */
    }

    public void importarImagenes() {
        try {
            String fichero = rutadigita + separador + "escaner.ini";
            propiniescaner = utilidades.leerPropeties(fichero);

            String ruta = propiniescaner.getProperty("RutaImportar");
            JFileChooser fc = new JFileChooser(ruta);

            fc.addChoosableFileFilter(new ExtensionFileFilter(
                    new String[] { ".GIF", ".JPG", ".JPEG", ".BMP", ".PNG", ".TIF", ".TIFF", ".PDF" },
                    "Imagenes (*.GIF|JPG|JPEG|BMP|PNG|TIF|TIFF|PDF)"));
            //fc.addChoosableFileFilter(new ExtensionFileFilter(new String[]{".PDF"}, "Ficheros PDF (*.PDF)"));
            //     fc.addChoosableFileFilter(new ExtensionFileFilter(null, null));
            fc.setAcceptAllFileFilterUsed(false);

            int x = fc.showOpenDialog(this);
            if (x == JFileChooser.CANCEL_OPTION || x == JFileChooser.ERROR_OPTION) {
                return;
            }

            File fileImagen = fc.getSelectedFile();
            ruta = fc.getSelectedFile().getParent();
            propiniescaner.setProperty("RutaImportar", ruta);
            utilidades.escribirPropeties(fichero, propiniescaner);

            String extension = fileImagen.getName()
                    .substring(fileImagen.getName().lastIndexOf('.') + 1, fileImagen.getName().length())
                    .toLowerCase();
            //           fc = null;

            if (rutalote.equals("")) {
                crearLote();
            }
            desdemin = false;

            if (extension.equals("pdf")) {
                importarDePdf(fileImagen);

            } else if (extension.endsWith("jpg") || extension.endsWith("gif") || extension.endsWith("jpeg")
                    || extension.endsWith("bmp") || extension.endsWith("png")) {
                java.awt.image.BufferedImage imagen = javax.imageio.ImageIO.read(fileImagen);
                if (fileImagen != null) {
                    imagen = pantutil.convertirAGris((java.awt.image.BufferedImage) imagen);
                    guardarImagen(imagen, contimagen);
                    pintarImagen(imagen);
                    cargarMiniaturas(contimagen);
                    ponerBordeBoton(contimagen);
                    javax.swing.SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            JScrollBar bar = panelVisorMini.getVerticalScrollBar();
                            bar.setValue(bar.getMaximum());
                        }
                    });
                    contimagen++;
                }
            } else if (extension.endsWith("tif") || extension.endsWith("tiff")) {
                importarTiff(fileImagen);
            }
        } catch (IOException ex) {
            Utilidades.escribeLog("Error en -importarImagenes- Importando Imgenes - " + ex.getMessage());

        }
    }

    public void importarDeFichero(String fichero) {
        try {
            File fileImagen = new File(fichero);
            String extension = fileImagen.getName()
                    .substring(fileImagen.getName().lastIndexOf('.') + 1, fileImagen.getName().length())
                    .toLowerCase();

            if (rutalote.equals("")) {
                crearLote();
            }
            desdemin = false;

            if (extension.equals("pdf")) {
                importarDePdf(fileImagen);

            } else if (extension.endsWith("jpg") || extension.endsWith("gif") || extension.endsWith("jpeg")
                    || extension.endsWith("bmp") || extension.endsWith("png")) {
                java.awt.image.BufferedImage imagen = javax.imageio.ImageIO.read(fileImagen);
                if (fileImagen != null) {
                    imagen = pantutil.convertirAGris((java.awt.image.BufferedImage) imagen);
                    guardarImagen(imagen, contimagen);
                    pintarImagen(imagen);
                    cargarMiniaturas(contimagen);
                    ponerBordeBoton(contimagen);
                    javax.swing.SwingUtilities.invokeLater(new Runnable() {
                        public void run() {
                            JScrollBar bar = panelVisorMini.getVerticalScrollBar();
                            bar.setValue(bar.getMaximum());
                        }
                    });
                    contimagen++;
                }
            } else if (extension.endsWith("tif") || extension.endsWith("tiff")) {
                importarTiff(fileImagen);
            }
        } catch (IOException ex) {
            Utilidades.escribeLog("Error en -importarImagenDirecta- Importando Imgenes - " + ex.getMessage());

        }

    }

    public void importarTiff(final File archivo) {
        ImageIO.scanForPlugins();
        final PantallaBarra pantbarra = new PantallaBarra(this, false);

        new Thread() {
            @Override
            public void run() {
                int numpaginas = 0;
                try {
                    numpaginas = pantutil.numPaginasTIFF(archivo.getAbsolutePath());
                } catch (Exception ex) {
                    Utilidades.escribeLog("Error -importarTiff- al obtener el nmero de pginas del fichero TIFF "
                            + archivo.getAbsolutePath() + " - " + ex.getMessage());
                }
                if (DEBUG) {
                    Utilidades.escribeLog("TIFF multipgina, nmero de pginas: " + numpaginas);
                }
                java.awt.image.BufferedImage tmpimagen = null;
                pantbarra.barra.setMinimum(1);
                pantbarra.barra.setMaximum(numpaginas);
                String titulo = pantbarra.getTitle();
                for (int i = 0; i < numpaginas; i++) {
                    try {
                        tmpimagen = (java.awt.image.BufferedImage) pantutil
                                .loadImagenTIFF(archivo.getAbsolutePath(), i);
                        if (tmpimagen.getType() != BufferedImage.TYPE_BYTE_BINARY) {
                            tmpimagen = pantutil.convertirAGris((java.awt.image.BufferedImage) tmpimagen);
                        }
                    } catch (Exception ex) {
                        Utilidades.escribeLog("Error -importarTiff- al cargar imagen del fichero TIFF "
                                + archivo.getAbsolutePath() + " - " + ex.getMessage());
                        pantbarra.dispose();
                    }
                    if (archivo != null) {
                        guardarImagen(tmpimagen, contimagen);
                        cargarMiniaturas(contimagen);
                        JScrollBar bar = panelVisorMini.getVerticalScrollBar();
                        bar.setValue(bar.getMaximum());
                        pantbarra.barra.setValue(i);
                        pantbarra.setTitle(titulo + "     " + (i + 1) + " de " + numpaginas);
                        contimagen++;
                    }
                    if (pantbarra.PARAR) {
                        break;
                    }
                }
                JScrollBar bar = panelVisorMini.getVerticalScrollBar();
                if (pantbarra.PARAR) {
                    pintarImagenPorIndice(0);
                    ponerBordeBoton(0);
                    bar.setValue(bar.getMinimum());
                } else {
                    pintarImagen(tmpimagen);
                    ponerBordeBoton(contimagen - 1);
                    bar.setValue(bar.getMaximum());
                }
                pantbarra.dispose();
            }
        }.start();
        pantbarra.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
        pantbarra.setVisible(false);
        pantbarra.setVisible(true);
    }

    public void importarDePdf(final File archivo) {
        final PantallaBarra pantbarra = new PantallaBarra(PantallaPrincipal.this, false);

        new Thread() {
            @Override
            public void run() {
                org.apache.pdfbox.pdmodel.PDDocument documento = null;
                try {
                    documento = org.apache.pdfbox.pdmodel.PDDocument.load(archivo);
                } catch (IOException ex) {
                    Utilidades.escribeLog("Error -importarDePdf- al importar del archivo PDF "
                            + archivo.getAbsolutePath() + " - " + ex.getMessage());
                    return;
                }
                int startpage = 1;
                int endpage = Integer.MAX_VALUE;
                List pages = documento.getDocumentCatalog().getAllPages();
                String titulo = pantbarra.getTitle();
                pantbarra.barra.setMinimum(startpage);
                pantbarra.barra.setMaximum(pages.size());
                pantbarra.barra.setValue(1);
                for (int i = startpage - 1; i < endpage && i < pages.size(); i++) {
                    PDPage page = (PDPage) pages.get(i);
                    java.awt.image.BufferedImage imagenpdf = null;
                    try {
                        imagenpdf = page.convertToImage(BufferedImage.TYPE_BYTE_GRAY, 200);
                    } catch (IOException ex) {
                        Utilidades.escribeLog("Error -importarDePdf- al convertir Imagen de PDF a Escala de Grises "
                                + " - " + ex.getMessage());
                    }
                    //  Utilidades.escribeLog("Numero bits por pixel :"+imagenpdf.getColorModel().getPixelSize());

                    //   imagenpdf = pantutil.convertirAGris((java.awt.image.BufferedImage) imagenpdf);
                    guardarImagen(imagenpdf, contimagen);
                    cargarMiniaturas(contimagen);
                    JScrollBar bar = panelVisorMini.getVerticalScrollBar();
                    bar.setValue(bar.getMaximum());
                    pantbarra.barra.setValue(i);
                    pantbarra.setTitle(titulo + "     " + (i + 1) + " de " + pages.size());
                    contimagen++;
                    doLayout();
                    if (pantbarra.PARAR) {

                        break;
                    }
                }

                PDPage page = (PDPage) pages.get(pages.size() - 1);
                java.awt.image.BufferedImage imagenpdf = null;
                try {
                    imagenpdf = page.convertToImage();
                    imagenpdf = pantutil.convertirAGris((java.awt.image.BufferedImage) imagenpdf);
                    documento.close();
                } catch (IOException ex) {
                    Utilidades.escribeLog("Error -importarDePdf- al convertir Imagen de PDF a Escala de Grises "
                            + " - " + ex.getMessage());
                }
                JScrollBar bar = panelVisorMini.getVerticalScrollBar();
                if (pantbarra.PARAR) {
                    pintarImagenPorIndice(0);
                    ponerBordeBoton(0);
                    bar.setValue(bar.getMinimum());
                } else {
                    pintarImagen(imagenpdf);
                    ponerBordeBoton(contimagen - 1);
                    bar.setValue(bar.getMaximum());
                }
                pantbarra.dispose();
            }
        }.start();
        pantbarra.setModalityType(Dialog.ModalityType.APPLICATION_MODAL);
        pantbarra.setVisible(false);
        pantbarra.setVisible(true);
    }

    public void redimesionarPanelMini() {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
            }
        });
        int tam = 10;
        for (int n = 0; n < boton.length; n++) {
            tam = tam + boton[n].getHeight() + 10;
        }

        if (panelVisorMini.getHeight() < tam + 20) {
            panelMini.setPreferredSize(new java.awt.Dimension(panelMini.getWidth(), tam + 20));
            panelMini.setSize(new java.awt.Dimension(panelMini.getWidth(), tam + 20));
            panelMini.repaint();
        }
    }

    public void cargarMiniaturas(int conta) {
        boton = (JButton[]) utilidades.resizeArray(boton, conta + 1);
        boton[conta] = new JButton();
        rutaboton = (String[]) utilidades.resizeArray(rutaboton, conta + 1);
        rutaboton[conta] = new String();
        rutaboton[conta] = rutalote + separador + "Imagen" + conta + ".tif";
        String nombre = "" + conta;
        boton[conta].setActionCommand(nombre);
        //nombre = "boton" + contimagen;
        //   boton[contimagen].setText(nombre);

        boton[conta].setContentAreaFilled(false);

        boton[conta].setSize(127, 127);
        boton[conta].addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                try {
                    JButton evento = (JButton) evt.getSource();
                    //   Utilidades.escribeLog("apretado el boton " + evento.getActionCommand());
                    desdemin = true;
                    minisel = Integer.parseInt(evento.getActionCommand());
                    pintarImagenPorIndice(Integer.parseInt(evento.getActionCommand()));
                    ponerBordeBoton(Integer.parseInt(evento.getActionCommand()));
                    labelNumPaginas.setText(minisel + 1 + "");
                } catch (Exception ex) {
                    Utilidades.escribeLog("Error al cargar Miniaturas " + " - " + ex.getMessage());
                }
            }
        });
        minisel = conta;
        pintarMiniaturaPorIndice(conta);
        redimesionarPanelMini();
        labelNumPaginas.setText(conta + 1 + "");
        labelTotalPaginas.setText(boton.length + "");
    }

    private void quitarBordeBotones() {
        for (int n = 0; n < boton.length; n++) {
            boton[n].setVisible(false);
            boton[n].setBorder(null);
            boton[n].setBorderPainted(false);
            boton[n].setVisible(true);
            panelMini.validate();
        }
    }

    private void ponerBordeBoton(int n) {
        if (n < boton.length) {
            quitarBordeBotones();
            boton[n].setBorder(BorderFactory.createLineBorder(Color.BLACK));
            boton[n].setBorderPainted(true);
        }
    }

    public void repintarPanelMini() {
        //   int i = 0;

        int y = 10;
        if (minisel > 0) {
            y = boton[minisel - 1].getY();
        }
        int largoh = 90;
        int largov = 127;
        int largo = 0;
        boolean unavez = true;
        int a = 0;

        while (a < contimagen && rutaboton[a].equals("borrado")) {
            a++;
        }
        int numero1 = a;

        for (int i = minisel + 1; i < contimagen; i++) {
            if (rutaboton[i].equals("borrado")) {
                continue;
            }
            if (minisel == numero1 && unavez) {
                if (boton[i].getWidth() < boton[i].getHeight()) {
                    boton[i].setBounds(35, 10, 90, 127);
                } else {
                    boton[i].setBounds(20, 10, 127, 90);
                }
                unavez = false;

            } else {
                if (boton[i].getWidth() < boton[i].getHeight()) {
                    largo = largo + largov;
                    boton[i].setBounds(35, y + largo + 10, 90, 127);

                } else {
                    largo = largo + largoh;
                    boton[i].setBounds(20, y + largo + 10, 127, 90);
                }
            }
            y = y + 5;
        }

    }

    public void pintarMiniaturaPorIndice(int cont) {
        ImageIcon icono = new ImageIcon(rutalote + separador + "Imagenmin" + cont + ".jpg");
        icono.getImage().flush();
        icono = new ImageIcon(rutalote + separador + "Imagenmin" + cont + ".jpg");

        boton[cont].setIcon(icono);
        boton[cont].setBorder(null);
        boton[cont].setBorderPainted(false);

        if (cont > 0) {
            boton[cont].setBounds(20, boton[cont - 1].getY() + boton[cont - 1].getHeight() + 10, 127, 127);
        } else {
            boton[cont].setBounds(20, 10, 127, 127);
        }

        boton[cont].setVisible(true);
        panelMini.add(boton[cont]);

        int tam = 0;

        for (int n = 0; n < boton.length; n++) {
            tam = tam + boton[n].getHeight() + 10;
        }

        if (panelMini.getHeight() < tam) {
            panelMini.setPreferredSize(
                    new java.awt.Dimension(panelMini.getWidth(), panelMini.getHeight() + boton[cont].getHeight()));
            panelMini.setSize(new java.awt.Dimension(panelMini.getWidth(),
                    panelMini.getHeight() + boton[cont].getHeight() + 10));
            panelMini.repaint();
        }
    }

    public void pintarImagen(java.awt.image.BufferedImage imagen) {
        try {
            pd = null;
            pd = new es.jscan.Pantallas.PanelDibujo(imagen);
            pd.setAutoscrolls(true);
            pd.setVisible(true);
            pd.setSize(new java.awt.Dimension(imagen.getWidth(), imagen.getHeight()));
            pd.repaint();
            panelImagen.setPreferredSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.setSize(new java.awt.Dimension(imagen.getWidth(), imagen.getHeight()));
            panelImagen.removeAll();
            panelImagen.add(pd);
            pd.ajustarAncho(panelVisorImagen.getWidth());
            panelImagen.setPreferredSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.setSize(new java.awt.Dimension(pd.getWidth(), pd.getHeight()));
            panelImagen.repaint();
            panelVisorImagen.setPreferredSize(new java.awt.Dimension(panelIconosImagen.getWidth(),
                    scrollImagenes.getHeight() - panelIconosImagen.getHeight() - 8));
            panelVisorImagen.setSize(new java.awt.Dimension(panelIconosImagen.getWidth(),
                    scrollImagenes.getHeight() - panelIconosImagen.getHeight() - 8));
            panelVisorImagen.repaint();

            etiquetaCB.setText("");
            repaint();
            System.gc();

        } catch (Exception ex) {
            Utilidades.escribeLog("Error al pintar Imagen " + " - " + ex.getMessage());
        }
    }

    private void crearLote() {
        Calendar cal = Calendar.getInstance();

        String anio = String.valueOf(cal.get(Calendar.YEAR));
        String mes = String.valueOf((cal.get(Calendar.MONTH) + 1)).length() == 1
                ? "0" + String.valueOf((cal.get(Calendar.MONTH) + 1))
                : String.valueOf((cal.get(Calendar.MONTH) + 1));
        String dia = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH))
                : String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
        String hora = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.HOUR_OF_DAY))
                : String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
        String minuto = String.valueOf(cal.get(Calendar.MINUTE)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.MINUTE))
                : String.valueOf(cal.get(Calendar.MINUTE));
        String segundo = String.valueOf(cal.get(Calendar.SECOND)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.SECOND))
                : String.valueOf(cal.get(Calendar.SECOND));

        String fecha = anio + mes + dia + "-" + hora + minuto + segundo;

        lote = fecha + "-" + utilidades.ip().replace(".", "");
        rutalote = rutadigita + separador + "lotes" + separador + lote;
        rutapendiente = rutadigita + separador + "pendientes";
        utilidades.crearDirectorio(rutalote);
        contimagen = 0;

        utilidades.crearFichero(rutalote + separador + "lote.ini", "texto");
        Properties props = new Properties();
        fecha = dia + "/" + mes + "/" + anio + " " + hora + ":" + minuto + ":" + segundo;
        //      Utilidades.escribeLog(fecha);
        props.setProperty("fecha", fecha);
        props.setProperty("Escaner", nombreEscaner.getText());
        props.setProperty("Resolucion", comboResolucion.getSelectedItem().toString());
        props.setProperty("Duplex", checkDuplex.isSelected() ? "S" : "N");
        props.setProperty("Color", comboColor.getSelectedItem().toString());

        utilidades.escribirPropeties(rutalote + separador + "lote.ini", props);
    }

    private void cargarlote(String lote) {
        inicializar();
        this.lote = lote;
        rutalote = utilidades.dirBase() + utilidades.separador() + "lotes" + utilidades.separador() + lote;
        rutapendiente = utilidades.dirBase() + utilidades.separador() + "pendientes";

        proplote = utilidades.leerPropeties(utilidades.dirBase() + utilidades.separador() + "lotes"
                + utilidades.separador() + lote + utilidades.separador() + "lote.ini");

        if (proplote.getProperty("numpaginas") == null) {
            utilidades.mensaje(this, "Carga del lote " + lote,
                    "Imposible cargar el lote, no est indicado el nmero de pginas en el fichero " + rutalote
                            + utilidades.separador() + "lote.ini");
            return;
        }
        nombreEscaner.setText(proplote.getProperty("Escaner"));
        checkDuplex.setSelected((proplote.getProperty("Duplex").equals("S") ? true : false));

        int posicion = 0;
        for (int i = 0; i < comboColor.getModel().getSize(); i++) {
            if (comboColor.getModel().getElementAt(i).equals(proplote.getProperty("Color"))) {
                posicion = i;
                break;
            }
        }
        comboColor.setSelectedIndex(posicion);

        posicion = 0;
        for (int i = 0; i < comboResolucion.getModel().getSize(); i++) {
            if (comboResolucion.getModel().getElementAt(i).equals(proplote.getProperty("Resolucion"))) {
                posicion = i;
                break;
            }
        }
        comboResolucion.setSelectedIndex(posicion);

        contimagen = Integer.parseInt(proplote.getProperty("numpaginas"));

        for (int i = 0; i < contimagen; i++) {
            cargarMiniaturas(i);
        }
        pintarImagenPorIndice(contimagen - 1);
    }

    private void inicializar() {
        contimagen = 0;
        rutalote = "";
        lote = "";
        rutapendiente = "";
        pd = null;
        boton = new JButton[1];
        rutaboton = new String[1];
        panelImagen.removeAll();
        panelImagen.setSize(panelVisorImagen.getWidth(), panelVisorImagen.getHeight());
        panelImagen.setPreferredSize(
                new java.awt.Dimension(panelVisorImagen.getWidth(), panelVisorImagen.getHeight()));
        panelMini.removeAll();
        panelMini.setSize(panelMini.getWidth(), panelImagen.getHeight() + panelIconosImagen.getHeight());
        panelMini.setPreferredSize(new java.awt.Dimension(panelMini.getWidth(),
                panelImagen.getHeight() + panelIconosImagen.getHeight()));
        listaMultiAdjuntos.clear();
        multiAdjuntos = false;
        repaint();
        labelNumPaginas.setText("0");
        labelTotalPaginas.setText("0");
        System.gc();
    }

    private void pintarImagenPorIndice(int numimagen) {
        String rutaimagen = rutaboton[numimagen].toString();
        File ficherosel = new File(rutaimagen);
        java.awt.image.BufferedImage miimage = null;
        try {
            miimage = javax.imageio.ImageIO.read(ficherosel);
        } catch (IOException ex) {
            Utilidades.escribeLog("Error -pintarImagenPorIndice- al pintar imagen por nmero " + ex.getMessage());
        }
        pintarImagen(miimage);
        labelNumPaginas.setText(numimagen + 1 + "");
    }

    private void aplicarConfiguracionEscaner(TwainSource source) {
        int valor = 0;
        double decimal = 0;

        try {
            //            Utilidades.escribeLog("Resolucin: " + source.getCapability(TwainConstants.ICAP_XRESOLUTION));
            source.setShowUI(false);
            source.setShowProgressBar(false);
            source.setCapability(TwainConstants.ICAP_SUPPORTEDSIZES, 1); // 1 es A4
        } catch (ScannerIOException ex) {
            Utilidades.escribeLog(
                    "Error al aplicar configuracin Escaner - Tamao de pgina A4 " + " - " + ex.getMessage());
        }

        if (comboColor.getItemAt(comboColor.getSelectedIndex()).toString().toLowerCase().contains("color")) {
            valor = TwainConstants.TWPT_RGB;
        } else if (comboColor.getItemAt(comboColor.getSelectedIndex()).toString().toLowerCase()
                .contains("grises")) {
            valor = TwainConstants.TWPT_GRAY;
        } else if (comboColor.getItemAt(comboColor.getSelectedIndex()).toString().toLowerCase()
                .contains("blanco")) {
            valor = TwainConstants.TWPT_BW;
        }

        try {
            source.setCapability(TwainConstants.ICAP_PIXELTYPE, valor);
        } catch (ScannerIOException ex) {
            Utilidades.escribeLog("Excepcin al establecer la propiedad del escaner Color -> " + ex.getMessage());
        }

        //        try {
        //            // TWBP_AUTO -1
        //            // TWBP_DISABLE -2
        //            source.setCapability(TwainConstants.ICAP_AUTODISCARDBLANKPAGES, -1);
        //        } catch (ScannerIOException ex) {
        //            Utilidades.escribeLog("Excepcin al establecer la propiedad ICAP_AUTODISCARDBLANKPAGES -> " + ex.getMessage());
        //        }

        valor = Integer.parseInt(comboResolucion.getItemAt(comboResolucion.getSelectedIndex()).toString());

        try {
            source.setResolution(valor);
        } catch (ScannerIOException ex) {
            Utilidades.escribeLog(
                    "Excepcin al establecer la propiedad del escaner Resolucin -> " + ex.getMessage());
        }

        try {
            source.setCapability(TwainConstants.CAP_DUPLEXENABLED, checkDuplex.isSelected());
            //      source.setCapability(TwainConstants.ICAP_COMPRESSION, 4);
            //  Utilidades.escribeLog(alimentador.getName().);
            /*
             * for (int i = 0; i < caps.length; i++) {
             * Utilidades.escribeLog(caps[i].toString());
             * Utilidades.escribeLog(caps[i].getName()); }
             */
            //source.setCapability(TwainConstants.CAP_FEEDERENABLED, true);
            // source.setCapability(TwainConstants.CAP_AUTOFEED, true);
            //     source.setImageFileFormat(4);
            //    source.setCapability(TwainConstants.ICAP_COMPRESSION, 5);
            //    source.setCapability(TwainConstants.CAP_DUPLEX, false);
            //    source.setCapability(TwainConstants.ICAP_COMPRESSION, TwainConstants.TWFF_JFIF);
            //  source.setCapability(TwainConstants.ICAP_YSCALING,0.25);

        } catch (ScannerIOException ex) {
            Utilidades.escribeLog("Excepcin al establecer la propiedad del escaner Duplex -> " + ex.getMessage());
        }

        decimal = Double.parseDouble(contraste.getItems()[sliderContraste.getValue()].toString());

        try {
            //   Utilidades.escribeLog("Contraste: " + source.getCapability(TwainConstants.ICAP_CONTRAST).toString());
            if (DEBUG) {
                Utilidades.escribeLog("Contraste: " + decimal + " - " + sliderContraste.getValue());
            }
            source.setCapability(TwainConstants.ICAP_CONTRAST, decimal);
        } catch (ScannerIOException ex) {
            Utilidades.escribeLog(
                    "Excepcin al establecer la propiedad del escaner Contraste -> " + ex.getMessage());
        }

        decimal = 0;
        decimal = Double.parseDouble(brillo.getItems()[sliderBrillo.getValue()].toString());

        try {
            //    Utilidades.escribeLog("Contraste: " + source.getCapability(TwainConstants.ICAP_BRIGHTNESS).toString());
            if (DEBUG) {
                Utilidades.escribeLog("Brillo: " + decimal + " - " + sliderBrillo.getValue());
            }
            source.setCapability(TwainConstants.ICAP_BRIGHTNESS, decimal);
        } catch (ScannerIOException ex) {
            Utilidades.escribeLog("Excepcin al establecer la propiedad del escaner Brillo -> " + ex.getMessage());
        }
    }

    public void activarDebug(Boolean activar) {
        opcionDebug.setSelected(activar);
    }

    @Action
    private void mostrarLotes() {
        String loteori = lote;
        PantallaLotesGuardados lotes = new PantallaLotesGuardados(this, true);
        if (lote.length() >= 28 && !lote.equals(loteori)) {
            cargarlote(lote);
        } else {
            lote = loteori;
        }

    }

    public void borrarLote(String loteborrar) {
        //  Utilidades.escribeLog(utilidades.dirBase() + utilidades.separador() + "lotes" + utilidades.separador() + lote);
        if (loteborrar.length() >= 28) {
            utilidades.borrarDirectorio(
                    utilidades.dirBase() + utilidades.separador() + "lotes" + utilidades.separador() + loteborrar);
        }
    }

    private void crearXmlLote(String lote) {
        Calendar cal = Calendar.getInstance();
        String anio = String.valueOf(cal.get(Calendar.YEAR));
        String mes = String.valueOf((cal.get(Calendar.MONTH) + 1)).length() == 1
                ? "0" + String.valueOf((cal.get(Calendar.MONTH) + 1))
                : String.valueOf((cal.get(Calendar.MONTH) + 1));
        String dia = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH))
                : String.valueOf(cal.get(Calendar.DAY_OF_MONTH));
        String hora = String.valueOf(cal.get(Calendar.HOUR_OF_DAY)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.HOUR_OF_DAY))
                : String.valueOf(cal.get(Calendar.HOUR_OF_DAY));
        String minuto = String.valueOf(cal.get(Calendar.MINUTE)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.MINUTE))
                : String.valueOf(cal.get(Calendar.MINUTE));
        String segundo = String.valueOf(cal.get(Calendar.SECOND)).length() == 1
                ? "0" + String.valueOf(cal.get(Calendar.SECOND))
                : String.valueOf(cal.get(Calendar.SECOND));

        String dirorigen = rutadigita + separador + "lotes" + separador + lote + separador;
        File dir = new File(dirorigen);

        FilenameFilter filtropdf = new FiltroPdf();
        String ficheros[] = dir.list(filtropdf);

        String ficheroxml = rutadigita + separador + "lotes" + separador + lote + separador + lote + ".xml";

        XmlLote Lote = new XmlLote();
        XmlInfo Info = new XmlInfo();

        String numpaginas = "";
        String tam = "";
        String proceso = "";
        String usuarioldap = "";
        String ip = "";
        String provincia = "";
        String fechadigita = "";
        String fechacreacion = "";
        String expediente = "";
        String cb = "";
        String notificarinstructor = "";
        String tipodocumento = "";
        String fechanotificacion = "";
        String actualizarfase = "";
        String ubicacionfisica = "";

        for (int i = 0; i < ficheros.length; i++) {
            String fich = ficheros[i].toString();
            try {
                PdfReader reader = new PdfReader(dirorigen + fich);
                proceso = (reader.getInfo().get("proceso") == null ? "" : reader.getInfo().get("proceso"));
                usuarioldap = (reader.getInfo().get("usuarioldap") == null ? ""
                        : reader.getInfo().get("usuarioldap"));
                ip = (reader.getInfo().get("IP") == null ? "" : reader.getInfo().get("IP"));
                provincia = (reader.getInfo().get("provincia") == null ? "" : reader.getInfo().get("provincia"));
                fechadigita = (reader.getInfo().get("fechadigita") == null ? ""
                        : reader.getInfo().get("fechadigita"));
                fechacreacion = (reader.getInfo().get("fechacreacion") == null ? ""
                        : reader.getInfo().get("fechacreacion"));
                numpaginas = "" + reader.getNumberOfPages();
                tam = "" + NumberFormat.getInstance().format(reader.getFileLength());
                expediente = (reader.getInfo().get("Expediente") == null ? "" : reader.getInfo().get("Expediente"));
                cb = (reader.getInfo().get("codigobarras") == null ? "" : reader.getInfo().get("codigobarras"));
                notificarinstructor = (reader.getInfo().get("notificarinstructor") == null ? ""
                        : reader.getInfo().get("notificarinstructor"));
                tipodocumento = (reader.getInfo().get("tipodocumento") == null ? ""
                        : reader.getInfo().get("tipodocumento"));
                fechanotificacion = (reader.getInfo().get("fechanotificacion") == null ? ""
                        : reader.getInfo().get("fechanotificacion"));
                actualizarfase = (reader.getInfo().get("actualizarfase") == null ? ""
                        : reader.getInfo().get("actualizarfase"));
                ubicacionfisica = (reader.getInfo().get("ubicacionfisica") == null ? ""
                        : reader.getInfo().get("ubicacionfisica"));

            } catch (IOException ex) {
                Utilidades.escribeLog(
                        "Error -crearXmlLote- al leer el PDF " + dirorigen + fich + "  - Error " + ex.getMessage());
            }

            XmlDocumento doc = new XmlDocumento();
            doc.setExpediente(expediente);
            doc.setFichero(fich);
            doc.setNumPaginas(numpaginas);
            doc.setTam(tam);
            doc.setCb(cb);
            doc.setNotificarinstructor(notificarinstructor);
            doc.setTipodocumento(tipodocumento);
            doc.setFechanotificacion(fechanotificacion);
            doc.setActualizarfase(actualizarfase);
            doc.setUbicacionfisica(ubicacionfisica);
            Lote.add(doc);
        }

        Info.setFechacreacion(fechacreacion);
        Info.setFechadigita(fechadigita);
        Info.setFechaenvio(dia + "/" + mes + "/" + anio + " " + hora + ":" + minuto + ":" + segundo);
        Info.setIp(ip);
        Info.setNumdocumentos("" + ficheros.length);
        Info.setProceso(proceso);
        Info.setProvincia(provincia);
        Info.setUsuarioldap(usuarioldap);

        Lote.setInfo(Info);

        XStream xstream = new XStream();
        xstream.alias("Lote", XmlLote.class);
        xstream.alias("Info", XmlInfo.class);
        xstream.alias("Documento", XmlDocumento.class);

        try {
            xstream.toXML(Lote, new FileOutputStream(ficheroxml));
        } catch (FileNotFoundException ex) {
            Utilidades.escribeLog(
                    "Error al escribir el fichero -crearXmlLote- " + ficheroxml + " - Error: " + ex.getMessage());
        }
    }

    private Boolean procesarLoteXml(String ficheroXml, String loteactual, String accion) {
        Boolean resultado = false;

        try {
            XStream xstream = new XStream();
            xstream.alias("Lote", XmlLote.class);
            xstream.alias("Info", XmlInfo.class);
            xstream.alias("Documento", XmlDocumento.class);
            FileInputStream fichero;
            fichero = new FileInputStream(ficheroXml);
            XmlLote lote = (XmlLote) xstream.fromXML(fichero);
            int numdocs = Integer.parseInt(lote.getInfo().getNumdocumentos());
            DigitaLotesBean lotesbean = new DigitaLotesBean();
            Calendar cal = Calendar.getInstance();
            String anio = String.valueOf(cal.get(Calendar.YEAR));
            String mes = String.valueOf((cal.get(Calendar.MONTH) + 1)).length() == 1
                    ? "0" + String.valueOf((cal.get(Calendar.MONTH) + 1))
                    : String.valueOf((cal.get(Calendar.MONTH) + 1));
            String dia = String.valueOf(cal.get(Calendar.DAY_OF_MONTH)).length() == 1
                    ? "0" + String.valueOf(cal.get(Calendar.DAY_OF_MONTH))
                    : String.valueOf(cal.get(Calendar.DAY_OF_MONTH));

            if (accion.equals("ACTUALIZAR")) {
                lotesbean.setLote(loteactual);
                lotesbean.setEstado("ENVIADO");
                lotesbean.setFechaEnvio(dia + "/" + mes + "/" + anio);
            } else if (accion.equals("INSERTAR")) {
                for (int i = 0; i < numdocs; i++) {
                    lotesbean = new DigitaLotesBean();
                    lotesbean.setEstado("ENVIADO");
                    lotesbean.setExpediente(lote.getDocumento().get(i).getExpediente());
                    lotesbean.setArchivo(lote.getDocumento().get(i).getFichero());
                    lotesbean.setLote(loteactual);
                    lotesbean.setUsuario(lote.getInfo().getUsuarioldap());
                    lotesbean.setTipoProceso(lote.getInfo().getProceso());
                    lotesbean.setFechaCreacion(lote.getInfo().getFechacreacion());
                    lotesbean.setFechaGrabacion(dia + "/" + mes + "/" + anio);
                    lotesbean.setIp(lote.getInfo().getIp());
                    lotesbean.setPaginas(lote.getDocumento().get(i).getNumPaginas());
                    lotesbean.setTamano(lote.getDocumento().get(i).getTam());
                    lotesbean.setProvincia(lote.getInfo().getProvincia());
                    lotesbean.setDescripcion("");
                    lotesbean.setIdDocumentum("");
                    lotesbean.setCb(lote.getDocumento().get(i).getCb());
                }
            }
            fichero.close();
        } catch (Exception ex) {
            Utilidades.escribeLog("Error en -procesarLoteXml- - " + ex.getMessage());
        }
        return resultado;
    }
}

class FiltroPdf implements FilenameFilter {

    public boolean accept(File dir, String name) {
        return (name.toLowerCase().endsWith(".pdf"));
    }
}

class FiltroZip implements FilenameFilter {

    public boolean accept(File dir, String name) {
        return (name.toLowerCase().endsWith(".zip"));
    }
}

class ExtensionFileFilter extends FileFilter {

    private String[] extensions = null;
    private String desc;

    /**
     * Constructor.
     *
     * @param ext A list of filename extensions, ie new String[] { "PDF"}.
     * @param description A description of the files.
     */
    public ExtensionFileFilter(String[] ext, String description) {
        extensions = ext;
        desc = description;
    }

    /**
     * {@inheritDoc}
     */
    public boolean accept(File pathname) {
        if (pathname.isDirectory()) {
            return true;
        }
        boolean acceptable = false;
        String name = pathname.getName().toUpperCase();
        for (int i = 0; !acceptable && i < extensions.length; i++) {
            if (name.endsWith(extensions[i].toUpperCase())) {
                acceptable = true;
            }
        }
        return acceptable;
    }

    /**
     * {@inheritDoc}
     */
    public String getDescription() {
        return desc;
    }
}