docx4j Primeros pasos

La última versión de este documento siempre se puede encontrar en docx4j svn in /docs (En Flat OPC XML formato para Word 2007, HTML , Y PDF ).

Este documento fue traducido del Inglés a través de Google Translate. Si se puede mejorar la traducción, por favor no dude en enviar su versión mejorada. Para la más reciente, se refieren siempre a la versión en Inglés.

¿Qué es docx4j?

docx4j es una biblioteca para descomprimir un docx "paquetes", y analizar el código XML WordprocessingML para crear una representación en memoria de Java . Las versiones recientes de docx4j También admite archivos Powerpoint pptx.

Es similar en concepto a OpenXML de Microsoft SDK, que es para. NET.

docx4j es de código abierto, disponible bajo la licencia Apache (v2). Como proyecto de código abierto, las contribuciones son bienvenidas. Por favor vea la docx4j foro en el http://dev.plutext.org/forums/ para más detalles.

docx4j depende en gran medida JAXB, El estándar XML para Java JCP vinculante. Usted puede pensar en docx4j como una aplicación JAXB de (entre otros):

* Convenios de envases abierta

* WordprocessingML (DOCX), parte de la Open XML

* Presentation ML (pptx) part of OpenXML

La biblioteca está diseñada para todo el viaje de los archivos docx con fidelidad 100%, y soporta todos los WordML 2007. Soporte para nuevos Word 2010 funciones se añadirán en breve.

El docx4j proyecto está patrocinado por Plutext (www.plutext.com ).

¿Es docx4j para usted?

docx4j es para el procesamiento de documentos docx (y presentaciones pptx) en Java.

No es para los viejos binario (. Doc). Para aquellos, mira HWPF Apache POI. (De hecho, docx4j HWPF utiliza para la conversión de base de. doc a. docx)

Tampoco es para archivos RTF.

Si desea procesar los documentos docx en la plataforma. NET, debería mirar en OpenXML de Microsoft SDK en su lugar.

Una alternativa a la docx4j PDI es Apache. Yo recomiendo especialmente que para el procesamiento de documentos de Excel. También se puede utilizar para procesar documentos de Word, y ya que utiliza XMLBeans (no JAXB) puede ser una mejor opción si usted desea utilizar XMLBeans.

¿Qué tipo de cosas se puede hacer con docx4j?

* Abrir docx existentes (de sistema de archivos, SMB / CIFS, WebDAV utiliza VFS)

* Crear una nueva docx

* programación manipular el documento docx (por supuesto)

* Template substitution; CustomXML binding

* Importar un binario doc (utiliza Apache POI HWPF)

* Producir / 2007 de consumir xmlPackage Word (paquete) de formato

* docx Guardar para sistema de archivos como docx (es decir, comprimido), o el JCR (descomprimido)

* Aplicar transformaciones, incluyendo filtros comunes

* Exportar como HTML o PDF

* Diferencias / comparar documentos o apartados (controles de contenido sdt)

* Soporte para fuentes (sustitución de fuentes, y el uso de cualquier fuentes incrustadas en el documento)

Proyectos con docx4j

Docx4all es el procesador de textos basadas en Swing.

Plutext colaboración para Word 2007 utiliza docx4j en el servidor, para destrozar los documentos de Word en trozos más pequeños que pueden ser versionados independientemente.

Por favor, póngase en contacto con Plutext si desea que su proyecto para ser enumeradas aquí.

¿Qué documentos de Word soporta?

docx4j puede leer / escribir documentos docx creados por o para Word 2007 o versiones anteriores que han instalado el paquete de compatibilidad.

Las partes relevantes de docx4j se generan a partir de los esquemas ECMA.

No puede leer y escribir documentos de Word 2003 XML. El principal problema con ellos es que el espacio de nombres XML es diferente.

docx4j apoyará Word 2010 archivos docx.

Uso docx4j binarios

Puede descargar la última versión de docx4j de http://dev.plutext.org/docx4j/

En general, le sugerimos que desarrollarse en contra de una construcción en la actualidad todas las noches, ya que la última versión oficial que a menudo puede ser de varios meses de edad.

frascos de apoyo se pueden encontrar en la versión tar.gz., o en el subdirectorio correspondiente.

