itextsharp pdf to xml c# : Add bookmarks to pdf application Library cloud windows .net html class Docx4j_GettingStarted0-part1691

Docx4j - Getting Started 
This guide is for docx4j 3.0.0. 
The latest version of this document can always be found in docx4j on GitHub in /docs. 
The most up to date copy of this document is in English.  There is also a Russian version.  From time to 
time, it may be machine translated into other languages.  Please let us know if you are interested in 
writing some basic documentation in your own language (either as a contribution, or for a fee).  
What is docx4j? 
docx4j is a library for working with docx, pptx and xlsx files in Java.  In essence, it can unzip a docx (or 
pptx/xlsx) "package", and parse the XML to create an in-memory representation in Java using developer 
friendly classes (as opposed to DOM or SAX).   
It is similar in concept to Microsoft's  OpenXML SDK, which is for .NET. 
A strength of docx4j is that its in-memory representation uses JAXB, the JCP standard for Java - XML 
binding.  In this respect, Aspose is similar to it.  In contrast, Apache POI uses XML Beans. 
docx4j is open source, available under the Apache License (v2).  As an open source project, docx4j has 
been substantially improved by a number of contributions (see the README or POM file for 
contributors), and further contributions are always welcome.  Please see the docx4j forum at 
http://www.docx4java.org/forums/ for details. 
The docx4j project is sponsored by Plutext (www.plutext.com). 
Is docx4j for you? 
Docx4j is for processing docx documents (and pptx presentations and xlsx spreadsheets) in Java. 
It isn't for old binary (.doc) files.  If you wish to invest your effort around docx (as is wise), but you also 
need to be able to handle old doc files, see further below for your options.  
Nor is it for RTF files. 
If you want to process docx/pptx/xslsx on the .NET platform, you should consider Microsoft's  OpenXML 
SDK.  That said, docx4j can be used in a .NET environment via IKVM, and there are several reasons you 
might wish to do this: 
Where you need docx4j͛s capabilities, for example: 
Add bookmarks to pdf - add, remove, update PDF bookmarks in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your C# Project with Rapid PDF Internal Navigation Via Bookmark and Outline
bookmarks pdf file; add bookmarks to pdf online
Add bookmarks to pdf - VB.NET PDF bookmark library: add, remove, update PDF bookmarks in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Your VB.NET Project with Rapid PDF Internal Navigation Via Bookmark and Outline
pdf create bookmarks; add bookmarks to pdf reader
o
XHTML import 
o
PDF or XHTML export 
o
OpenDoPE processing 
Capabilities provided by docx4j commercial extensions, for example: 
o
Merging documents or presentations 
o
OLE embedding 
o
TOC generation/updating 
Where you need to work in both Java and .NET, and want to use a single API in both 
environments 
Where you need the source code (Microsoft doesn͛t provide that) 
An alternative to docx4j is Apache POI,  which is likely to be an especially good fit if you are only 
processing Excel documents, and need support for the old binary xls format.  Since POI uses XmlBeans 
(not JAXB) it may be a better choice if you want to use XmlBeans. 
What sorts of things can you do with docx4j? 
Open existing docx (from filesystem, SMB/CIFS, WebDAV using VFS), pptx, xlsx 
Create new docx, pptx, xlsx 
Programmatically manipulate the above (of course) 
Save to various media zipped, or unzipped 
Do all this on Android (v3 or 4). 
Specific to docx4j (as opposed to pptx4j, xlsx4j): 
Import XHTML 
Export as (X)HTML or PDF 
Template substitution; CustomXML binding 
Mail merge 
Produce/consume Word 2007's xmlPackage (pkg) format 
Apply transforms, including common filters 
Diff/compare documents, paragraphs or sdt (content controls) 
Font support (font substitution, and use of any fonts embedded in the document) 
This document focuses primarily on docx4j, but the general principles are equally applicable to pptx4j 
and xlsx4j. 
If there is some feature you'd like to see added, http://docx4j.userecho.com/ is the place to raise it. 
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Bookmarks. Comments, forms and multimedia. Flatten visible layers. C#.NET DLLs: Compress PDF Document. Add necessary references: RasterEdge.Imaging.Basic.dll.
bookmarks in pdf from word; how to add a bookmark in pdf
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
document file. Remove bookmarks, annotations, watermark, page labels and article threads from PDF while compressing. Also a preview
how to add bookmarks to pdf files; how to add bookmarks to a pdf
What Word documents does it support? 
Docx4j can read/write docx documents created by or for Word 2007 or later, plus earlier versions which 
have the compatibility pack installed. 
The relevant parts of docx4j are generated from the ECMA schemas, with the addition of the key 
Microsoft proprietary extensions.  For unsupported extensions, docx4j gracefully degrades to the 
specified 2007 substitutes. 
It is not really intended read/write Word 2003 XML documents, although 
package 
org.docx4j.convert.in.word2003xml 
is a proof of concept of importing such documents.
For more information, please see Specification versions below. 
Handling legacy binary .doc files 
Apache POI's HWPF can read .doc files, and docx4j͛s 
org.docx4j.convert.in.Doc 
does use this for 
basic conversion of .doc to .docx.  The problem with this approach is that POI's HWPF code fails on 
many .doc files. 
An effective approach is to use LibreOffice or OpenOffice (via jodconverter) to convert the doc to docx, 
which docx4j can then process.  If you need to return a binary .doc, LibreOffice or 
OpenOffice/jodconverter can convert the docx back to .doc. 
Getting Help: the docx4j forum 
Free community support is available in the docx4j forum, at http://www.docx4java.org/forums/ and on 
Stack Overflow. 
Before posting, please: 
check this document doesn͛t answer your question 
try to help yourself: people are unlikely to help you if it looks like you are asking someone else 
to do lots of work you presumably are being paid to do! 
ensure your post says which version of docx4j you are using, and contains your Java code 
(between [java] .. and .. [/java]) and XML (between [xml] .. and .. [/xml]), and if appropriate a 
docx/pptx/xlsx attachment 
consider browsing relevant docx4j source code  
This discussion is generally in English.  If you would like to moderate a forum in another language (for 
example, French,  hinese, Spanish…), please let us know. 
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Add necessary references: The following VB.NET codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
convert excel to pdf with bookmarks; adding bookmarks to pdf reader
C# PDF File Split Library: Split, seperate PDF into multiple files
Add necessary references: RasterEdge.Imaging.Basic.dll. The following C# codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
pdf bookmark editor; excel print to pdf with bookmarks
Using docx4j via Maven 
docx4j is in Maven Central.  For Maven users, this makes it really easy to get going with docx4j.   
With Eclipse and m2eclipse installed, you just add docx4j, and you͛re done.  No need to mess around 
with manually installing jars, setting class paths etc. 
The blog entry hello-maven-central shows you what to do, starting with a fresh OS (Win 7 is used, but 
these steps would work equally well on OSX or Linux). 
Using docx4j binaries 
If Maven is not for you, you can download the latest version of docx4j from 
http://www.docx4java.org/docx4j/ 
In general, we suggest you develop against a currently nightly build, since the latest formal release can 
often be several months old. 
Supporting jars can be found in the .tar.gz or zip version, or in the relevant subdirectory.   
Command Line Samples 
There are several samples you can run right away from the command line. 
The two to try (both discussed in detail further below) are: 
OpenMainDocumentAndTraverse 
PartsList 
Invoke with a command like: 
java -cp docx4j.jar:log4j-1.2.17.jar org.docx4j.samples.OpenMainDocumentAndTraverse [input.docx]
If there are any images in the docx, you'd also need: 
xmlgraphics-commons-1.5.jar 
commons-logging-1.1.1.jar
on your classpath. 
.NET PDF SDK - Description of All PDF Processing Control Feastures
Full page navigation, zooming & rotation; Outlines, bookmarks, & thumbnail display; PDF Text Write & Extract. Insert and add text to any page of PDF document with
create bookmarks pdf files; adding bookmarks to a pdf
XDoc.Word for .NET, Advanced .NET Word Processing Features
page navigation, zooming & rotation; Outlines, bookmarks, & thumbnail Convert Word to PDF; Convert Word to HTML5; Convert Add and insert a blank page or multiple
pdf reader with bookmarks; bookmark page in pdf
docx4j dependencies 
slf4j 
To do anything with docx4j, you need slf4j on your classpath.  As the slf4j website puts it: 
The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction 
for various logging frameworks (e.g. java.util.logging, logback, log4j) allowing the 
end user to plug in the desired logging framework at deployment time.
(In 2.8.1 and earlier, docx4j used log4j directly) 
So you need the slf4j api jar on your classpath: 
<dependency> 
<groupId>org.slf4j</groupId> 
<artifactId>slf4j-api</artifactId> 
<version>1.7.5</version> 
</dependency
If you want to use log4j, then include it, and: 
<dependency> 
<groupId>org.slf4j</groupId> 
<artifactId>slf4j-log4j12</artifactId> 
<version>1.7.5</version> 
</dependency
other dependencies  
Depending what you want to do, the other dependencies will be required.  
Dependency 
Comment 
+- org.slf4j:slf4j-api:jar:1.7.5 
+- org.plutext:jaxb-xmldsig-core:jar:1.0.0 
+- commons-lang:commons-lang:jar:2.4 
+- commons-codec:commons-codec:jar:1.3 
+- commons-io:commons-io:jar:1.3.1 
+- org.apache.xmlgraphics:xmlgraphics-commons:jar:1.5 
 \- commons-logging:commons-logging:jar:1.0.4 
