docenciait / ProgramacionDAW

0 stars 0 forks source link

crear archivos docx #19

Open javierbarbe opened 4 years ago

javierbarbe commented 4 years ago

Buenas Ivan He utilizado eclipse para pasar con formato desde un documento txt a un word(archivo con extension .dox) , mediante la clase bufferedReader y bufferedWriter unos apuntes del curso. Eclipse muestra por pantalla lo que deberia escribirse en el documento de word, y de hecho, genera dicho documento. El problema viene a la hora de intentar abrirlo que da un error de "Problemas en el contenido", "contenido no legible" La pregunta supongo que es... ¿puede eclipse generar documentos que no sean .txt? Adjunto metodo Main del programa.

public static void main(String[] args) {
        // TODO Apéndice de método generado automáticamente

        try {
            BufferedReader br =  new BufferedReader(new FileReader("leerFicheros/ICMP.txt"));
            BufferedWriter bw = new BufferedWriter(new FileWriter("leerFicheros/ICMPword.docx"));
            ArrayList <String> retahila= new ArrayList<String>();
            String linea="";
                    while(linea!=null) {

                        retahila.add(linea);
                        linea=br.readLine();
                    }
                    //retahila.remove(0);

            //Collections.sort(retahila);
            for (String o : retahila) {
                System.out.println(o);
                bw.write(o+"\n");
            }

            System.out.println(retahila);
            br.close();
            bw.close();

        } catch (FileNotFoundException e) {
            // TODO Bloque catch generado automáticamente
            System.out.println(e.getMessage());
        } catch (IOException e) {
            // TODO Bloque catch generado automáticamente
            e.printStackTrace();
        }

    }
ivanjimenez commented 4 years ago

Hola, Javier:

Varias cosas:

Supongo que cuando dices utilizar Eclipse para convertir un documento txt a docx es algo genérico. No es que lo haga Eclipse, es el lenguaje quien lo hace. El programa fuente es independiente del Entorno.

Estarás ya por el tema 10 de Programación entiendo. Has visto el pdf y leído? O estás utilizando otro material?

En cuanto a tu código funciona perfectamente, pero ten en cuenta que estás creando un documento txt y otro documento con una extensión .docx pero realmente, aunque parezca un .docx no tiene el formato de docx, es como un txt. Si abres el MS Word y seleccionas el fichero lo podrás ver sin problema pero porque está abriendo un documento tipo texto pero no es un docx bien formado que se llama. Para eso yo emplearía una librería de java para crear trabajar con documentos.

Tienes que tener en cuenta que los documentos como pdf, docx, etc, no son ficheros planos como los txt y necesitan formarse mediante metainformación, cómo hacerlo?

Utilizando librería para uso de docx como el ApachePOI, jOpendocument, docx4j, entre otras. Así te ahorrarás problemas con conversiones. Cuando utilizas los Buffers tienes que saber que son bytes de texto para crear ficheros, perfecto para eso, ficheros de texto. Para docx u otros formatos, como te comentaba, habría que construir la metainformación para obtener un docx bien formado. Por eso las librerías anteriores facilitan el trabajo. Ejemplos hay muchos para trabajar con ellas.

Ejemplo de creación con apachepoi:

import java.io.File;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

public class CreateDocument {

   public static void main(String[] args)throws Exception  {

      //Blank Document
      XWPFDocument document = new XWPFDocument(); 

      //Write the Document in file system
      FileOutputStream out = new FileOutputStream( new File("createdocument.docx"));
      document.write(out);
      out.close();
      System.out.println("createdocument.docx written successully");
   }
}