Uso docx4j a través de Maven

Maven POM se puede encontrar en http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/m2/org/docx4j/docx4j

JDK versiones

Necesitas estar usando Java 1.5+.

Esto se debe a JAXB 1 . Si tiene que utilizar 1,4, retrotranslator puede hacer que los informes que funcione.

Una palabra sobre JAXB

docx4j utiliza JAXB a Marshall y Resolver referencia las piezas clave en un documento WordprocessingML, incluida la parte principal documento, la parte estilos, la parte temática, y las partes propiedades.

JAXB está incluido en Java de Sun 6 distribuciones, pero no 1,5. Así que si usted está usando el JDK 1.5, tendrá 2.1.x JAXB en su ruta de clase.

Pedazos de docx4j, Como org.docx4j.wml y org.docx4j.dml fueron generados usando XJC JAXB es. Hemos modificado el esquema wml.xsd en particular, de modo que las clases principales resultantes son un poco más humano ambiente (es decir, no todas empiezan con CT_ y st_).

Log4j

docx4j utiliza log4j para la explotación forestal. Para habilitar el registro, se necesita un log4.properties log4j.xml o en su ruta de clase. Véase, por ejemplo http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/resources/log4j.xml

Javadoc

Javadoc para la navegación en línea o descargar, se pueden encontrar en el directorio http://dev.plutext.org/docx4j/

docx4j código fuente

Para obtener una copia del código fuente actual:

svn co http://dev.plutext.org/svn/docx4j/trunk/docx4j docx4j

Alternativamente, puede navegar en línea, en:

http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/

Edificio docx4j de la fuente

la línea de comandos - Instrucciones rápidas

"Quick", es decir, siempre y cuando tengas instalado maven y ant. Tenga en cuenta que sólo usamos maven para agarrar las dependencias, no para hacer la construcción actual.

Crear un directorio llamado espacio de trabajo, y cd para entrar dentro.

svn co http://dev.plutext.org/svn/docx4j/trunk/docx4j docx4j

pom.xml abierto, busque la línea que dice

<systemPath>/usr/lib/jvm/java-6-sun/jre/lib/rt.jar</systemPath>

y editarlo para adecuarlo a su sistema.

mvn install

ant dist

Este comando creará la hormiga docx4j.jar y colocarlo y todas sus dependencias en el directorio dist.

Eclipse

Requisitos previos

* Eclipse instalado

* Instalar un plugin de Eclipse por ejemplo, la subversión http://subclipse.tigris.org/update_1.2.x

* Instalar Maven and the Eclipse plugin

Y, como se mencionó anteriormente:

* Java 1.5 o 6

* JAXB: tanto la aplicación JAXB incluido en Java SE 6, y la implementación de referencia 2.x. (Este es el precio de apoyo ya sea en tiempo de ejecución)

Instrucciones

* File > New "Project .." > SVN > Checkout Projects from SVN

* Crear una nueva localización del repositorio; Url es http://dev.plutext.org/svn/docx4j

* Haga clic en Carpeta "trunk", Y seleccione docx4j; haga clic en Siguiente

* ¿Quieres comprobar como un proyecto de configurar utilizando el Asistente para nuevos proyectos

* A continuación, seleccione Java> Java Project, haga clic en Siguiente

* Elegir un nombre de proyecto (por ejemplo, 'docx4j') y luego haga clic en Siguiente

* Haga clic en Finalizar (vamos a definir la configuración de Java construir en un paso posterior)

Después de un par de cuadros de diálogo, usted debe tener el nuevo proyecto en el área de trabajo.

Ahora, tenemos que configurar la ruta de clase , etc dentro de Eclipse para que pueda construir.

* Construir> Ruta Configurar Construir> Ruta Java Generar ficha Ruta> Fuente

* Haga clic en src, a continuación, pulse el botón Quitar

* Haga clic en "Añadir carpeta" y navegar a través de src / main / java y marque 'java'

* Añadir a continuación src/svg, src/diffx and src/pptx4j/java también

El bit de Maven:

* Asegúrese de que tiene instalado Maven y su plugin - vea Requisitos previos de arriba.

* Ejecutar mvn instalar en el docx4j que desde un símbolo del sistema (por si acaso)

