11 
This layer is based originally on OpenXML4J (which is also used by Apache POI).  
2. Parts are generally subclasses of org.docx4j.openpackaging.parts.JaxbXmlPart 
This (the jaxb content tree) is the second level of the three layered model. 
Parts are arranged in a tree.  If a part has descendants, it will have a 
org.docx4j.openpackaging.parts.relationships.RelationshipsPart which 
identifies those descendant parts.  The sample PartsList (see next section) shows you how this 
works. 
A JaxbXmlPart has a content tree: 
public Object getJaxbElement() { 
return jaxbElement; 
public void setJaxbElement(Object jaxbElement) { 
this.jaxbElement = jaxbElement; 
Most parts (including MainDocumentPart, styles, headers/footers, comments, 
endnotes/footnotes) use org.docx4j.wml (WordprocessingML); wml references 
org.docx4j.dml (DrawingML) as necessary. 
These classes were generated from the Open XML schemas 
3. org.docx4j.model 
This package builds on the lower two layers to provide extra functionality, and is being 
progressively further developed.     
Jaxb: marshalling and unmarshalling  
Docx4j contains a class representing each part.  For example, there is a MainDocumentPart class.  XML 
parts inherit from JaxbXmlPart, which contains a member called jaxbElement.  When you want to 
work with the contents of a part, you work with its jaxbElement. 
When you open a docx document using docx4j, docx4j automatically unmarshals the contents of each 
XML part to a strongly-type Java object tree (the jaxbElement). 
.Pdf to jpg - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
change file from pdf to jpg on; convert pdf file to jpg
.Pdf to jpg - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
convert multipage pdf to jpg; convert .pdf to .jpg
12 
Similarly, if/when you tell docx4j to save these Java objects as a docx, docx4j automatically marshals the 
jaxbElement in each Part. 
Sometimes you will want to marshal or unmarshal things yourself.  The class 
org.docx4j.jaxb.Context
defines all the JAXBContexts used in 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 
Parts List 
To get a better understanding of how docx4j works – and the structure of a docx document – you can 
run the PartsList sample on a docx (or a pptx or xlsx).  If you do, it will list the hierarchy of parts used in 
that package.  It will tell you which class is used to represent each part, and where that part is a 
JaxbXmlPart, it will also tell you what class the 
jaxbElement 
is. 
You can run it from a command line: 
java -cp docx4j.jar:log4j-1.2.15.jar org.docx4j.samples.PartsList [input.docx]
If there are any images in the docx, you'd also need to add to your classpath: xmlgraphics-commons-1.4.jar and commons-
logging-1.1.1.jar
For example:  
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 
Online Convert Jpeg to PDF file. Best free online export Jpg image
Download Free Trial. Convert a JPG to PDF. Web Security. All your JPG and PDF files will be permanently erased from our servers after one hour.
.pdf to jpg converter online; batch pdf to jpg converter
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Download Free Trial. Convert a PDF File to JPG. Web Security. Your PDF and JPG files will be deleted from our servers an hour after the conversion.
batch pdf to jpg online; best program to convert pdf to jpg
13 
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]  
docx4j includes convenience methods to make it easy to access commonly used parts. These include, 
on the package: 
public MainDocumentPart getMainDocumentPart()  
public DocPropsCorePart getDocPropsCorePart()  
public DocPropsExtendedPart getDocPropsExtendedPart()  
public DocPropsCustomPart getDocPropsCustomPart()  
on the document part: 
public StyleDefinitionsPart getStyleDefinitionsPart() 
public NumberingDefinitionsPart getNumberingDefinitionsPart() 
public ThemePart getThemePart() 
public FontTablePart getFontTablePart() 
public CommentsPart getCommentsPart() 
public EndnotesPart getEndNotesPart() 
public FootnotesPart getFootnotesPart() 
public DocumentSettingsPart getDocumentSettingsPart() 
public WebSettingsPart getWebSettingsPart() 
If a part points to any other parts, it will have a relationships part listing these other parts.  
RelationshipsPart rp = part.getRelationshipsPart(); 
You can access those, and from there, get the part you want: 
for ( Relationship r : rp.getRelationships().getRelationship() ) { 
log.info("\nFor Relationship Id=" + r.getId()  
" Source is " + rp.getSourceP().getPartName()  
", Target is " + r.getTarget()  
" type " + r.getType() + "\n"); 
Part part = rp.getPart(r); 
That gives access to just the parts this part points to. 
There is also a list of all parts, in the package object: 
Parts parts = wordMLPackage.getParts(); 
The Parts object encapsulates a map of parts, keyed by PartName.
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
String inputFilePath = @"C:\input.pdf"; String outputFilePath = @"C:\output.jpg"; // Convert PDF to jpg. C# sample code for PDF to jpg image conversion.
convert pdf to jpeg; convert pdf picture to jpg
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.PDF.dll. String inputFilePath = @"C:\input.tif"; String outputFilePath = @"C:\output.jpg"; // Convert tiff to jpg.
batch pdf to jpg converter online; best pdf to jpg converter
14 
To add a part, see the section Adding a Part below. 
MainDocumentPart 
The text of the document is to be found in the main document part. 
Given: 
WordprocessingMLPackage wordMLPackage 
you can access: 
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); 
Classically, you'd then do: 
org.docx4j.wml.Document wmlDocumentEl  
= (org.docx4j.wml.Document) documentPart.getJaxbElement(); 
Body body = wmlDocumentEl.getBody(); 
But as from 2.7.0, there is: 
/** 
* Convenience method to getJaxbElement().getBody().getContent() 
@since 2.7 
*/ 
public List<Object> getContent()  
A paragraph is org.docx4j.wml.P; a paragraph is basically made up of runs of text. 
@XmlRootElement
(name = "p"
public class P implements Child, ContentAccessor 
The 
ContentAccessor
interface is simply: 
/** 
@since 2.7 
*/ 
public interface ContentAccessor { 
public List<Object> getContent(); 
it is implemented by a number of objects, including: 
 P, R (R is for run, which is where the document text lives) 
 Hdr, Ftr 
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
similar software; Support a batch conversion of JPG to PDF with amazingly high speed; Get a compressed PDF file after conversion; Support
convert pdf pages to jpg; convert pdf into jpg format
JPG to JBIG2 Converter | Convert JPEG to JBIG2, Convert JBIG2 to
Image Converter Pro - JPEG to JBIG2 Converter. Convert JPEG (JPG) Images to, from JBIG2 Images on Windows.
convert pdf page to jpg; convert pdf to jpg file
15 
 table related objects (Tbl, Tc, Tr) 
 content control objects 
Read on for how to add text etc. 
Samples 
The package org.docx4j.samples contains examples of how to do things with docx4j.  There are pptx and 
xlsx samples in packages org.pptx4j.samples and org.xlsx4j.samples respectively. 
The docx4j samples include: 
Basics 
 CreateWordprocessingMLDocument 
 DisplayMainDocumentPartXml 
 OpenAndSaveRoundTripTest 
 OpenMainDocumentAndTraverse 
 XPathQuery 
Output/Transformation 
 CreateHtml 
 CreatePdf 
Flat OPC XML  
 ExportInPackageFormat 
 ImportFromPackageFormat 
Image handling  
 AddImage 
 ConvertEmbeddedImageToLinked 
Part Handling 
 CopyPart 
 ImportForeignPart 
 PartsList 
 StripParts 
Document generation/document assembly using content controls 
 AltChunk 
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
Converter. Convert JPEG (JPG) Images to, from GIF Images on Windows. JPEG to GIF Converter can directly convert GIF files to JPG files.
convert pdf to jpg 100 dpi; convert pdf image to jpg online
JPG to DICOM Converter | Convert JPEG to DICOM, Convert DICOM to
Image Converter Pro - JPEG to DICOM Converter. Convert JPEG (JPG) Images to, from DICOM Images on Windows.
.pdf to .jpg online; bulk pdf to jpg converter online
16 
 CreateDocxWithCustomXml 
 CustomXmlBinding 
 ContentControlBindingExtensions 
Miscellaneous 
 CompareDocuments 
 DocProps 
 Filter 
 HyperlinkTest 
 NumberingRestart 
 UnmarshallFromTemplate 
If you installed the source code, you'll have this package already. 
If you didn't, you can browse it online, at  
http://dev.plutext.org/trac/docx4j/browser/trunk/docx4j/src/main/java/org/docx4j/samples
There are also various sample documents in the /sample-docs directory; these are most easily accessed 
by checking out docx4j svn. 
Creating a new docx 
To create a new docx: 
// Create the package 
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 
// Save it 
wordMLPackage.save(new java.io.File("helloworld.docx") ); 
That's it.   
createPackage() 
is a convenience method, which does: 
// Create the package 
WordprocessingMLPackage wordMLPackage = new WordprocessingMLPackage(); 
// Create the main document part (word/document.xml) 
MainDocumentPart wordDocumentPart = new MainDocumentPart(); 
// Create main document part content 
ObjectFactory factory = Context.getWmlObjectFactory(); 
org.docx4j.wml.Body body = factory .createBody(); 
org.docx4j.wml.Document wmlDocumentEl = factory .createDocument(); 
17 
wmlDocumentEl.setBody(body); 
 
// Put the content in the part 
wordDocumentPart.setJaxbElement(wmlDocumentEl); 
 
// Add the main document part to the package relationships 
// (creating it if necessary) 
wmlPack.addTargetPart(wordDocumentPart); 
docx4j.properties 
Here is a sample docx4j.properties file: 
# Page size: use a value from org.docx4j.model.structure.PageSizePaper enum 
# eg A4, LETTER 
docx4j.PageSize=LETTER 
# Page size: use a value from org.docx4j.model.structure.MarginsWellKnown enum 
docx4j.PageMargins=NORMAL 
docx4j.PageOrientationLandscape=false 
# Page size: use a value from org.pptx4j.model.SlideSizesWellKnown enum 
# eg A4, LETTER 
pptx4j.PageSize=LETTER 
pptx4j.PageOrientationLandscape=false 
# These will be injected into docProps/app.xml 
# if App.Write=true 
docx4j.App.write=true 
docx4j.Application=docx4j 
docx4j.AppVersion=2.7 
# of the form XX.YYYY where X and Y represent numerical values 
# These will be injected into docProps/core.xml 
docx4j.dc.write=true 
docx4j.dc.creator.value=docx4j 
docx4j.dc.lastModifiedBy.value=docx4j 
# 
#docx4j.McPreprocessor=true 
# If you haven't configured log4j yourself 
# docx4j will autoconfigure it.  Set this to true to disable that 
docx4j.Log4j.Configurator.disabled=false 
The page size, margin & orientation values are used when new documents are created; naturally they 
don't affect an existing document you open with docx4j. 
If no docx4j.properties file is found on your class path, docx4j has hard coded defaults. 
Adding a paragraph of text 
MainDocumentPart 
contains a method: 
public org.docx4j.wml.P addStyledParagraphOfText(String styleId, String text)
You can use that method to add a paragraph using the specified style. 
18 
The XML we are looking to create will be something like: 
<w:p  xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> 
<w:r> 
<w:t>Hello world</w:t> 
</w:r> 
</w:p
addStyledParagraphOfText 
builds the object structure ͞the JAX  way͟, and adds it to the document. 
ObjectFactory factory = Context.getWmlObjectFactory(); 
// Create the paragraph 
org.docx4j.wml.P  para = factory.createP(); 
// Create the text element 
org.docx4j.wml.Text  t = factory.createText(); 
t.setValue(simpleText); 
 
// Create the run 
org.docx4j.wml.R  run = factory.createR(); 
run.getRunContent().add(t);     
 
para.getParagraphContent().add(run); 
// Now add our paragraph to the document body 
Body body = this.jaxbElement.getBody(); 
Body.getEGBlockLevelElts().add(para) 
Notice that adding a paragraph involves: 
Body.getEGBlockLevelElts().add(para) 
Similarly, the paragraph object P has: 
public List<Object> getParagraphContent() 
and the run object: 
public List<Object> getRunContent()  
Alternatively, you can create the paragraph by marshalling XML: 
// Assuming String xml contains the XML above 
org.docx4j.wml.P  para = XmlUtils.unmarshalString(xml); 
For this to work, you need to ensure that all namespaces are declared properly in the string. 
See further below for adding images, and tables. 
19 
General strategy/approach for creating stuff 
The first thing you need to know is what the XML you are trying to create looks like. 
To figure this out, start with a docx that contains the construct (create it in Word if necessary). 
Now look at its XML. Choices: 
 
You can unzip it to do this 
 
easiest may be to save it as Flat OPC XML from Word (or use the 
ExportInPackageFormat
sample),  so you have just a single XML file which you don't need to unzip
 you can use the 
DisplayMainDocumentPartXml 
to get it 
 you can open it with docx4all, and look at the source view 
 on Windows, if you have Visual Studio 2010, you can drag the docx onto it 
 on Windows, get PackageExplorer from codeplex. 
Now you are ready to create this XML using JAXB.  There are 2 basic ways. 
The classic JAXB way is to use the ObjectFactory's .createX methods.  For example: 
ObjectFactory factory = Context.getWmlObjectFactory();  
P p = factory.createP();  
The challenge with this is to know what object it is you are trying to create.  To find this out, run 
OpenMainDocumentAndTraverse 
on your document. 
Here are the names for some common objects: 
Object 
XML element 
docx4j class 
Factory method 
Document body w:body 
org.docx4j.wml.Body 
factory.createBody(); 
Paragraph 
w:p 
org.docx4j.wml.P 
factory.createP() 
Paragraph 
props 
w:pPr 
org.docx4j.wml.PPr 
factory.createPPr() 
Run 
w:r 
org.docx4j.wml.R 
factory.createR() 
Run props 
w:rPr 
org.docx4j.wml.RPr 
factory.createRPr() 
Text 
w:t 
org.docx4j.wml.Text 
factory.createText() 
Table 
w:tbl 
org.docx4j.wml.Tbl 
factory.createTbl() 
Table row 
w:tr 
org.docx4j.wml.Tr 
factory.createTr() 
Table cell 
w:tc 
org.docx4j.wml.Tc 
factory.createTc() 
Drawing 
w:drawing 
org.docx4j.wml.Drawing 
factory.createDrawing() 
Page break 
w:br 
org.docx4j.wml.Br 
factory.createBr() 
Footnote  
or endnote ref 
org.docx4j.wml.CTFtnEdnRef factory.createCTFtnEdnRef() 
An easier way may be to just unmarshal the  XML (eg a String representing a paragraph to be inserted 
into the document). 
20 
For example, given: 
<w:p  xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"> 
<w:r> 
<w:t>Hello world</w:t> 
</w:r> 
</w:p
you can simply: 
// Assuming String xml contains the XML above 
org.docx4j.wml.P  para = XmlUtils.unmarshalString(xml); 
Problems?  See javax.xml.bind.JAXBElement
One annoying thing about JAXB, is that an object – say a table – could be represented as 
org.docx4j.wml.Tbl
(as you would expect).  Or it might be wrapped in a 
javax.xml.bind.JAXBElement
, in 
which case to get the real table, you have to do something like: 
if ( ((JAXBElement)o).getDeclaredType().getName().equals("org.docx4j.wml.Tbl") )  
org.docx4j.wml.Tbl tbl = (org.docx4j.wml.Tbl)((JAXBElement)o).getValue(); 
XmlUtils.unwrap can do this for you. 
Be careful, though.  If you are intend to copy an unwrapped object into your document (rather than just 
read it), you'll probably want the object to remain wrapped (JAXB usually wraps them for a reason; 
without the wrapper, you might find you need an @XmlRootElement annotation in order to be able to 
marshall ie save your document). 
@XmlRootElement below. 
If you need to be explicit about the type, you can use: 
public static Object unmarshalString(String str, JAXBContext jc, Class declaredType) 
The ContentAccessor interface 
docx4j 2.7.0 introduced a content accessor interface. 
This interface contains a single method: 
public List<Object> getContent(); 
It is implemented for a number of objects, including the following: 
Body 
w:body 
document body 
w:p 
paragraph 
w:r 
run 
Documents you may be interested
Documents you may be interested