21 
Tbl 
Tr 
Tc 
w:tbl 
w:tr 
w:tc 
table 
table row 
table cell 
SdtBlock 
SdtRun 
CTSdtRow 
CTSdtCell 
w:sdt 
w:sdt 
w:sdt 
w:sdt 
content controls; see the 
method getSdtContent() 
In earlier versions of docx4j, each of these classes had a different name for the method which returns the list of 
content objects: 
Body 
getEGBlockLevelElts() 
getParagraphContent() 
getRunContent() 
Tbl 
Tr 
Tc 
getEGContentRowContent() 
getEGContentCellContent() 
getEGBlockLevelElts() 
SdtBlock 
SdtRun 
CTSdtRow 
CTSdtCell 
getSdtContent().getEGContentBlockContent() 
getSdtContent().getParagraphContent() 
getSdtContent().getEGContentRowContent() 
getSdtContent().getEGContentCellContent() 
Creating and adding a table 
org.docx4j.model.table.TblFactory provides an easy way to create a simple table. For an example of its 
use, see the CreateWordprocessingMLDocument sample. 
If you want to know what you need to add to format your table (make it prettier), see General 
strategy/approach for creating stuff above. 
Traversing a document 
OpenMainDocumentAndTraverse.java
in the samples directory shows you how to traverse the JAXB 
representation of a docx.   
You can run it from a command line: 
java -cp docx4j.jar:log4j-1.2.15.jar org.docx4j.samples.OpenMainDocumentAndTraverse [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
This sample is useful if you want to see what objects are used in your document.xml. 
This is an alternative to XSLT, which doesn't require marshalling/unmarshalling. 
Change file from pdf to jpg on - 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 pdf to jpg online; convert pdf to jpg c#
Change file from pdf to jpg on - 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
change pdf into jpg; change pdf to jpg
22 
The sample uses TraversalUtil, which is a general approach for traversing the JAXB object tree in the 
main document part.  It can also be applied to headers, footers etc.   TraversalUtil has an 
interface 
Callback, 
which you use to specify how you want to traverse the nodes, and what you want to do to 
them. 
As noted in "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" above,  many objects (eg the document body, a paragraph, a run), have a 
List containing  their content (see The ContentAccessor interface further below).  Traversal works by 
iterating over these lists.  
Online Convert Jpeg to PDF file. Best free online export Jpg image
You can drag and drop your JPG file in the box, and then start immediately to sort the files, try out some settings and then create the PDF files with the
convert pdf file to jpg online; convert pdf to jpg batch
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Online PDF to JPEG Converter. Download Free Trial. Convert a PDF File to JPG. Drag and drop your PDF in the box above and we'll convert the files for you.
convert pdf file to jpg file; change pdf to jpg file
23 
Selecting your insertion/editing point;  
accessing JAXB nodes via XPath 
Sometimes, XPath is a succinct way to select the things you need to change. 
Happily, from docx4j 2.5.0, you can do use XPath to select JAXB nodes: 
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); 
String xpath = "//w:p";  
List<Object> list = documentPart.getJAXBNodesViaXPath(xpath, false); 
These JAXB nodes are live, in the sense that if you change them, your document changes. 
There is a limitation however: the xpath expressions are evaluated against the XML document as it was 
when first opened in docx4j.  You can update the associated XML document once only, by passing true 
into 
getJAXBNodesViaXPath
. Updating it again (with current JAXB 2.1.x or 2.2.x) will cause an error. 
Adding a Part 
What if you wanted to add a new styles part? Here's how: 
// Create a styles part 
StyleDefinitionsPart stylesPart = new StyleDefinitionsPart(); 
// Populate it with default styles 
stylesPart.unmarshalDefaultStyles(); 
 