* Haga clic derecho sobre el proyecto> Maven 2> Activar

El proyecto ahora debe estar trabajando en Eclipse sin errores2 .

Abrir un documento docx existentes

org.docx4j.openpackaging.packages. WordprocessingMLPackage representa un documento docx.

Para cargar un documento, todo lo que tienes que hacer es:

WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new java.io.File(inputfilepath));

Este método también puede cargar archivos planos OPC XML.

A continuación, puede llegar a la parte principal documento (palabra / document.xml):

MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();

Después de eso, puede manipular su contenido.

WordML conceptos

Para hacer cualquier cosa más allá de esto, usted necesita tener una comprensión de los conceptos básicos de WordML.

De acuerdo con la especificación Open Packaging Microsoft, cada documento docx se compone de un número de archivos de pieza, con cremallera para arriba. Una parte es por lo general de XML, pero no podría ser (una parte de la imagen, por ejemplo, no lo es).

Una introducción a WordML está fuera del alcance de este documento. Usted puede encontrar una introducción muy legibles en 1ª edición 3 parte (Primer) en http://www.ecma-international.org/publications/standards/Ecma-376.htm o http://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm (Un enlace mejor, ya que no su cremallera para arriba).

JAXB: clasificación y unmarshalling

docx4j contiene una clase que representa cada parte. Por ejemplo, hay una MainDocumentPart clase. partes XML heredar de JaxbXmlPart , que contiene una llamada miembro jaxbElement. Cuando desee trabajar con el contenido de una parte, se trabaja con su jaxbElement.

Al abrir un documento docx utilizando docx4j, docx4j automáticamente unmarshals el contenido de cada parte XML a un tipo de objeto Java árboles fuertemente (el jaxbElement).

Del mismo modo, si / cuando le dices a docx4j para guardar estos objetos Java como docx, docx4j automáticamente mariscales de la jaxbElement en cada pieza.

A veces tendrá que reunir o cosas unmarshal ti mismo. La clase org.docx4j.jaxb.Context define todas las JAXBContexts utilizados en docx4j:

Jc

org.docx4j.wml
org.docx4j.dml

org.docx4j.dml.picture

org.docx4j.dml.wordprocessingDrawing

org.docx4j.vml
org.docx4j.vml.officedrawing

org.docx4j.math

jcThemePart

org.docx4j.dml

jcDocPropsCore

org.docx4j.docProps.core

org.docx4j.docProps.core.dc.elements

org.docx4j.docProps.core.dc.terms

jcDocPropsCustom

org.docx4j.docProps.custom

jcDocPropsExtended

org.docx4j.docProps.extended

jcXmlPackage

org.docx4j.xmlPackage

jcRelationships

org.docx4j.relationships

jcCustomXmlProperties

org.docx4j.customXmlProperties

jcContentTypes

org.docx4j.openpackaging.contenttype

jcPML

org.docx4j.pml
org.docx4j.dml

org.docx4j.dml.picture

Arquitectura

docx4j tiene 3 capas:

1. org.docx4j.openpackaging

OpenPackaging maneja las cosas en el nivel de envases convenios Abierto: descomprimir un docx en WordprocessingMLPackage y un conjunto de objetos que heredan de la Parte, permitir las piezas que se añade o borrados, que salvar a la docx

Esta capa se basa originalmente en OpenXML4J (que también es utilizado por Apache POI).

Las piezas son generalmente de las subclases org.docx4j.openpackaging.parts.JaxbXmlPart

Las piezas están dispuestas en un árbol. Si una parte tiene descendientes, tendrá una org.docx4j.openpackaging.parts.relationships.RelationshipsPart que identifica las partes de sus descendientes. El PartsList muestra (véase la sección siguiente) muestra cómo funciona esto.

Un JaxbXmlPart tiene un árbol de contenido:

public Object getJaxbElement() {
return jaxbElement;
}

public void setJaxbElement(Object jaxbElement) {
this.jaxbElement = jaxbElement;
}

2. El JAXB árbol de contenido es el segundo nivel del modelo de tres capas.

La mayoría de las partes (incluyendo MainDocumentPart, estilos, encabezados / pies de página, comentarios, notas / notas) el uso org.docx4j.wml (WordprocessingML); wml referencias org.docx4j.dml (DrawingML) según sea necesario.