+- org.apache.xmlgraphics:fop:jar:1.1 
+- org.plutext:jaxb-xslfo:jar:1.0.1 
+- org.apache.avalon.framework:avalon-framework-api:jar:4.3.1 
+- org.apache.avalon.framework:avalon-framework-impl:jar:4.3.1 
+- xalan:xalan:jar:2.7.1 
 \- xalan:serializer:jar:2.7.1 
+- org.plutext:jaxb-svg11:jar:1.0.2 
+- net.arnx:wmf2svg:jar:0.9.0 
Logging 
diffx 
ole introspection 
image support 
PDF output 
PDF output 
Font support 
(X)HTML, PDF export 
Pptx export 
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
converter toolkit SDK, preserves all the original anchors, links, bookmarks and font to Use C#.NET Demo Code to Convert PDF Document to Add necessary references
bookmark pdf documents; adding bookmarks to pdf
XDoc.PowerPoint for .NET, All Mature Features Introductions
navigation, zooming & rotation; Outlines, bookmarks, & thumbnail Convert PowerPoint to PDF; Convert PowerPoint to HTML5; Add a blank page or multiple pages to
editing bookmarks in pdf; pdf bookmark
+- org.apache.poi:poi-scratchpad:jar:3.8 
 \- org.apache.poi:poi:jar:3.8 