// Add the styles part to the main document part relationships 
wordDocumentPart.addTargetPart(stylesPart); 
You'd take the same approach to add a header or footer. 
When you add a part this way, it is automatically added to the source part's relationships part. 
Generally, you'll also need to add a reference to the part (using its relationship id) to the Main 
Document Part.  This applies to images, headers and footers. (Comments, footnotes and endnotes are a 
bit different, in that what you add to the main document part are references to individual 
comments/footnotes/endnotes). 
docx to (X)HTML 
docx4j uses XSLT to transform a docx to XHTML: 
AbstractHtmlExporter exporter = new HtmlExporterNG2(); 
// note the *2* there 
JPG to PNG Converter | Convert JPEG to PNG, Convert PNG to JPG
image with adjusted width & height; Change image resolution JPEG image from local folders in "File" in toolbar JPEG to PNG Converter first; Load JPG images from
pdf to jpeg; change format from pdf to jpg
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.PDF.dll. How to change Tiff image to Bmp image in your C# program. This demo code convert TIFF file all pages to bmp images.
convert pdf to high quality jpg; convert pdf file into jpg format
24 
// Write to StreamResult (in this case, an output stream) 
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"); 
You will find the generated HTML is clean. 
Docx4j uses Java XSLT extension functions to do the heavy lifting, so the XSLT itself is kept simple. 
If you have log4j debug level logging enabled for 
org.docx4j.convert.out.html.HtmlExporterNG2
anything which is not implemented will be obvious in the output document.  If debug level logging is 
not switched on, unsupported elements will be silently dropped. 
The XSLT can be found at 
src/main/java/org/docx4j/convert/out/html/docx2xhtmlNG2.xslt
There are several ways to customise the HTML output. 
 one of course is to alter the xslt itself. This should be avoided, unless your objective is to improve 
the fidelity of the output (in which case, please contribute a patch!) 
To substitute your own XSLT, you can use the 
HtmlExporterNG2 
method: 
public static void setXslt(Templates xslt)
 another possibility (currently in svn trunk only) is to register an SdtTagHandler
An SdtTagHandler allows you to wrap SdtContent (Content Control content) in arbitrary HTML (for 
example, a <div> with a particular class attribute, or style attribute, or associated javascript). 
The design envisages different tag handlers being applied depending on the value of 
w:sdt/w:sdtPr/w:tag (hence the name tag handler). The content of a tag should be name/value pairs 
delimited like a URL query string. 
For further details, please see the SdtWriter class. 
docx to PDF 
docx4j produces XSL FO, which can in turn be used to create a PDF. 
At present, Apache FOP is integrated into docx4j for creating the PDF.  (Soon, we will be changing things 
so that docx4j generates FO, for use by your preferred FO renderer, whether that's FOP, or a commercial 
tool such as XEP). 
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
C# sample code for PDF to jpg image conversion. This demo code convert PDF file all pages to jpg images. // Define input and output files path.
convert from pdf to jpg; batch pdf to jpg
VB.NET PDF Convert to Images SDK: Convert PDF to png, gif images
Convert PDF to Jpg, Png, Bmp, Gif, Tiff and Bitmap in ASP.NET. Or directly change PDF to Gif image file in VB.NET program with this demo code.
convert online pdf to jpg; batch convert pdf to jpg
25 
To create a PDF: 
// Fonts identity mapping – best on Microsoft Windows 
wordMLPackage.setFontMapper(new IdentityPlusMapper()); 
// Set up converter 
org.docx4j.convert.out.pdf.PdfConversion c  
new org.docx4j.convert.out.pdf.viaXSLFO.Conversion(wordMLPackage); 
// Write to output stream 
OutputStream os = new java.io.FileOutputStream(inputfilepath + ".pdf");       
c.output(os); 
See the CreatePdf sample. 
If you have log4j debug level logging enabled for 
org.docx4j.convert.out.pdf.viaXSLFO
, anything which 
is not implemented will be obvious in the output document.  In addition, the logs will contain the 
intermediate XSL FO for inspection.  If debug level logging is not switched on, unsupported elements 
will be silently dropped. 
The XSLT can be found at  
src/main/java/org/docx4j/convert/out/pdf/viaXSLFO/docx2fo.xslt
Fonts 
When docx4j is used to create a PDF, it can only use fonts which are available to it. 
These fonts come from 2 sources: 
 those installed on the computer 
 those embedded in the document 