Estas clases fueron generados a partir de los esquemas XML abierto

3. org.docx4j.model

Este paquete se basa en el bajo dos capas para proporcionar funcionalidad adicional, y está siendo progresivamente más desarrollado.

Las muestras

El paquete contiene org.docx4j.samples ejemplos de cómo hacer las cosas con docx4j. Estos incluyen:

Conceptos básicos

* CreateWordprocessingMLDocument

* DisplayMainDocumentPartXml

* OpenAndSaveRoundTripTest

* OpenMainDocumentAndTraverse

Salida / Transformación

* CreateHtml

* CreatePdf

Piso OPC XML

* ExportInPackageFormat

* ImportFromPackageFormat

Imagen de manipulación

* AddImage

* ConvertEmbeddedImageToLinked

Parte de manipulación

* CopyPart

* ImportForeignPart

* PartsList

* StripParts

Misceláneo

* CompareDocuments

* CreateDocxWithCustomXml

* CustomXmlBinding

* DocProps

* Filter

* HyperlinkTest

* NumberingRestart

* UnmarshallFromTemplate

Si ha instalado el código fuente, tendrá este paquete ya.

Si no, usted puede navegar en línea, en

http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/java/org/docx4j/samples

También hay varios documentos de muestra en la muestra-docs directorio /, que son de más fácil acceso echando un vistazo docx4j svn.

Lista de piezas

Para obtener una mejor comprensión de cómo docx4j obras y la estructura de un documento docx puede ejecutar el PartsList muestra en un docx (o un pptx). Si lo hace, aparecerá una lista de jerarquía de las piezas utilizadas en ese paquete. Se le dirá qué clase se utiliza para representar a cada parte, y en esa parte es una JaxbXmlPart, sino que también le dirá qué clase jaxbElement es.

Por ejemplo:

Part /_rels/.rels [org.docx4j.openpackaging.parts.relationships.RelationshipsPart]
containing JaxbElement:org.docx4j.relationships.Relationships

Part /docProps/app.xml [org.docx4j.openpackaging.parts.DocPropsExtendedPart]
containing JaxbElement:org.docx4j.docProps.extended.Properties

Part /docProps/core.xml [org.docx4j.openpackaging.parts.DocPropsCorePart]
containing JaxbElement:org.docx4j.docProps.core.CoreProperties

Part /word/document.xml [org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart]
containing JaxbElement:org.docx4j.wml.Document

Part /word/settings.xml [ org.docx4j.openpackaging.parts.WordprocessingML .DocumentSettingsPart]
containing JaxbElement:org.docx4j.wml.CTSettings

Part /word/styles.xml [ org.docx4j.openpackaging.parts.WordprocessingML .StyleDefinitionsPart]
containing JaxbElement:org.docx4j.wml.Styles

Part /word/media/image1.jpeg [ org.docx4j.openpackaging.parts.WordprocessingML .ImageJpegPart]

Atravesando un docx

OpenMainDocumentAndTraverse.java en el directorio de ejemplos se muestra cómo recorrer la representación de un JAXB docx.

Una de las cosas molestas de JAXB, es decir que un objeto de una mesa puede ser representada como org.docx4j.wml.Tbl (Como era de esperar). O podría ser envuelto en una javax.xml.bind.JAXBElement, En cuyo caso para conseguir la mesa real, usted tiene que hacer algo como:

if ( ((JAXBElement)o).getDeclaredType().getName().equals( "org.docx4j.wml.Tbl" ) )

org.docx4j.wml.Tbl tbl = (org.docx4j.wml.Tbl)((JAXBElement)o).getValue();

Creación de una nueva docx

Para crear una nueva docx:

/ / Crear el paquete

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

/ / Copiar

wordMLPackage.save(new java.io.File("helloworld.docx") );

Eso es todo.

createPackage() es un método de conveniencia, lo que hace:

/ / Crear el paquete

WordprocessingMLPackage wordMLPackage = new WordprocessingMLPackage();

/ / Crear el documento principal de la parte (la palabra / document.xml)

MainDocumentPart wordDocumentPart = new MainDocumentPart();

