Modificar archivos Word con formato .doc y .docx

2,088 views
Skip to first unread message

JuAnDrEs

unread,
Jan 9, 2010, 8:39:08 PM1/9/10
to JavaSOS
Hola a todos. Les escribo porque necesito desarrollar una aplicación
que tome un archivo de texto Word (el archivo contendrá solo texto, no
tendrá imágenes ni cuadros y puede ser cualquier formato de word: .doc
o .docx) y pueda modificar el ancho y largo de la página (con página
me refiero al texto contenido en la misma).

Un ejemplo quizás clarifique un poco:

El veloz murciélago hindú comía feliz cardillo y kiwi.El veloz
murciélago hindú comía feliz cardillo y kiwi.
El veloz murciélago hindú comía feliz cardillo y kiwi.El veloz
murciélago hindú comía feliz cardillo y kiwi.
El veloz murciélago hindú comía feliz cardillo y kiwi.El veloz
murciélago hindú comía feliz cardillo y kiwi.
El veloz murciélago hindú comía feliz cardillo y kiwi.El veloz
murciélago hindú comía feliz cardillo y kiwi.

ancho: XX cm
largo: YY cm

Y el output sería:

El veloz murciélago hindú comía feliz cardillo y kiwi.El veloz
murciélago hindú comía
feliz cardillo y kiwi. El veloz murciélago hindú comía feliz cardillo
y kiwi.El veloz
murciélago hindú comía feliz cardillo y kiwi. El veloz murciélago
hindú comía feliz
cardillo y kiwi.El veloz murciélago hindú comía feliz cardillo y kiwi.
El veloz
murciélago hindú comía feliz cardillo y kiwi.El veloz murciélago hindú
comía feliz
cardillo y kiwi.