+- org.antlr:antlr-runtime:jar:3.3 
+- org.antlr:stringtemplate:jar:3.2.1 
 \- antlr:antlr:jar:2.7.7  
Optional: 
+- org.eclipse.persistence:org.eclipse.persistence.moxy:jar:2.5.1 
 +- org.eclipse.persistence:org.eclipse.persistence.core:jar:2.5.1 
 |  \- org.eclipse.persistence:org.eclipse.persistence.asm:jar:2.5.1 
 \- org.eclipse.persistence:org.eclipse.persistence.antlr:jar:2.5.1
OLE, binary import 
OpenDoPE 
JDK versions 
You need to be using Java 1.5+.  This is because of JAXB
1
.  If you must use  1.4, retrotranslator can 
reportedly make it work. 
If you are using 1.5 only, and want to do differencing, you will need stax (uncomment it in pom.xml). 
A word about Jaxb 
docx4j uses JAXB to marshall and unmarshall the XML parts in a docx/pptx/xlsx. 
JAXB is included in Sun's Java 6 distributions, but not 1.5.  So if you are using the 1.5 JDK, you will need 
JAXB 2.1.x on your class path.  
You can also use the JAXB reference implementation (eg v2.2.4).  If you want to use that in preference 
to the version included in the JDK, do so using the endorsed directory mechanism. 
With docx4j 3.0, you can choose to use MOXy instead.  
To do so, simply include docx4j-MOXy-
JAXBContext-3.0.0.jar and the MOXy jars on your classpath.  If you are using Maven, this 
means adding the following to your POM: 
<dependency> 
<groupId>org.docx4j</groupId> 
<artifactId>docx4j-MOXy-JAXBContext</artifactId> 
<version>3.0.0</version> 
</dependency> 
<dependency> 
<groupId>org.eclipse.persistence</groupId> 
<artifactId>org.eclipse.persistence.moxy</artifactId> 
<version>2.5.1</version> 
</dependency> 
1
http://forums.java.net/jive/thread.jspa?threadID=411 
Docx4j source code 
Docx4j source is on GitHub at https://github.com/plutext/docx4j .   
We accept pull requests; pull requests are presumed to be contributions under ASLv2 per our 
contributor agreement.   
See docx4j-from-github-in-eclipse for details. 
Source code can also be downloaded from Maven Central (search for docx4j at search.maven.org). 
Our old subversion repositoryat 
http://www.docx4java.org/svn/docx4j/trunk/docx4j
is obsolete.   
Javadoc 
Javadoc can be downloaded from Maven  entral (search for docx4j at search.maven.org), but you͛ll find 
the source code much more useful!  See above. 
Building docx4j from source  
Get the source code from GitHub (see above), then… (you probably want to skip down to the next page, 
to get it working in Eclipse). 
Command line -via Maven 
export MAVEN_OPTS=-Xmx512m 
mvn install  
Command line - via Ant 
Before you can build via ant, you need to obtain docx4j's dependencies.  You can get them from the 
binary distribution, or via maven.   
Edit build.xml, so the pathelements point to where you placed the dependencies. 
Then 
ant dist
or on Linux 
ANT_OPTS="-Xmx512m -XX:MaxPermSize=256m" ant dist
That ant command will create the docx4j.jar and place it and all its dependencies in the dist dir. 
Eclipse 
See docx4j-from-github-in-eclipse. 
Not working? 
Enable Maven (make sure you have Maven and its plugin installed - see Prerequisites above): 
with Eclipse Indigo 
o
Right click on the project 
o
Click "Configure > Convert to Maven Project" 
with earlier versions of Eclipse 
o
Run mvn install in the docx4j dir from a command prompt (just in case) 
o
Right click on project > Maven 2 > EnableDependency Management 
Set compiler version & system library: 
Right click on the project (or Alt-Enter) 
Choose "Java Compiler", then set JDK compliance to 1.6 
Choose "Java Build Path", and check you are using 1.6 "JRE System Library". If not, remove, then 
click "Add Library" 
Now, we need to check the class path etc within Eclipse so that it can build. 
Build Path > Configure Build Path > Java Build Path > Source tab 
Verify it contains (remove "Excluded: **" if present!): 
o
src/main/java 
o
src/pptx4j/java  
o
src/xslx4j/java 
o
src/diffx 
o
src/glox4j 
The project should now be working in Eclipse without errors
2
.  
Using a different IDE? 
Please post setup instructions in the forum, or as a wiki page on GitHub.  Thanks! 
2
If you get the error 'Access restriction: The type is not accessible due to restriction on required library rt.jar' 
(perhaps using some combination of Eclipse 3.4 and/or JDK 6 update 10?), you need to go into the Build Path for 
the project, Libraries tab, select the JRE System Library, and add an access rule, "Accessible, **".  
pen an existing docx/pptx/xlsx document 
org.docx4j.openpackaging.packages.WordprocessingMLPackage represents a docx 
document. 
To load a document or ͞Flat OP ͟ XML file, all you have to do is: 
WordprocessingMLPackage wordMLPackage =  
WordprocessingMLPackage.load(new java.io.File(inputfilepath)); 
With docx4j 3.0, you can use the façade: 
WordprocessingMLPackage wordMLPackage =  
Docx4J.load(new java.io.File(inputfilepath)); 
which does the same thing under the covers. 
There are similar signatures to load from an input stream.   
You can then get the main document part (word/document.xml): 
MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); 
After that, you can manipulate its contents.  
A similar approach works for pptx files: 
PresentationMLPackage presentationMLPackage =  
(PresentationMLPackage)OpcPackage.load(new java.io.File(inputfilepath)); 
And similarly for xlsx files. 
OpenXML concepts 
To do anything much beyond this, you need to have an understanding of basic WordML concepts (or 
PresentationML or SpreadsheetML). 
According to the Microsoft Open Packaging spec, each docx document is made up of a number of ͞Part͟ 
files, zipped up.   
An easy way to get an understanding of this is to unzip a docx/pptx/xlsx using your favourite zip utility.  
Even easier is to visit http://webapp.docx4java.org  and explore your file using ͞PartsList͟.  You can also 
generate code that way. 
A Part is usually XML, but might not be (an image part, for example, isn't). 
10 
The parts form a tree. If a part has child parts, it must have a relationships part which identifies these. 
The part which contains the main text of the document is the Main Document Part.  Each Part has a 
name.  The name of the Main Document Part is usually "/word/document.xml". 
If the document has a header, then the main document part woud have a header child part, and this 
would be described in the main document part's relationships (part). 
Similarly for any images.  To see the structure of any given document, upload it to the PartsList webapp, 
or run the "Parts List" sample (see further below). 
An introduction to WordML is beyond the scope of this document.  You can find a very readable 
introduction in 1
st
edition Part 3 (Primer) at http://www.ecma-
international.org/publications/standards/Ecma-376.htm or http://www.ecma-
international.org/news/TC45_current_work/TC45_available_docs.htm (a better link for the 1st edition 
(Dec 2006), since its not zipped up).  
See also the free "Open XML Explained" ebook by Wouter Van Vugt.   
pecification versions  
From Wikipedia: 
The Office Open XML file formats were standardised between December 2006 and November 
2008,  
first by the Ecma International consortium (where they became ECMA-376),  
and subsequently .. by the ISO /IEC 's Joint Technical Committee 1 (where they 
became ISO/IEC 29500:2008). 
The Ecma-376.htm link also contains the 2nd edition documents (of Dec 2008), which are "technically 
aligned with ISO/IEC 29500". 
Office 2007 SP2 implements ECMA-376 1st Edition
3
; this is what docx4j started with 
ISO/IEC 29500 (ECMA-376 2nd Edition) has Strict and Transitional conformance classes.  Office 2010 
supports
4
transitional, and also has read only support for strict. 
docx4j started with ECMA-376 1st Edition.  Where appropriate later versions of the schemas are used.  
docx4j 3.0 uses MathML 2ed, PresentationML 2ed, and SpreadsheemML 4ed transitional. 
3
http://blogs.msdn.com/b/dmahugh/archive/2009/01/16/ecma-376-implementation-notes-for-office-2007-sp2.aspx
4
http://blogs.msdn.com/b/dmahugh/archive/2010/04/06/office-s-support-for-iso-iec-29500-strict.aspx
Documents you may be interested
Documents you may be interested