/ / Crear el documento principal de contenidos integrados

ObjectFactory factory = Context.getWmlObjectFactory();

org.docx4j.wml.Body body = factory .createBody();

org.docx4j.wml.Document wmlDocumentEl = factory .createDocument();

wmlDocumentEl.setBody(body);

/ / Poner el contenido en la parte

wordDocumentPart.setJaxbElement(wmlDocumentEl);

/ / Añadir la parte del documento principal para el paquete de relaciones

/ / (Crearlo si es necesario)

wmlPack.addTargetPart(wordDocumentPart);

Adición de un párrafo de texto

MainDocumentPart contiene un método:

public org.docx4j.wml.P addStyledParagraphOfText(String styleId, String text)

Puede utilizar este método para agregar un párrafo con el estilo especificado.

El XML que estamos buscando para crear será algo como:

< w:p xmlns:w ="http://schemas.openxmlformats.org/wordprocessingml/2006/main" >
< w:r >
< w:t > Hello world </ w:t >
</ w:r >
</ w:p >

addStyledParagraphOfText construye la estructura del objeto de la manera JAXB, y lo agrega al documento.

ObjectFactory factory = Context.getWmlObjectFactory();

/ / Crear el párrafo

org.docx4j.wml.P para = factory.createP();

/ / Crear el texto elemento

org.docx4j.wml.Text t = factory.createText();

t.setValue(simpleText);

/ / Se crea la carrera

org.docx4j.wml.R run = factory.createR();

run.getRunContent().add(t);

para.getParagraphContent().add(run);

/ / Ahora sumamos nuestra párrafo al cuerpo del documento

Body body = this.jaxbElement.getBody();

Body.getEGBlockLevelElts().add(para)

Como alternativa, puede crear el apartado de clasificación XML:

/ / Suponiendo xml String contiene el código XML anterior

org.docx4j.wml.P para = XmlUtils.unmarshalString(xml);

Para que esto funcione, es necesario asegurarse de que todos los espacios de nombres se declaran correctamente en la cadena.

Agregar un elemento

¿Qué pasa si usted quiere añadir una parte de los nuevos estilos? He aquí cómo:

/ / Crear una parte estilos

StyleDefinitionsPart stylesPart = new StyleDefinitionsPart();

/ / Rellenar con estilos predeterminados

stylesPart.unmarshalDefaultStyles();

/ / Añadir la parte estilos a la parte principal documento de relaciones

wordDocumentPart.addTargetPart(stylesPart);

Usted tomaría el mismo enfoque para agregar un encabezado o un pie de página.

Cuando se agrega una parte de esta manera, se agrega automáticamente a las relaciones de la parte de origen es parte.

Generalmente, usted también tendrá que agregar una referencia a la parte (utilizando su identificador relación) a la parte principal del documento. Esto se aplica a las imágenes, los encabezados y pies de página. (Los comentarios, notas al pie y notas al final son un poco diferente, ya que lo que se agregue a la parte principal documento se hace referencia a los comentarios individuales / notas / notas al final).

docx a (X) HTML

docx4j utiliza XSLT para transformar un docx a XHTML:

AbstractHtmlExporter exporter = new HtmlExporterNG2();

/ / Note la * 2 * se

/ / Escribir a StreamResult (en este caso, un flujo de salida)

OutputStream os = new java.io.FileOutputStream(inputfilepath + ".html" );

javax.xml.transform.stream.StreamResult result
= new javax.xml.transform.stream.StreamResult(os);

exporter.html(wordMLPackage, result,

inputfilepath + "_files" );

Encontrará el código HTML generado es limpio.

docx4j Java utiliza funciones de extensión XSLT para hacer el trabajo pesado, por lo que el propio XSLT se mantiene simple.

docx a PDF

docx4j produce XSL FO, que a su vez puede ser usado para crear un PDF.

En la actualidad, Apache FOP está integrado en docx4j para crear el PDF. (Muy pronto, que vayamos a cambiar las cosas para que docx4j PARA genera, para uso de sus preferidos para render, si eso es FOP, o una herramienta comercial como XEP).

Para crear un archivo PDF:

/ / Fuentes de identidad mejores mapas en Microsoft Windows