La aplicación debería entonces generar un nuevo documento Word con el
texto formateado. Mi problema no radica en como hacerlo, sino en que
librería o API utilizar para lograr esto ya que si fuera texto plano
no tendría mayores incovenientes, pero al ser un formato de Microsoft
y trabajar con metadatos ya no es tan simple. Creo que la API que hay
generalizada para hacer esto es la del proyecto JAKARTA POI, pero de
acuerdo al sitio del proyecto, el mismo no soporta el nuevo
formato .docx ("It does not support the new Word 2007 .docx file
format, which is not OLE2 based.")

Alguien por casualidad se topó alguna vez con el mismo problema o
tiene alguna idea para orientarme?

Gracias desde ya

Max Sanchez

unread,
Jan 9, 2010, 10:16:12 PM1/9/10
to jav...@googlegroups.com
Hola.

Los archivos de Word docx en realidad son varios archivos XML comprimidos.
Puedes intentar cambiando la extensión docx a zip y utilizar
java.util.zip.* para descomprimirlo.
Dentro habrá una carpeta "word" que contiene el archivo "document.xml"

La parte laboriosa será parsear el xml...

No es algo elegante pero te podría funcionar.

Saludos
Max Sánchez


--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.

Ernesto De Santis

unread,
Jan 10, 2010, 8:59:42 AM1/10/10
to jav...@googlegroups.com
Juan,

Existe un proyecto para tratar estos archivos, esta API podría servirte:
http://poi.apache.org/

Yo solamente la he utilizado para extraer el texto de los archivos y no para modificarlos. Pero se que podés meter mano por ahí.

Suerte,
Ernesto.

JuAnDrEs escribió:

Ernesto De Santis

unread,
Jan 10, 2010, 9:00:17 AM1/10/10
to jav...@googlegroups.com
Juan,

Existe un proyecto para tratar estos archivos, esta API podr�a servirte:
http://poi.apache.org/

Yo solamente la he utilizado para extraer el texto de los archivos y no

para modificarlos. Pero se que pod�s meter mano por ah�.

Suerte,
Ernesto.

JuAnDrEs escribi�:
> Hola a todos. Les escribo porque necesito desarrollar una aplicaci�n
> que tome un archivo de texto Word (el archivo contendr� solo texto, no
> tendr� im�genes ni cuadros y puede ser cualquier formato de word: .doc
> o .docx) y pueda modificar el ancho y largo de la p�gina (con p�gina


> me refiero al texto contenido en la misma).
>

> Un ejemplo quiz�s clarifique un poco:
>
> El veloz murci�lago hind� com�a feliz cardillo y kiwi.El veloz
> murci�lago hind� com�a feliz cardillo y kiwi.
> El veloz murci�lago hind� com�a feliz cardillo y kiwi.El veloz
> murci�lago hind� com�a feliz cardillo y kiwi.
> El veloz murci�lago hind� com�a feliz cardillo y kiwi.El veloz
> murci�lago hind� com�a feliz cardillo y kiwi.
> El veloz murci�lago hind� com�a feliz cardillo y kiwi.El veloz
> murci�lago hind� com�a feliz cardillo y kiwi.


>
> ancho: XX cm
> largo: YY cm
>

> Y el output ser�a:
>
> El veloz murci�lago hind� com�a feliz cardillo y kiwi.El veloz
> murci�lago hind� com�a
> feliz cardillo y kiwi. El veloz murci�lago hind� com�a feliz cardillo
> y kiwi.El veloz
> murci�lago hind� com�a feliz cardillo y kiwi. El veloz murci�lago
> hind� com�a feliz
> cardillo y kiwi.El veloz murci�lago hind� com�a feliz cardillo y kiwi.
> El veloz
> murci�lago hind� com�a feliz cardillo y kiwi.El veloz murci�lago hind�
> com�a feliz
> cardillo y kiwi.
>
> La aplicaci�n deber�a entonces generar un nuevo documento Word con el


> texto formateado. Mi problema no radica en como hacerlo, sino en que

> librer�a o API utilizar para lograr esto ya que si fuera texto plano
> no tendr�a mayores incovenientes, pero al ser un formato de Microsoft


> y trabajar con metadatos ya no es tan simple. Creo que la API que hay
> generalizada para hacer esto es la del proyecto JAKARTA POI, pero de
> acuerdo al sitio del proyecto, el mismo no soporta el nuevo
> formato .docx ("It does not support the new Word 2007 .docx file
> format, which is not OLE2 based.")
>

> Alguien por casualidad se top� alguna vez con el mismo problema o

Ernesto De Santis

unread,
Jan 10, 2010, 9:23:21 AM1/10/10
to jav...@googlegroups.com
Perdón Juan,

No leí hasta el final del mensaje. Roberto Capone me advirtio mi error por privado.
No me enojo si me lo dicen por la lista. ;)

Saludos y disculpen,
Ernesto.

Ernesto De Santis escribió:

Pablo Saavedra

unread,
Jan 18, 2010, 8:01:38 AM1/18/10
to jav...@googlegroups.com
De la página de poi:

The Apache POI Project's mission is to create and maintain Java APIs for manipulating various file formats based upon the Office Open XML standards (OOXML) and Microsoft's OLE 2 Compound Document format (OLE2). In short, you can read and write MS Excel files using Java. In addition, you can read and write MS Word and MS PowerPoint files using Java. Apache POI is your Java Excel solution (for Excel 97-2008). We have a complete API for porting other OOXML and OLE2 formats and welcome others to participate.

OLE2 files include most Microsoft Office files such as XLS, DOC, and PPT as well as MFC serialization API based file formats. The project provides APIs for the OLE2 Filesystem (POIFS) and OLE2 Document Properties (HPSF).

Office OpenXML Format is the new standards based XML file format found in Microsoft Office 2007 and 2008. This includes XLSX, DOCX and PPTX. The project provides a low level API to support the Open Packaging Conventions usingopenxml4j.

Esto quiere decir que docx puede leer. Si no, podes usar http://dev.plutext.org/trac/docx4j que también sirve para docx.

Saludos. 

2010/1/10 Ernesto De Santis <eds_...@yahoo.com.ar>

Roberto Capone

unread,
Jan 18, 2010, 8:28:05 AM1/18/10
to jav...@googlegroups.com
La verdad es que la página es algo ambigua. Acá dice que HWPF no soporta y en todo caso
En todo caso lo que dice es que la API es de bajo nivel ("The project provides a low level API to support the Open Packaging Conventions using openxml4j").
La API de alto nivel está implementada para Excel ("This is most developed for Excel workbooks"), pero está verdolaga para Word y Powerpoint ("Work is progressing for Word documents and PowerPoint presentations").
No sé, nunca tuve que actualizar archivos .docx. Igualmente sería bueno que Ernesto nos cuente qué hizo con esto.
Saludos,

Beto


2010/1/18 Pablo Saavedra <pablo.a....@gmail.com>

Ernesto De Santis

unread,
Jan 19, 2010, 4:02:22 PM1/19/10
to jav...@googlegroups.com
Roberto,

Yo no soy el creador del thread.
Yo lo que hice con la API POI fue de solamente lectura, obtener el texto
plano de los archivos.
Particularmente no testee con estas versiones nuevas de Word.

Estoy saliendo de vacaciones así que no voy a poder testearlo como darles
una respuesta. Cuando vuelva le hago un tirin y les cuento.

Saludos,
Ernesto.

________________________________________
De: jav...@googlegroups.com [mailto:jav...@googlegroups.com] Em nome de
Roberto Capone
Enviada em: segunda-feira, 18 de janeiro de 2010 10:28
Para: jav...@googlegroups.com
Assunto: Re: [JavaSOS] Modificar archivos Word con formato .doc y .docx

Roberto Capone

unread,
Jan 19, 2010, 10:56:13 PM1/19/10
to jav...@googlegroups.com
Naaah! Ni da...
Que el pecador que arrojó la primera piedra ahora no esconda la mano.
Señor JuanDres, Juan Andrés, juanleiguarda o como se llame usted, venga a dar la cara y cuente como solucionó este embrollo.
Gracias,

Beto


2010/1/19 Ernesto De Santis <ern...@dmconsultoria.com.br>

JuAnDrEs

unread,
Jan 20, 2010, 8:48:21 AM1/20/10
to JavaSOS
jajaja ok Señor "Capone".. aquí estoy dando la cara para que vea que
no escondí ninguna mano.

Por una cuestión de tiempo aún no pude largarme con este proyecto para
darles mi experiencia con las API que recomendaron, pero en cuanto
tenga una novedad la haré saber por este medio.

Saludos y buenas vacaciones Ernesto


On 20 ene, 00:56, Roberto Capone <rcap...@gmail.com> wrote:
> Naaah! Ni da...
> Que el pecador que arrojó la primera piedra ahora no esconda la mano.
> Señor JuanDres, Juan Andrés, juanleiguarda o como se llame usted, venga a
> dar la cara y cuente como solucionó este embrollo.
> Gracias,
>
> Beto
>

> 2010/1/19 Ernesto De Santis <erne...@dmconsultoria.com.br>

> > 2010/1/18 Pablo Saavedra <pablo.a.saave...@gmail.com>


> > De la página de poi:
>
> > The Apache POI Project's mission is to create and maintain Java APIs for
> > manipulating various file formats based upon the Office Open XML standards
> > (OOXML) and Microsoft's OLE 2 Compound Document format (OLE2). In short,
> > you
> > can read and write MS Excel files using Java. In addition, you can read and
> > write MS Word and MS PowerPoint files using Java. Apache POI is your Java
> > Excel solution (for Excel 97-2008). We have a complete API for porting
> > other
> > OOXML and OLE2 formats and welcome others to participate.
> > OLE2 files include most Microsoft Office files such as XLS, DOC, and PPT as
> > well as MFC serialization API based file formats. The project provides APIs
> > for the OLE2 Filesystem (POIFS) and OLE2 Document Properties (HPSF).
> > Office OpenXML Format is the new standards based XML file format found in
> > Microsoft Office 2007 and 2008. This includes XLSX, DOCX and PPTX. The
> > project provides a low level API to support the Open Packaging Conventions
> > usingopenxml4j.
> > Esto quiere decir que docx puede leer. Si no, podes usar

> >http://dev.plutext.org/trac/docx4jque también sirve para docx.
>
> > Saludos.
>
> > 2010/1/10 Ernesto De Santis <eds_li...@yahoo.com.ar>

DevCH

unread,
Jan 20, 2010, 10:39:29 AM1/20/10
to jav...@googlegroups.com
Igual y no se mucho de Java pero yo he hecho eso con Visual FoxPro y lo que hago es instanciar la clase base de la API, por ejemplo, var x = createobject("Word.application") y con eso ya tengo una instancia de MS Word ya luego con una leidita de esa API he abierto y modificado dichos doctos. En principio como no sabia que hacer, grabe una macro en MS Oficce Word y ahi me di cuenta de que comando me generaba el VBA de msoficce y ahí me fui  guiando. Por eso dije que a diferencia de Ernesto, mi experiencia de esto ha sido en MS Visual FoxPro, y si VFP lo puede hacer me imagino que para java debe ser pan comido.

Saludos.

PD. Posiblemente no te resuelva el problema, pero te podría dar una idea. Comenta.

JuAnDrEs

unread,
Jan 21, 2010, 7:10:51 PM1/21/10
to JavaSOS

DevCH

Gracias por tu ayuda. Sí, supongo que con cualquiera de los lenguajes
de Microsoft debe ser algo bastante simple de desarrollar ya que el
formato .docx es propietario de Microsoft, pero tratándose de Java el
tema ya no es para nada fácil, más si no hay alguna API que permita
trabajar a alto nivel y si se debe desarrollar desde cero.

Saludos

On 20 ene, 12:39, DevCH <chidalgor1...@gmail.com> wrote:
> Igual y no se mucho de Java pero yo he hecho eso con Visual FoxPro y lo que
> hago es instanciar la clase base de la API, por ejemplo, var x =
> createobject("Word.application") y con eso ya tengo una instancia de MS Word
> ya luego con una leidita de esa API he abierto y modificado dichos doctos.
> En principio como no sabia que hacer, grabe una macro en MS Oficce Word y
> ahi me di cuenta de que comando me generaba el VBA de msoficce y ahí me fui
>  guiando. Por eso dije que a diferencia de Ernesto, mi experiencia de esto
> ha sido en MS Visual FoxPro, y si VFP lo puede hacer me imagino que para
> java debe ser pan comido.
>
> Saludos.
>
> PD. Posiblemente no te resuelva el problema, pero te podría dar una idea.
> Comenta.
>

> > > >http://dev.plutext.org/trac/docx4jquetambién sirve para docx.

Reply all
Reply to author
Forward
0 new messages