Note that Word silently performs font substitution When you open an existing document in Word, and 
select text in a particular font, the actual font you see on the screen won't be the font reported in the 
ribbon if it is not installed on your computer or embedded in the document.  To see whether Word 2007 
is substituting a font, go into Word Options > Advanced > Show Document Content and press the "Font 
Substitution" button.   
Word's font substitution information is not available to docx4j.  As a developer, you 3 options: 
 ensure the font is installed or embedded 
 tell docx4j which font to use instead, or 
 allow docx4j to fallback to a default font 
To embed a font in a document, open it in Word on a computer which has the font installed (check no 
substitution is occuring), and go to Word Options > Save > Embed Fonts in File. 
C# TIFF: How to Use C#.NET Code to Compress TIFF Image File
C:\demo3.jpg" }; // Construct List<REImage> object. List<Bitmap> images = new List<Bitmap>(); / Step1: Load image to REImage object. foreach (string file in
best pdf to jpg converter for; c# convert pdf to jpg
C# Create PDF from images Library to convert Jpeg, png images to
Add(new Bitmap(Program.RootPath + "\\" 1.jpg")); images.Add 1.png")); / Build a PDF document with PDFDocument(images.ToArray()); / Save document to a file.
convert pdf into jpg; convert .pdf to .jpg online
26 
If you want to tell docx4j to use a different font, you need to add a font mapping.  The FontMapper 
interface is used to do this. 
On a Windows computer, font names for installed fonts are mapped 1:1 to the corresponding physical 
fonts via the IdentityPlusMapper. 
A font mapper contains Map<String, PhysicalFont>; to add a font mapping, as per the example in the 
CreatePdf sample: 
// Set up font mapper
Mapper fontMapper = new IdentityPlusMapper(); 
wordMLPackage.setFontMapper(fontMapper); 
// Example of mapping missing font Algerian to installed font Comic Sans
MS 
PhysicalFont font = PhysicalFonts.getPhysicalFonts().get("Comic Sans MS"); 
fontMapper.getFontMappings().put("Algerian", font); 
You'll see the font names if you configure log4j debug level logging for 
org.docx4j.fonts.PhysicalFonts
Image Handling 
When you add an image to a document in Word 2007, it is generally added as a new Part (ie you'll find a 
part in the resulting docx, containing the image in base 64 format). 
When you open the document in docx4j, docx4j will create an image part representing it. 
It is also possible to create a ͞linked͟ image.  In this case, the image is not embedded in the docx 
package, but rather, is referenced at its external location. 
Docx4j's 
BinaryPartAbstractImage
class contains methods to allow you to create both embedded 
and linked images (along with appropriate relationships). 
/** 
* Create an image part from the provided byte array, attach it to the  
* main document part, and return it.*/ 
public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage, 
byte[] bytes)  
 
/** 
* Create an image part from the provided byte array, attach it to the source part 
* (eg the main document part, a header part etc), and return it.*/ 
public static BinaryPartAbstractImage createImagePart(WordprocessingMLPackage wordMLPackage, 
Part sourcePart, byte[] bytes)  
/** 
* Create a linked image part, and attach it as a rel of the specified source part 
* (eg a header part) */ 
public static BinaryPartAbstractImage createLinkedImagePart( 
WordprocessingMLPackage wordMLPackage, Part sourcePart, String fileurl)  
27 
For an image to appear in the document, there also needs to be appropriate XML in the main document 
part.  This XML can take 2 basic forms: 
 
the Word 2007 w:drawing
form
<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> 
 
the Word 2003 VML-based w:pict form
<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 can create the Word 2007 w:drawing/wp:inline
form for you: 
/** 
* Create a <wp:inline> element suitable for this image, 
* which can be linked or embedded in w:p/w:r/w:drawing. 
* If the image is wider than the page, it will be scaled 
* automatically.  See Javadoc for other signatures. 
@param filenameHint Any text, for example the original filename 
@param altText  Like HTML's alt text 
28 
@param id1   An id unique in the document 
@param id2   Another id unique in the document 
@param link  true if this is to be linked not embedded */ 
public Inline createImageInline(String filenameHint, String altText,  
int id1, int id2, boolean link)  
which you can then add to a w:r/w:drawing. 
Finally, with docx4j, you can convert images from formats unsupported by Word (eg PDF), to PNG, which 
is a supported format.  For this, docx4j uses ImageMagick.  So if you want to use this feature, you need 
to install ImageMagick.  Docx4j invokes ImageMagick using: 
Process p = Runtime.getRuntime().exec("imconvert -density " + density + " -units PixelsPerInch - png:-"); 
Note the name imconvert, which is used so that we don't have to supply a full path to exec.  You'll need 
to accommodate that.   
Manual Image Manipulation 
Images involve three things: 
 the image part itself 
 a relationship, in the relationships part of the main document part (or header part etc).  This 