wordMLPackage.setFontMapper( new IdentityPlusMapper());

/ / Configuración de convertidor de

org.docx4j.convert.out.pdf.PdfConversion c
= new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage);

/ / Escribir a la salida de corriente

OutputStream os = new java.io.FileOutputStream(inputfilepath + ".pdf" );

c.output(os);

Manipulación de la imagen

Al agregar una imagen a un documento en Word 2007, por lo general se añade como una nueva parte (es decir, que encontrarás en la parte en la docx resultante, que contiene la imagen en la base 64 de formato).

Al abrir el documento en docx4j, docx4j will create an image part representing it.

También es posible crear una imagen vinculada. En este caso, la imagen no está integrado en el paquete docx, sino más bien, se hace referencia en su ubicación externa.

docx4j'S BinaryPartAbstractImage clase contiene métodos para permitir que usted cree incorporadas y las imágenes vinculadas (junto con las relaciones adecuadas).

/ **

* Crear una imagen de la parte matriz de bytes proporcionada, se conceden a las

* La parte principal documento, y enviarlo .* /

public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage,

byte [] bytes)

/ **

* Crear una imagen de la parte matriz de bytes proporcionada, se adjunte a la fuente de parte

* (Por ejemplo, la pieza del documento principal, una parte de las cabeceras, etc), y lo devolverá .* /

public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage,

Part sourcePart, byte [] bytes)

/ **

* Crear una imagen vinculada parte, y adjuntar en un REL de la fuente parte determinada

* (Por ejemplo, una parte de encabezado) * /

public static BinaryPartAbstractImage createLinkedImagePart(
WordprocessingMLPackage wordMLPackage, Part sourcePart, String fileurl)

Para conseguir una imagen que aparezca en el documento, también es necesario que se proceda XML en la parte de documento principal. Este XML se puede tomar 2 formas básicas:

* la Palabra 2007 w: dibujo forma

<w:p>

<w:r>

<w:drawing>

<wp:inline distT ="0" distB ="0" distL ="0" distR ="0" >

<wp:extent cx ="3238500" cy ="2362200" / >

<wp:effectExtent l ="19050" t ="0" r ="0" b ="0" / >

:

<a:graphic >

<a:graphicData .. >

<pic:pic >

:

<pic:blipFill>

< a:blip r:embed ="rId5" / >

:

< / pic:blipFill>

:

< / pic:pic>

< / a:graphicData>

< / a:graphic>

< / wp:inline>

< / w:drawing>

< / w:r>

< / w:p>

* Word 2003 VML basado en w: pict formulario

<w:p>

<w:r>

<w:pict>

<v:shapetype id ="_x0000_t75" coordsize ="21600,21600" .. >

<v:stroke joinstyle ="miter" / >

<v:formulas>

:

< / v:formulas>

:

< / v:shapetype>

<v:shape .. style ="width:428.25pt;height:321pt" >

< v:imagedata r:id ="rId4" o:title ="" / >

< / v:shape>

< / w:pict>

< / w:r>

< / w:p>

docx4j puede crear la Palabra 2007 w: dibujo / wp: inline forma para usted:

/ **

* Create a <wp:inline> element suitable for this image,

* Que puede ser vinculado o incrustado en w: p / w: r / w: el dibujo.

* If the image is wider than the page, it will be scaled

* Automáticamente. Ver Javadoc para otras firmas.

* @ param filenameHint Cualquier texto, por ejemplo el nombre del archivo original

* @ param altText Como alt texto HTML

* @ param ID1 Un identificador único en el documento

* @ param id2 Otro id único en el documento

* @ param vínculo cierto si se trata de ser enlazados no incrustado * /

public Inline createImageInline(String filenameHint, String altText,

int id1, int id2, boolean link)

que luego se pueden agregar a un w: r / w: el dibujo.

Por último, en docx4j, Puede convertir las imágenes entre los formatos no compatibles con Word (por ejemplo, PDF), a PNG, que es un formato compatible. Para ello, docx4j utiliza ImageMagick. Así que si desea utilizar esta función, es necesario instalar ImageMagick. docx4j invoca utilizando ImageMagick:

Process p = Runtime.getRuntime().exec( "imconvert -density " + density + " -units PixelsPerInch - png:-" );

