cancel
Showing results for 
Search instead for 
Did you mean: 

guardar HTML en formato WORD con Web services

magno_6045
Champ in-the-making
Champ in-the-making
Buenos días,
estoy teniendo un problemilla que encuentro complicado de buscar solución, porque no se muy bien como explicarlo sin soltar el parrafón que os voy a soltar aqui…
el caso es que tengo una JSP con un editor del que obtengo un texto en String de este tipo:
<p>
   <u><em><font style="font-weight: bold;">prueba</font></em></u></p>
<p>
   <span style="background-color: rgb(0, 255, 255);"><font style="font-weight: bold;">prueba negrita</font></span></p>
<p>
   <font style="font-weight: bold;">fasdfadf</font></p>

Esto, lo guardo a traves de una llamada a la api de servicios web de alfresco como archivo .docx
El caso es que me genera el archivo bien, pero dentro, en el contenido, me aprece el texto tal cual lo veis arriba, en lugar de aparecerme por ejemplo la palabra prueba negrita en negrita directamente…vamos, que no me pilla las etiquetas…
la manera de crear el contenido es esta:

               
  ContentServiceSoapBindingStub contentService = WebServiceFactory.getContentService();  
             String text = textoHTML; 
             ContentFormat contentFormat = new ContentFormat("application/msword", "UTF-8"); 
             contentService.write(content, Constants.PROP_CONTENT, text.getBytes(), contentFormat);

he estado mirando a ver si le puedo pasar alguna opcion al contentFormat,pero solo puedo pasarle esas dos…la primera es el mimetype y al segunda el encoding…hay alguna opcion de estas dos, que le pueda pasar para que me reconozca los estilos?? o alguna otra manera de indicarle al doc que voy a crear, de que es un texto enriquecido lo que le estoy pasando?
muchas gracias!
7 REPLIES 7

magno_6045
Champ in-the-making
Champ in-the-making
¿¿¿nadie tiene una idea de por donde puedo tirar??? es que estoy atascado con esto Smiley Sad

fegor
Star Collaborator
Star Collaborator
Se me ocurre que, ¿por qué no pruebas como tipo "text/html" y luego lo transformas?

Un saludo.

magno_6045
Champ in-the-making
Champ in-the-making
no se si te entiendo muy bien…te refieres a guardarlo como txt y luego transformarlo a word? pero yo lo que quiero es que al crear el documento en word, me pille los estilos como tags y no como texto plano…creo que en word hay una opción que te lo pilla directamente asi, y es como si al crear el documento, tuviera que indicarle en algun lado, que es un texto enriquecido y que coga los tags por lo que son…
estoy mirando a ver si van los tiros por usar una clase AbstractContentReader, que implementa el ContentReader y leer los datos ahi, que puedo poenrle el mimetype html. luego usar otra que sea Contenwriter y ponerle el mimetype a msword…y finalmente un metodo que he visto llamado ooocontentTransformer(reader, writer) al que le paso los dos…y se supone que transforma…alguien ha hecho algo de esto y piensa que voy bien por ese camino?? es que vamos, esto son todo suposiciones mirando la api, pero no tengo nada claro como hacerlo, la verdad…
gracias!!

magno_6045
Champ in-the-making
Champ in-the-making
he encontrado este codigo, que creo que igual es por donde irian los tiros, pero no entiendo la primera linea…esa variable contentService, se os ocurre que puede ser??
el node ref, creo que tendria que sacarlo asi:
 Store storeRef = new Store(Constants.WORKSPACE_STORE, "SpacesStore");  
             ParentReference companyHomeParent = new ParentReference(storeRef, null, "/app:company_home", Constants.ASSOC_CONTAINS, null); 
            String id=companyHomeParent.getUuid();
             Reference nodeRef = new Reference(storeRef, id, null);
                   ContentReader reader = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT);
                    if (reader != null && reader.exists())
                    {
                            // get the transformer
                            ContentTransformer transformer = contentService.getTransformer(reader.getMimetype(), MimetypeMap.MIMETYPE_TEXT_PLAIN);
                            // is this transformer good enough?
                            if (transformer == null)
                            {
                                // We have a transformer that is fast enough
                                ContentWriter writer = contentService.getTempWriter();
                                writer.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN);

                                try
                                {
                                    transformer.transform(reader, writer);
                                    // point the reader to the new-written content
                                    reader = writer.getReader();
                                    // Check that the reader is a view onto something concrete
                                    if (!reader.exists())
                                    {
                                        throw new ContentIOException("The transformation did not write any content, yet: \n"
                                                + "   transformer:     " + transformer + "\n" + "   temp writer:     " + writer);
                                    }
                                }
                                catch (ContentIOException e)
                                {


                                }
                            }
                        }

fegor
Star Collaborator
Star Collaborator
Me refiero a eso, si, a que lo guardes como HTML (así te pilla los tags como son) y luego lo transformes a formato Word, OpenOffice, Pdf, etc.

Un saludo.

magno_6045
Champ in-the-making
Champ in-the-making
el tema es que queria hacer la transformación antes de guardar nada…es decir, antes de decirle a alfresco, creame un documento word con este contenido, queria que el contenido ya estuviese en un formato adecuado…lo que tu me propones, creo que es guardarlo en alfreco como html, luego hacer una conversión de ese documento a word y supongo que luego borrar el html,no?? aunque no tengo ni idea de por donde empezar para hacer todo eso…
Muchas gracias y perdona las molestias!

magno_6045
Champ in-the-making
Champ in-the-making
Bueno, por mas vueltas que le doy, la variable esa de contentService de donde obtiene el contentreader, no se de donde sacarla…
he intentado con esto:
 ApplicationContext context = new ClassPathXmlApplicationContext("classpath:alfresco/application-context.xml");
             ServiceRegistry serviceRegistry = (ServiceRegistry) context.getBean(ServiceRegistry.SERVICE_REGISTRY);
Pero me da la impresión de que para utilizar estas clases de Spring, necesitaria el entorno, que yo no tengo. Eestoy haciendo un portlet para liferay, java basico y no tengo el alfresco instalado en el mismo sitio que el liferay, por lo que cuando va a buscar el application-context.xml, no lo encuentra logicamente…
Para el tema que me sugerias de guardarlo en html y luego convertirlo, ¿como podria empezar? Me refiero a que tendria que crear un documento html con el texto,no? y luego recuperar su referencia o algo asi, y hacer una transformación a word(pero todo esto, tendria que ser por alguna clase,no?) y luego obtener el word y borrar el html? pero la transformación esa, no seria a fin de cuentas, lo mismo que yo intentaba hacer de primeras…al final, lo que tengo que transformar es el codigo que obtengo…
estoy muy perdido con todo esto, no se ni siquiera, si se podrá hacer…
Muchas gracias por ayudarme!