relationship includes: 
o the name of the image part (for example, 
/word/media/image1.jpeg
o the relationship ID 
 some XML in the main document part (or header part etc), referencing the relationship ID (see 
w:drawing and w:pict examples above) 
This means that if you are moving images around, you need to take care to ensure that the relationships 
remain valid.  
You can manually manipulate the relationship, and you can manually manipulate the XML referencing 
the relationship IDs. 
Given an image part, you can get the relationship pointing to it  
Relationship rel = copiedImagePart.getSourceRelationship(); 
String id = rel.getId(); 
You can then ensure the reference matches. 
Adding Headers/Footers 
See the HeaderFooter sample for how to do this. 
29 
Merging Documents 
As Eric White͛s blog explained
, combining multiple documents can be complicated: 
This programming task is complicated by the need to keep other parts of the document in sync 
with the data stored in paragraphs. For example, a paragraph can contain a reference to a 
comment in the comments part, and if there is a problem with this reference, the document is 
invalid. You must take care when moving / inserting / deleting paragraphs to maintain 
͚referential integrity͛ within the document. 
There is a paid extension for docx4j, called MergeDocx, which makes merging documents as easy as 
invoking the method: 
public  WordprocessingMLPackage merge(List<WordprocessingMLPackage> wmlPkgs) 
In other words, you pass a list of docx, and get a single new docx back. 
The extension can also be used to process a docx which is embedded as an altChunk.  (Without the 
extension, you have to rely on Word to convert the altChunk to normal content, which means if your 
docx contains w:altChunk, you have to round trip it through Word, before docx4j can create a PDF or 
HTML out of it.) 
To process the w:altChunk elements in a docx, you invoke: 
public WordprocessingMLPackage process(WordprocessingMLPackage srcPackage) 
You pass in a docx containg altChunks, and get a  new docx back which doesn͛t. 
Table of Contents 
The minimal XML docx4j needs to insert into the document for Microsoft Word to then generate a TOC (including 
hyperlinks and associated bookmarks), is: 
<w:p> 
<w:r> 
<w:fldChar w:fldCharType="begin" w:dirty="true"/> 
</w:r> 
<w:r> 
<w:instrText xml:space="preserve"> TOC \o "1-3" \h \z \u </w:instrText> 
</w:r> 
<w:r> 
<w:fldChar w:fldCharType="end"/> 
30 
</w:r> 
</w:p>   
Note the w:dirty="true". The actual field code in instrText could be altered to meet your requirements. 
Note that simply including this is currently not enough for you to get a table of contents in your HTML or PDF 
output. Currently, you'd need to open/save in Word, and the HTML/PDF output would need to support the result 
(page numbering will be a problem).
Text extraction 
A quick way to extract the text from a docx, is to use 
TextUtils‘   
public static void extractText(Object o, Writer w)
which marshals the object it is passed via a SAX ContentHandler, in order to output the text to the 
Writer.
Text substitution 
Text substitution is easy enough, provided the string you are searching for is represented in a 
org.docx4j.wml.Text object in the form you expect. 
However, that won't necessarily be the case.  The string could be broken across text runs for any of the 
following reasons: 
 part of the word is formatted differently (eg in bold) 
 spelling/grammar 
 editing order (rsid) 
This is one reason that using data bound content controls is often a better approach (see next section). 
Subject to that, you can do text substitution in a variety of ways, for example: 
 traversing the main document part, and looking at the org.docx4j.wml.Text objects 
 marshal to a string, search/replace in that, then unmarshall again  
docx4j͚s XmlUtils also contains: 
/** 
* Give a string of wml containing ${key1}, ${key2}, return a suitable 
* object.*/ 
public static Object unmarshallFromTemplate(String wmlTemplateString,  
Documents you may be interested
Documents you may be interested