Anote el nombre imconvert , que se utiliza para que no nos tienen que proporcionar una ruta de acceso completa a exec. Tendrá que adaptarse a eso.

Texto de extracción

Una manera rápida de extraer el texto de un docx, es utilizar textutils

public static void extractText(Object o, Writer w)

mariscales que el objeto que se transmite a través de un ContentHandler SAX, con el fin de la producción del texto a la escritura.

Texto de sustitución

la sustitución de texto es bastante fácil, siempre y cuando la cadena que está buscando está representado en un org.docx4j.wml.Text objeto en la forma que usted espera.

Sin embargo, eso no será necesariamente el caso. La cadena puede ser roto a través de texto tiene una duración de cualquiera de las siguientes razones:

* parte de la palabra tiene un formato distinto (por ejemplo, en negrita)

* ortografía y gramática

* Para la edición (rsid)

docx4j eventualmente cabida a estos casos, pero no ahora.

Sin perjuicio de lo que usted puede hacer la sustitución de texto en una variedad de formas, por ejemplo:

* atravesando la pieza del documento principal, y mirando a la org.docx4j.wml.Text objetos

* Mariscal en una cadena, búsqueda y reemplazo en el que, a continuación, de nuevo Resolver referencia

docx4j s XmlUtils también contiene:

/ **

* Dar una serie de wml con $ (clave1), $ (clave2), regresar una adecuada

* Objeto .* /

public static Object unmarshallFromTemplate(String wmlTemplateString,

java.util.HashMap <String, <cadena asignaciones)

Vea el ejemplo UnmarshallFromTemplate, que opera en una cadena que contiene:

<w:p>

<w:r>

<w:t> My favourite colour is ${colour} . < / w:t>

< / w:r>

< / w:p>

<w:p / >

<w:p>

<w:r>

<w:t> My favourite ice cream is ${icecream} . < / w:t>

< / w:r>

< / w:p>

Consejos y Trucos

Trabajar con la plana OPC formato XML

Cuando usted quiere mirar dentro de un documento docx, es un poco un dolor a tener que descomprimirlo para mirar la parte pertinente.

Hay 2 maneras de evitar este.

Uno de ellos es http://www.codeplex.com/PackageExplorer , Lo que puede descomprimir el docx, y muy imprimir una parte.

Otra es la de guardar el documento como Word docx XML (*. xml). Esto produce un solo archivo XML, que puede abrir en un editor XML como XPontus.

docx4j puede abrir plana OPC archivos XML, y guardar en ellos.

Para abrir un archivo plano OPC XML:

WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new java.io.File(inputfilepath));

Para guardar como Piso OPC XML:

wordMLPackage.save(new java.io.File(outputfilepath));

En ambos casos, el código Piso OPC se utiliza si y sólo si es la extensión de archivo. Xml.

Recuerde UnmarshalFromString

Cuando está manipulando documentos docx, a menudo es útil para unmarshal fragmentos de XML (por ejemplo, una cadena que representa un párrafo que se incluirá en el documento).

Por ejemplo, teniendo en cuenta:

< w:p xmlns:w ="http://schemas.openxmlformats.org/wordprocessingml/2006/main" >
< w:r >
< w:t > Hello world </ w:t >
</ w:r >
</ w:p >

sólo tiene que:

/ / Suponiendo xml String contiene el código XML anterior

org.docx4j.wml.P para = XmlUtils.unmarshalString(xml);

Clonación

Para clonar un objeto JAXB, utilice uno de los métodos siguientes en XmlUtils:

/ ** Clone este objeto JAXB, utilizando JAXBContext defecto. * /

public static <T> T deepCopy(T value)

/ ** * Clon este objeto JAXB /

public static <T> T deepCopy(T value, JAXBContext jc)

@XmlRootElement

La mayoría de los objetos de uso común tienen una XmlRootElement @ anotación, para que puedan ser movilizados y unmarshalled.

En algunos casos, podría encontrar esta anotación no se encuentra.

Si no se puede agregar el comentario a la fuente JAXB código, una alternativa es Marshall utilizando código que es explícito en el QName resultante. Por ejemplo, XmlUtils contiene:

