docx4j Mise en route
La dernière version de ce document peut toujours être trouvée dans docx4j svn in /docs (En Flat OPC XML format Word 2007, HTML , Et PDF ).
Ce document a été traduit de l'anglais en utilisant Google Translate. Si vous pouvez améliorer la traduction, s'il vous plaît n'hésitez pas à envoyer votre version améliorée. Pour les plus récentes, toujours se référer à la version anglaise.
Qu'est-ce que docx4j?
docx4j Java . Les versions récentes de docx4j également en charge les fichiers Powerpoint pptx.
Il est semblable au concept de Microsoft OpenXML SDK, qui est pour. NET.
docx4j est open source, disponible sous la licence Apache (v2). docx4j Forum à http://dev.plutext.org/forums/ pour plus de détails.
docx4j repose largement sur JAXB, La norme XML pour Java JCP contraignant. Vous pouvez penser docx4j comme une mise en œuvre de JAXB (entre autres):
* conventions Open Packaging
* WordprocessingML (DOCX), une partie de l'Open XML
* Presentation ML (pptx) part of OpenXML
La bibliothèque est conçu pour compléter les fichiers docx voyage avec 100% de fidélité, et soutient tous 2007 WordML. Support pour les nouveaux Word 2010 fonctionnalités seront ajoutés prochainement.
Le docx4j projet est parrainé par Plutext (www.plutext.com ).
Est docx4j pour vous?
docx4j est pour le traitement des documents docx (pptx et présentations) en Java.
Ce n'est pas pour les anciens binaires (. Doc). Pour ceux, regardez HWPF Apache POI. (En fait, docx4j HWPF utilise pour la conversion de base de. doc à. docx)
Il n'est pas pour les fichiers RTF.
Si vous voulez traiter les documents docx sur la plate-forme. NET, vous devriez regarder de Microsoft OpenXML SDK lieu.
Une alternative à la docx4j POI Apache. Je recommande en particulier que pour les documents Excel traitement. Il peut également être utilisé pour traiter les documents Word, et comme il utilise XmlBeans (pas JAXB), il peut être un meilleur choix si vous souhaitez utiliser XmlBeans.
Quelles sortes de choses que vous pouvez faire avec docx4j?
* Ouvrir docx existants (à partir de système de fichiers, SMB / CIFS, WebDAV avec VFS)
* Créer un nouveau docx
* manipuler par programme le document docx (bien sûr)
* Template substitution; CustomXML binding
* Importer un fichier binaire doc (utilise Apache POI HWPF)
* Produire / 2007 du consomment xmlPackage Word (PKG) format
* docx Enregistrer en tant que système de fichiers docx (c.-à-zippé), ou à JCR (décompressé)
* Appliquer transforme, y compris les filtres courants
* à l'exportation au format HTML ou PDF
* Diff / comparer des documents, de paragraphes ou (le contenu de contrôles SDT)
* Support des polices (substitution de polices, et l'utilisation de toutes les polices incorporées dans le document)
Les projets utilisant docx4j
Docx4all est le traitement de texte basé sur Swing.
collaboration Plutext pour Word 2007 utilise docx4j sur le serveur, de déchiqueter les documents Word en petits morceaux qui peuvent être propres versions.
S'il vous plaît contactez Plutext si vous souhaitez que votre projet pour être énumérées ici.
Quels sont les documents Word il prend en charge?
docx4j peut lire / écrire des documents docx créés par ou pour Word 2007, ou des versions antérieures qui ont installé le pack de compatibilité.
Les parties pertinentes de docx4j sont générés à partir des schémas ECMA.
Il ne peut pas lire ou écrire des documents Word 2003 XML. Le principal problème avec ceux que l'espace de noms XML est différent.
docx4j appuiera Word 2010 fichiers docx.
Utilisation docx4j binaires
Vous pouvez télécharger la dernière version de docx4j à partir de http://dev.plutext.org/docx4j/
En général, nous vous suggérons de mettre au point contre une construction en cours de nuit, depuis la dernière version officielle est souvent vieux de plusieurs mois.
bocaux de soutien peuvent être trouvées dans la version. tar.gz, ou dans le sous-répertoire pertinent.
Utilisation docx4j par Maven
Maven POM peut être trouvé à http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/m2/org/docx4j/docx4j
versions JDK
Vous devez être à l'aide Java 1.5+.
C'est à cause de JAXB 1 . Si vous devez utiliser 1.4, retrotranslator peut faire aurait -elle.
Un mot sur JAXB
docx4j JAXB utilise à Marshall et unmarshall les principaux éléments dans un document WordprocessingML, y compris la partie du document principal, la part des styles, la partie thématique, et les parties des propriétés.
JAXB est inclus dans le Java de Sun 6 distributions, mais 1,5 pas. Donc, si vous utilisez le JDK 1.5, vous devrez 2.1.x JAXB sur votre chemin de classe.
Bits de docx4j, Tels que org.docx4j.wml et org.docx4j.dml ont été générés à l'aide de XJC JAXB. Nous avons modifié le schéma wml.xsd en particulier, de sorte que les classes principales qui en résultent sont un peu plus l'homme sympathique (ne pas commencer avec tous les CT_ et ST_).
Log4j
docx4j log4j utilise pour se connecter. Pour activer la journalisation, vous avez besoin d'un log4.properties ou log4j.xml sur votre chemin de classe. Voir, par exemple http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/resources/log4j.xml
Javadoc
Javadoc pour la navigation en ligne ou à télécharger, se trouve dans le répertoire http://dev.plutext.org/docx4j/
docx4j code source
Pour obtenir une copie du code source en cours:
svn co http://dev.plutext.org/svn/docx4j/trunk/docx4j docx4j
Alternativement, vous pouvez consulter en ligne, à:
http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/
Bâtiment docx4j de la source
ligne de commande - Instructions rapide
"Rapide" qui est, à condition d'avoir Maven et Ant d'installé. Notez que nous n'utilisons que maven pour saisir les dépendances, de ne pas faire la construction réelle.
Créez un répertoire appelé espace de travail, et allez dedans.
svn co http://dev.plutext.org/svn/docx4j/trunk/docx4j docx4j
pom.xml ouverte, trouvez la ligne qui se lit
<systemPath>/usr/lib/jvm/java-6-sun/jre/lib/rt.jar</systemPath>
et de modifier pour l'adapter à votre système.
mvn install
ant dist
Cette commande va créer la fourmi docx4j.jar et placez-le et toutes ses dépendances dans le répertoire dist.
Éclipse
Pré-requis
* Eclipse installée
* Installer un plugin Eclipse par exemple, la subversion http://subclipse.tigris.org/update_1.2.x
* Installer Maven and the Eclipse plugin
Et, comme nous le verrons ci-dessus:
* Java 1.5 ou 6
* JAXB: deux la mise en œuvre JAXB inclus dans Java 6, et l'implémentation de référence 2.x. (C'est le prix de soutien, soit à l'exécution)
Instructions
* File > New "Project .." > SVN > Checkout Projects from SVN
* Créer un lieu nouveau référentiel; Url est http://dev.plutext.org/svn/docx4j
* Cliquez sur le dossier "trunk", Et sélectionnez docx4j; cliquez sur Suivant
* Vous voulez le vérifier en tant que projet configuré à l'aide l'Assistant Nouveau projet
* Ensuite, sélectionnez Java> Java du projet; cliquez sur Suivant
* Choisir un nom de projet (par exemple, «docx4j») puis cliquez sur Suivant
* Cliquez sur Terminer (nous allons définir les paramètres de construction Java dans une étape ultérieure)
Après quelques autres boîtes de dialogue, vous devriez avoir le nouveau projet dans votre espace de travail.
Maintenant, nous avons besoin de configurer le chemin de classe etc au sein d'Eclipse afin de pouvoir construire.
* Build> Build Path Configurer> Chemin Java Build Path> onglet Source
* Cliquez sur src, puis appuyez sur le bouton Supprimer
* Puis cliquez sur "Ajouter un dossier" et naviguez jusqu'à src / main / java et cocher la case "java"
* Ajouter ensuite src/svg, src/diffx and src/pptx4j/java aussi
Le bit Maven:
* Assurez-vous que vous avez Maven et son plugin installé - voir conditions préalables ci-dessus.
* mvn Run installer dans le docx4j vous à partir d'une invite de commande (juste au cas où)
* Faites un clic droit sur le projet> Maven 2> Activer
Le projet devrait maintenant fonctionner sans erreur dans Eclipse2 .
Ouvrir un document docx existants
org.docx4j.openpackaging.packages. WordprocessingMLPackage représente un document docx.
Pour charger un document, tout ce que vous avez à faire est:
WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new java.io.File(inputfilepath));
Cette méthode permet également de charger des fichiers XML plat OPC.
Vous pouvez alors obtenir le rôle principal document (word / document.xml):
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
Après cela, vous pouvez manipuler son contenu.
concepts WordML
Pour ce faire grand-chose au-delà de cela, vous devez avoir une compréhension des concepts de base WordML.
Selon la spécification Microsoft Open Packaging, chaque document docx est composé d'un certain nombre de dossiers partie, compressé zip. Une partie est habituellement XML, mais pourrait ne pas être (une partie d'image, par exemple, n'est pas).
Une introduction à WordML est au-delà de la portée de ce document. Vous pouvez trouver une introduction très lisible en 1ère édition la partie 3 (Primer) à http://www.ecma-international.org/publications/standards/Ecma-376.htm ou http://www.ecma-international.org/news/TC45_current_work/TC45_available_docs.htm (Un lien plus étroit, puisque ce n'est pas compressé zip).
JAXB: triage et unmarshalling
docx4j contient une classe qui représente chaque partie. Par exemple, il ya un MainDocumentPart classe. pièces XML hériter de JaxbXmlPart , qui contient un membre appelé jaxbElement. Si vous voulez travailler avec le contenu d'une partie, vous travaillez avec ses jaxbElement.
Lorsque vous ouvrez un document docx en utilisant docx4j, docx4j automatiquement unmarshals le contenu de chaque partie XML à un objet Java de type arbre fortement (l' jaxbElement).
De même, si / quand vous dites docx4j pour sauver ces objets Java comme un docx, docx4j automatiquement maréchaux l' jaxbElement dans chaque partie.
Parfois, vous voulez des choses maréchal ou désorganiser vous-même. La classe org.docx4j.jaxb.Context définit l'ensemble des JAXBContexts utilisés dans docx4j:
Jc |
org.docx4j.wml
|
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
|
Architecture
docx4j a 3 couches:
1.
org.docx4j.openpackaging
OpenPackaging gère les choses au niveau de l'emballage conventions ouvertes: une décompression docx en
WordprocessingMLPackage
et un ensemble d'objets héritant de la partie; permettant pièces à ajouter / supprimer, sauf les docx
Cette couche est basée à l'origine sur OpenXML4J (qui est également utilisée par Apache POI).
Les pièces sont généralement sous-classes de
org.docx4j.openpackaging.parts.JaxbXmlPart
Les pièces sont disposées dans un arbre. Si une partie a des descendants, elle aura un
org.docx4j.openpackaging.parts.relationships.RelationshipsPart
qui identifie les parties descendant. Le PartsList échantillon (voir section suivante) vous montre comment cela fonctionne.
Un JaxbXmlPart a un arbre de contenu:
public Object getJaxbElement() {
return jaxbElement;
}
public void setJaxbElement(Object jaxbElement) {
this.jaxbElement = jaxbElement;
}
2.
Le
JAXB
arbre de contenu
est le deuxième niveau du modèle à trois couches.
La plupart des parties (y compris MainDocumentPart, les styles, en-têtes / pieds de page, commentaires,
notes de fin
de bas de page) l'utilisation
org.docx4j.wml
(WordprocessingML);
wml
références
org.docx4j.dml
(DrawingML) si nécessaire.
Ces classes ont été générées à partir des schémas XML Open
3.
org.docx4j.model
Ce package s'appuie sur les deux couches inférieures de fournir des fonctionnalités supplémentaires, et est progressivement développé.
Les échantillons
Le org.docx4j.samples paquet contient des exemples de la façon de faire des choses avec docx4j. Il s'agit notamment de:
Notions de base
* CreateWordprocessingMLDocument
* DisplayMainDocumentPartXml
* OpenAndSaveRoundTripTest
* OpenMainDocumentAndTraverse
Sortie / Transformation
* CreateHtml
* CreatePdf
* ExportInPackageFormat
* ImportFromPackageFormat
* AddImage
* ConvertEmbeddedImageToLinked
Partie de manutention
* CopyPart
* ImportForeignPart
* PartsList
* StripParts
Divers
* CompareDocuments
* CreateDocxWithCustomXml
* CustomXmlBinding
* DocProps
* Filter
* HyperlinkTest
* NumberingRestart
* UnmarshallFromTemplate
Si vous avez installé le code source, vous aurez déjà ce paquet.
Si vous n'avez pas, vous pouvez consulter en ligne, à
http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/java/org/docx4j/samples
Il existe également plusieurs exemples de documents dans l'échantillon-docs répertoire /: ce sont les plus facilement accessibles en consultant docx4j svn.
Liste des pièces
Pour avoir une meilleure compréhension de la façon docx4j travaux et la structure d'un document docx vous pouvez exécuter la PartsList échantillon sur un docx (ou un pptx). Si vous le faites, il donnera la liste de la hiérarchie des pièces utilisées dans ce package. Il vous dira quelle classe est utilisé pour représenter chaque partie, et lorsque cette partie est un JaxbXmlPart, il vous indiquera également quelle classe de la jaxbElement est.
Par exemple:
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]
Passer en revue une docx
OpenMainDocumentAndTraverse.java dans le répertoire des échantillons vous montre comment traverser la représentation d'un JAXB docx.
Une chose au sujet ennuyeux JAXB, est un objet-dire un tableau peut être représenté comme org.docx4j.wml.Tbl (Comme on peut s'y attendre). Ou il pourrait être enveloppé dans un javax.xml.bind.JAXBElementDans ce cas, pour obtenir la vraie table, vous avez à faire quelque chose comme:
if ( ((JAXBElement)o).getDeclaredType().getName().equals( "org.docx4j.wml.Tbl" ) )
tbl = org.docx4j.wml.Tbl (org.docx4j.wml.Tbl) ((JAXBElement) o). getValue ();
Création d'une nouvelle docx
Pour créer une nouvelle docx:
/ / Créer le package
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
/ / Sauvegarde
wordMLPackage.save(new java.io.File("helloworld.docx") );
C'est tout.
createPackage() est une méthode commode, qui ne:
/ / Créer le package
WordprocessingMLPackage wordMLPackage = new WordprocessingMLPackage();
/ / Création de la partie du document principal (word / document.xml)
MainDocumentPart wordDocumentPart = new MainDocumentPart();
/ / Créer un contenu principale partie du document
ObjectFactory factory = Context.getWmlObjectFactory();
org.docx4j.wml.Body body = factory .createBody();
org.docx4j.wml.Document wmlDocumentEl = factory .createDocument();
wmlDocumentEl.setBody(body);
/ / Mettez le contenu dans la partie
wordDocumentPart.setJaxbElement(wmlDocumentEl);
/ / Ajoute la partie principale du document à l'ensemble des relations
/ / (Le créer si nécessaire)
wmlPack.addTargetPart(wordDocumentPart);
Ajout d'un paragraphe de texte
MainDocumentPart contient une méthode:
public org.docx4j.wml.P addStyledParagraphOfText(String styleId, String text)
Vous pouvez utiliser cette méthode pour ajouter un paragraphe à l'aide du style spécifié.
Le XML nous cherchons à créer sera quelque chose comme:
<
w:p
xmlns:w
="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
>
<
w:r
>
<
w:t
>
Hello world
</
w:t
>
</
w:r
>
</
w:p
>
addStyledParagraphOfText construit la structure de l'objet comme JAXB, et il ajoute le document.
ObjectFactory factory = Context.getWmlObjectFactory();
/ / Création de l'alinéa
org.docx4j.wml.P para = factory.createP();
/ / Créer le texte de l'élément
org.docx4j.wml.Text t = factory.createText();
t.setValue(simpleText);
/ / Création de la course
org.docx4j.wml.R run = factory.createR();
run.getRunContent().add(t);
para.getParagraphContent().add(run);
/ / Maintenant, ajoutez à notre point le corps du document
Body body = this.jaxbElement.getBody();
Body.getEGBlockLevelElts().add(para)
Alternativement, vous pouvez créer le point de triage par XML:
/ / En supposant une chaîne XML qui contient le code XML ci-dessus
org.docx4j.wml.P para = XmlUtils.unmarshalString(xml);
Pour que cela fonctionne, vous devez vous assurer que tous les espaces de noms sont déclarés correctement dans la chaîne.
Ajout d'une partie
Que faire si vous voulez ajouter une nouvelle partie des styles? Voici comment:
/ / Création d'une partie des styles
StyleDefinitionsPart stylesPart = new StyleDefinitionsPart();
/ / Le remplir avec des styles par défaut
stylesPart.unmarshalDefaultStyles();
/ / Ajoute la partie des styles à la partie du document principal des relations
wordDocumentPart.addTargetPart(stylesPart);
Vous souhaitez adopter la même approche pour ajouter un en-tête ou pied de page.
Lorsque vous ajoutez une partie de cette façon, il est automatiquement ajouté à la partie des relations source fait partie.
En général, vous aurez également besoin d'ajouter une référence à la partie (en utilisant son id relation) à la partie principale du document. Ceci s'applique aux images, en-têtes et pieds de page. (Les commentaires, les notes et les notes sont un peu différentes, en ce que ce que vous ajoutez à la partie principale du document sont des références à des commentaires individuels / notes / notes de fin).
docx (X) HTML
docx4j utilise XSLT pour transformer un docx en XHTML:
AbstractHtmlExporter exporter = new HtmlExporterNG2();
/ / Noter l'* 2 * il
/ / Ecrire à StreamResult (dans ce cas, un flux de sortie)
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" );
Vous trouverez le code HTML généré est propre.
docx4j utilise des fonctions d'extension XSLT Java pour faire le levage de charges lourdes, de sorte que le XSLT est lui-même reste simple.
docx au format PDF
docx4j produit XSL FO, qui peut à son tour être utilisé pour créer un fichier PDF.
À l'heure actuelle, Apache FOP est intégré dans docx4j pour créer le PDF. (Bientôt, nous allons changer les choses pour que docx4j génère destinés à être utilisés par votre préféré pour moteur de rendu, qu'il s'agisse de FOP, ou un outil commercial comme XEP).
Pour créer un PDF:
/ / L'identité Polices meilleure cartographie sur Microsoft Windows
wordMLPackage.setFontMapper( new IdentityPlusMapper());
/ / Définit le convertisseur
org.docx4j.convert.out.pdf.PdfConversion c
=
new
org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage);
/ / Écrire sur la sortie courant
OutputStream os = new java.io.FileOutputStream(inputfilepath + ".pdf" );
c.output(os);
Image Manipulation
Lorsque vous ajoutez une image à un document dans Word 2007, il est généralement ajouté une nouvelle partie (c.-à-vous trouver un rôle dans la docx résultant, contenant l'image en format base 64).
Lorsque vous ouvrez le document dans docx4j, docx4j will create an image part representing it.
Il est également possible de créer une image liée. Dans ce cas, l'image n'est pas inclus dans le package docx, mais plutôt, est référencé à son emplacement externe.
docx4j»S BinaryPartAbstractImage classe contient des méthodes pour vous permettre de créer à la fois liés et incorporés images (ainsi que des relations appropriées).
/ **
* Créer un cadre image à partir du tableau d'octets à condition, l'attacher à la
* Une partie du document principal, et le retourner .* /
public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage,
byte [] bytes)
/ **
* Créer un cadre image à partir du tableau d'octets fournis, attachez-le à la source une partie
* (Par exemple, la partie du document principal, une partie en-tête, etc), et le retourner .* /
public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage,
Part sourcePart, byte [] bytes)
/ **
* Créer un cadre image liée, et l'attacher comme un rel de la source de partie déterminée
* (Par exemple une partie en-tête) * /
public static
BinaryPartAbstractImage createLinkedImagePart(
WordprocessingMLPackage wordMLPackage, Part sourcePart, String fileurl)
Pour une image à figurer dans le document, il doit également être XML appropriées dans la partie du document principal. Ce XML peut prendre 2 formes de base:
* l'Word 2007 W: le dessin sous forme
<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 fondée sur w: PICT forme
<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 peut créer le Word 2007 w: dessin / wp: inline formulaire pour vous:
/ **
* Create a <wp:inline> element suitable for this image,
* Qui peuvent être liés ou incorporés dans w: p / w: R / W: le dessin.
* If the image is wider than the page, it will be scaled
* Automatiquement. Voir Javadoc pour les signatures d'autres.
* @ param filenameHint Tout texte, par exemple le nom du fichier original
* @ param alttext Comme alt texte HTML
* @ param id1 un identifiant unique dans le document
* @ param id id2 autre unique dans le document
* @ param lien vrai si ce n'est d'être lié non incorporé * /
public Inline createImageInline(String filenameHint, String altText,
int id1, int id2, boolean link)
que vous pouvez ensuite ajouter à un w: R / W: le dessin.
Enfin, avec docx4j, Vous pouvez convertir des images de formats non pris en charge par Word (par exemple PDF), en PNG, qui est un format pris en charge. Pour cela, docx4j utilise ImageMagick. Donc, si vous souhaitez utiliser cette fonctionnalité, vous devez installer ImageMagick. docx4j ImageMagick invoque l'aide:
Process p = Runtime.getRuntime().exec(
"imconvert -density "
+ density +
" -units PixelsPerInch - png:-"
);
Notez le nom imconvert , qui est utilisé de sorte que nous n'avons pas de fournir un chemin d'accès complet à exec. Vous devrez en tenir compte.
extraction de texte
Un moyen rapide pour extraire le texte d'un docx, est d'utiliser textutils
public static void extractText(Object o, Writer w)
qui maréchaux de l'objet, il est passé par un ContentHandler SAX, afin d'afficher le texte de l'écrivain.
substitution de texte
substitution de texte est assez facile, à condition que la chaîne que vous recherchez est représenté dans un org.docx4j.wml.Text objet dans le formulaire que vous attendez.
Toutefois, ce ne sera pas nécessairement le cas. La chaîne pourrait être brisé dans le texte court pour l'une des raisons suivantes:
* une partie du mot est formaté différemment (par exemple en gras)
* orthographe / grammaire
* Afin d'édition (rsid)
docx4j éventuellement tenir compte de ces cas, mais ne pas pour le moment.
Sous cette réserve, vous pouvez faire substitution de texte dans une variété de façons, par exemple:
* traversant la partie du document principal, et en regardant les org.docx4j.wml.Text objets
* maréchal à une chaîne de caractères, recherche / remplacement en ce que, puis à nouveau unmarshall
docx4j s XmlUtils contient également:
/ **
* Donnez une chaîne de WML contenant $ () key1, $ () cle2, retourner une appropriés
* Objet .* /
public static Object unmarshallFromTemplate(String wmlTemplateString,
java.util.HashMap <String, string> mappings)
Voir l'exemple UnmarshallFromTemplate, qui fonctionne sur une chaîne de caractères contenant:
<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>
Trucs et astuces
Travailler avec le format plat OPC XML
Lorsque vous voulez regarder à l'intérieur d'un document docx, c'est un peu d'une douleur d'avoir à le décompresser pour regarder la partie concernée.
Il ya 2 façons de contourner cela.
On est http://www.codeplex.com/PackageExplorer , Qui peut décompresser les docx, et jolie imprimer une partie.
Une autre est de sauver le docx en tant que Word document XML (*. xml). Cela produit un seul fichier XML, que vous pouvez ouvrir dans un éditeur XML tel que XPontus.
docx4j pouvez ouvrir des fichiers XML OPC plat, et mettre à leur disposition.
Pour ouvrir un fichier plat OPC XML:
WordprocessingMLPackage wordMLPackage =
WordprocessingMLPackage.load(new java.io.File(inputfilepath));
Pour enregistrer en tant que plat OPC XML:
wordMLPackage.save(new java.io.File(outputfilepath));
Dans les deux cas, le code Flat OPC sera utilisé si et seulement si l'extension de fichier est. Xml.
Rappelez-vous UnmarshalFromString
Lorsque vous manipulez des documents docx, il est souvent utile d'extraits de désorganiser XML (par exemple une String représentant un paragraphe à insérer dans le document).
Par exemple, étant donné:
<
w:p
xmlns:w
="http://schemas.openxmlformats.org/wordprocessingml/2006/main"
>
<
w:r
>
<
w:t
>
Hello world
</
w:t
>
</
w:r
>
</
w:p
>
il vous suffit de:
/ / En supposant une chaîne XML qui contient le code XML ci-dessus
org.docx4j.wml.P para = XmlUtils.unmarshalString(xml);
Clonage
Pour cloner un objet JAXB, appliquez l'une des méthodes suivantes en respectant XmlUtils:
/ ** Clone cet objet JAXB, en utilisant JAXBContext défaut. * /
public static <T> T deepCopy(T value)
/ ** * Cette Clone objet JAXB /
public static <T> T deepCopy(T value, JAXBContext jc)
@XmlRootElement
La plupart des objets couramment utilisés ont une XmlRootElement @ annotation, afin qu'ils puissent être rassemblés et unmarshalled.
Dans certains cas, vous pourriez trouver cette annotation est manquant.
Si vous ne pouvez pas ajouter l'annotation à la source de JAXB, le code d'une autre solution consiste à Marshall en utilisant le code qui est explicite sur le QName qui en résultent. Par exemple, XmlUtils contient:
/ ** Maréchal à un document du W3C, pour objet
* Manque une annotation @ XmlRootElement. * /
public static
org.w3c.dom.Document marshaltoW3CDomDocument(Object o, JAXBContext jc,
String uri, String local, Class declaredType)
Vous pouvez utiliser cette façon:
CTFootnotes footnotes =
wmlPackage.getMainDocumentPart().getFootnotesPart().getJaxbElement().getValue();
CTFtnEdn ftn = footnotes.getFootnote().get(1);
/ / N @ XmlRootElement sur CTFtnEdn alors ..
Document d = XmlUtils.marshaltoW3CDomDocument( ftn,
Context.jc, Namespaces.NS_WORD12, "footnote" , CTFtnEdn. class );
Si vous avez besoin pour désorganiser, vous pouvez utiliser:
public static Object unmarshalString(String str, JAXBContext jc, Class declaredType)
Le docx4j forum
soutien de la communauté libre est disponible dans les docx4j forum, http://dev.plutext.org/forums/
Cette discussion est généralement en anglais. Si vous pouvez faire du bénévolat à modérer un forum dans votre langue, s'il vous plaît nous le faire savoir.
Autres options de soutien
Si le soutien de la communauté disponibles dans le docx4j forum ne répond pas à vos besoins, ou vous souhaitez simplement d'externaliser certaines de codage, vous êtes les bienvenus à l'achat de programmation, de consultation et un soutien prioritaire de http://www.plutext.com/m/index.php/docx4j-support.html
En utilisant les services de Plutext, vous appuyer le développement continu des docx4j.
Feuille de route
Word 2010 de soutien. Support pour les éléments XML nouvelles / schémas introduit avec Word 2010, et pour le mécanisme de compatibilité. C'est la principale justification de l'étiquette 3.0.
exportateurs HTML: se débarrasser des anciens; normaliser le NG2. L'idée est de supprimer toute «qui dois-je utiliser la« confusion, et concentrer les efforts et le savoir-faire.
exportateurs PDF: standardiser viaXSLFO, et se débarrasser des viaIText et viaHTML. Comme en HTML, l'idée est de supprimer toute «qui dois-je utiliser la« confusion, et concentrer les efforts et le savoir-faire. docx4j pourrait produire XSL Pour seulement, et compter sur l'utilisateur d'avoir FOP ou l'équivalent de produire effectivement le fichier PDF. Cela permettra de réduire les dépendances, rendant docx4j briquet. L'objectif serait de retirer le récipient FOP (2,8 M), pot de rendu PDF (1,6 M), jar iText (1,1 M), et le noyau-rendu (1M).
la gestion des polices: retirer l'étoffe panose, nous n'avons donc pas besoin d'un FOP pot personnalisé.
modèle de mise en page / format intermédiaire: docx4j contient une DocumentModel, ce qui pourrait être développé à l'appui:
* Rechercher / Remplacer
* Estimation de page de contenu
* XSLT, en enfermant des sections, des listes
Insertion d'objets OLE: si les feuilles de calcul, PDF, etc peuvent être intégrées.
Empreinte
Ce document a été écrit dans Word 2007, en utilisant:
* XML joli imprimé à l'aide http://www.softlion.com/webTools/XmlPrettyPrint/default.aspx Explorer le paquet ou
* le code source Java formaté à l'aide http://www.java2html.de
Le format PDF et HTML ont été générés à l'aide docx4j (PDF via XSL FO et FOP).
Contacte Plutext
Sauf si vous avez payé pour le soutien, le général Comment puis-je questions type devraient être affichés directement à la docx4j forum . Plutext peuvent poster sur le forum toutes les questions reçues par e-mail qui aurait dû être dirigé vers le forum.
Plutext peut être contacté à deux jason@plutext.org Ou jharrop@plutext.com
1 http://forums.java.net/jive/thread.jspa?threadID=411
2 Si vous obtenez l'erreur "Accès restriction du: Le type n'est pas accessible en raison de restriction à la bibliothèque de rt.jar nécessaire »(peut-être en utilisant une combinaison d'Eclipse 3.4 et / ou JDK 6 update 10?), vous devez vous rendre dans la construction Chemin d'accès pour le projet, onglet Bibliothèques, sélectionnez le JRE System Library, et ajouter une règle d'accès, "Accessible, **".