Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] Editar y imprimir archivo RTF

Estas en el tema de Editar y imprimir archivo RTF en el foro de Java en Foros del Web. Hola amigos les hago una consulta, Tengo armado un archivo RTF con word lo cual necesito que se edite algunas etiquetas y luego imprimirlo. Visualizar ...
  #1 (permalink)  
Antiguo 12/05/2014, 18:13
 
Fecha de Ingreso: octubre-2009
Mensajes: 84
Antigüedad: 14 años, 6 meses
Puntos: 0
Editar y imprimir archivo RTF

Hola amigos les hago una consulta,

Tengo armado un archivo RTF con word lo cual necesito que se edite algunas etiquetas y luego imprimirlo. Visualizar el archivo no interesa, solo es necesario editar las etiquetas.


Ejemplo de etiquetas:

#de#
#para#
#expediente#


Maneje muy poco lo que es archivo en java, pero me doy una idea de lo que necesito. Seria abrir el archivo, buscar la etiqueta y remplazarla por el contenido. El problema esta que al leerlo al ser tan extenso tarda mucho. No es necesario abrir y leer todo el archivo (no se hacerlo de otra manera), solo buscar la etiqueta y remplazarla.
Algun ejemplo para darme o idea?

Saludos




Edito:

Estuve buscando y probando, que les parece esta solucion?


Código:
    public void imprimirRemito() {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;

        try {
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File("remitos.rtf");
            fr = new FileReader(archivo);
            StringBuilder out = new StringBuilder();
            char[] buffer = new char[(int) archivo.length()];

            fr.read(buffer, 0, buffer.length);
            out.append(buffer, 4364260, 4);

        } catch (IOException e) {
        } finally {
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta 
            // una excepcion.
            try {
                if (null != fr) {
                    fr.close();
                }
            } catch (IOException e2) {
            }
        }
    }
Lo que hace es buscar por offset (utilizo un editor hex para sacar la frase). Lo bueno es que va directo al punto donde se encuentra la etiqueta y editarla.
Es buena solucion?

Última edición por martin0290; 12/05/2014 a las 19:48
  #2 (permalink)  
Antiguo 13/05/2014, 12:27
 
Fecha de Ingreso: octubre-2009
Mensajes: 84
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Editar y imprimir archivo RTF

Bueno me auto respondo, aca la solucion capas alguno le sirve:



Código:
    public void imprimirRemito() {
        File remito = null;
        FileReader fr = null;

        try {

            remito = new File("remitos.rtf");
            fr = new FileReader(remito);

            StringBuilder out = new StringBuilder();
            int longitud = (int) remito.length();
            char[] buffer = new char[longitud];

            fr.read(buffer, 0, longitud);
            StringBuilder builder = out.append(buffer, 0, longitud);

            
            UtilidadesArchivo.replaceAll(builder, "#fecha#", "2014-05-02"); //Remplazar etiqueta
            
            UtilidadesArchivo.copiarArchivo(builder, "remitos_tmp.rtf"); //Crear archivo apartir de un StringBuilder
            
            

        } catch (IOException e) {
        } finally {
            try {
                if (null != fr) {
                    fr.close();
                }
            } catch (IOException e2) {
            }
        }

    }

Código:
    public static void replaceAll(StringBuilder builder, String cadena, String remplazo) {
        int index = builder.indexOf(cadena);
        while (index != -1) {
            builder.replace(index, index + cadena.length(), remplazo);
            index += remplazo.length(); // Move to the end of the replacement
            index = builder.indexOf(cadena, index);
        }
    }
Código:
    public static void copiarArchivo(StringBuilder builder, String rutaDestino) {

        try {
            File archivoDestino = new File(rutaDestino);
            FileOutputStream out;

            try (ByteArrayInputStream in = new ByteArrayInputStream(builder.toString().getBytes())) {
                out = new FileOutputStream(archivoDestino);
                byte[] buffer = new byte[8192];
                int len;
                while ((len = in.read(buffer)) > 0) {
                    out.write(buffer, 0, len);
                }

            }
            out.close();
        } catch (IOException e) {
            System.err.println("Hubo un error de entrada/salida!!!");
        }
        
    }


Lo que hace es remplazar la cadena y luego crear un archivo apartir de un StringBuilder

Saludos!

Etiquetas: rtf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:23.