/ ** Mariscal a un documento del W3C, para el objeto

* Falta una anotación XmlRootElement @. * /

public static org.w3c.dom.Document marshaltoW3CDomDocument(Object o, JAXBContext jc,
String uri, String local, Class declaredType)

Usted podría utilizar esta forma:

CTFootnotes footnotes =
wmlPackage.getMainDocumentPart().getFootnotesPart().getJaxbElement().getValue();

CTFtnEdn ftn = footnotes.getFootnote().get(1);

/ / No XmlRootElement @ en CTFtnEdn, asi que ..

Document d = XmlUtils.marshaltoW3CDomDocument( ftn,

Context.jc, Namespaces.NS_WORD12, "footnote" , CTFtnEdn. class );

Si necesita unmarshal, puede utilizar:

public static Object unmarshalString(String str, JAXBContext jc, Class declaredType)

El docx4j foro

Soporte gratuito de la comunidad está disponible en la docx4j foro, a http://dev.plutext.org/forums/

Esta discusión general en Inglés. Si usted puede ayudar a moderar un foro en su idioma, por favor háganoslo saber.

Otras opciones de soporte

Si el apoyo de la comunidad libre disponible en el docx4j foro no satisface sus necesidades, o simplemente desea externalizar algunas de codificación, le invitamos a compra de programación, consultoría y apoyo prioritario de http://www.plutext.com/m/index.php/docx4j-support.html

Usando los servicios de Plutext, usted apoya el desarrollo continuo de docx4j.

Plan de trabajo

Word 2010 de apoyo. Soporte para los nuevos elementos XML / schemas introdujo con Word 2010, y el mecanismo de compatibilidad. Esta es la justificación principal de la etiqueta 3.0.

exportadores HTML: deshacerse de las antiguas; estandarizar NG2. La idea es eliminar cualquier "que se debe utilizar" la confusión, y concentrar el esfuerzo, los conocimientos.

PDF exportadores: estandarizar viaXSLFO, y deshacerse de viaIText y viaHTML. Al igual que con HTML, la idea es eliminar cualquier "que se debe utilizar" la confusión, y concentrar el esfuerzo, los conocimientos. docx4j podría producir XSL PARA solamente, y confían en que el usuario tenga FOP o equivalentes a producir realmente el PDF. Esto reducirá las dependencias, haciendo docx4j más ligero. El objetivo sería retirar la jarra FOP (2,8 millones), el vaso PDF procesador (1,6 millones), el vaso iText (1.1M), y el núcleo-procesador (1M).

el manejo de fuentes: quitar el material Panose, por lo que no necesita un tarro de FOP personalizado.

modelo de Diseño / formato intermedio: docx4j contiene una DocumentModel, que podría ampliarse aún más para apoyar:

* Buscar / reemplazar

* Estimación de página de contenido

* XSLT, incluyendo entre las secciones, de las listas

La inserción de objetos OLE: para hojas de cálculo, archivos PDF, etc se pueden incrustar.

Pie de imprenta

Este documento fue escrito en Word 2007, usando:

* XML bastante impresos mediante http://www.softlion.com/webTools/XmlPrettyPrint/default.aspx o el explorador de paquetes

* el código fuente de Java utilizando el formato http://www.java2html.de

Las versiones PDF y HTML se generó utilizando docx4j (PDF a través de XSL FO y FOP).

Cómo ponerse en contacto Plutext

A menos que usted haya pagado a la ayuda, en general ¿Qué debo hacer preguntas de tipo debe ser enviado directamente a la docx4j forum . Plutext puede escribir en el foro de preguntas que recibe por correo electrónico que deberían haberse dirigido al foro.

Plutext puede ser contactado en cualquier jason@plutext.org O jharrop@plutext.com

1 http://forums.java.net/jive/thread.jspa?threadID=411

2 Si obtienes un error "Acceso restringido: el tipo no es accesible debido a la restricción a la colección de rt.jar requerida »(tal vez usando una combinación de Eclipse 3.4 y / o JDK 6 Update 10?), tiene que entrar en la Construcción Ruta de acceso para el proyecto, ficha de bibliotecas, seleccione el JRE Sistema de Bibliotecas, y añadir una regla de acceso ", accesible, **".