itextsharp pdf to xml c# : Convert word pdf bookmarks control SDK utility azure wpf .net visual studio Docx4j_GettingStarted1-part1692

11 
Docx4j can open documents which contain Word 2010, 2013 specific content.  The key extensions are 
supported.  For other stuff, for example,  <w14:glow w14:rad="101600">  it will look for and try to use 
mc:AlternateContent contained in the document.  If you use docx4j to save the document, the w14:glow 
won͛t be there any more (ie the docx will effectively be a Word 2007 docx). 
Architecture 
Docx4j has 3 layers: 
1.
org.docx4j.openpackaging 
OpenPackaging handles things at the Open Packaging Conventions level.  
It includes objects corresponding to each Office file type: 
docx 
org.docx4j.openpackaging.packages.WordprocessingMLPackage 
pptx 
org.docx4j.openpackaging.packages.PresentationMLPackage 
xlsx 
org.docx4j.openpackaging.packages.SpreadsheetMLPackage 
and is responsible for unzipping the file into a set of objects inheriting from Part;   
openpackaging also includes functionalitiy allowing parts to be added/deleted; saving the 
docx/pptx/xlsx etc 
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.   To explore these 
first two layers for a given document, upload it to the PartsList webapp. 
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.   
A JaxbXmlPart has a content tree: 
public Object getJaxbElement() { 
return jaxbElement; 
Convert word pdf bookmarks - 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
display bookmarks in pdf; convert word pdf bookmarks
Convert word pdf bookmarks - 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
bookmarks pdf documents; create bookmarks pdf files
12 
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.     
axb: 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 by using the get|setContents 
method. 
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).  Actually, docx4j 3.0 is lazy;  it only does 
this when first needed. 
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.  Here is representative (non-exhaustive) content: 
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 
VB.NET PDF File Compress Library: Compress reduce PDF size in vb.
Bookmarks. Comments, forms and multimedia. Convert smooth lines to curves. VB.NET Demo Code to Optimize An Exist PDF File in Visual C#.NET Project.
creating bookmarks pdf files; pdf export bookmarks
C# PDF File Split Library: Split, seperate PDF into multiple files
Split PDF file by top level bookmarks. The following C# codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
how to bookmark a page in pdf document; copy bookmarks from one pdf to another
13 
jcCustomXmlProperties 
org.docx4j.customXmlProperties 
jcContentTypes 
org.docx4j.openpackaging.contenttype 
jcPML 
org.docx4j.pml 
org.docx4j.dml 
org.docx4j.dml.picture 
You͛ll find XmlUtils.marshalToString very useful as you put your code together.  With this, you can easily 
output the content of a JAXB object, to see what XML it represents. 
arts ist 
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. 
So it͛s a bit like unzipping the docx/pptx/xlsx file, but it tells you what Java objects are being used for 
each part. 
A more fully featured tool is the PartsList online webapp.  With this, you can browse through the 
package, look up what elements mean in the spec, and generate code. 
You can run PartsList locally from a command line: 
java -cp docx4j.jar:log4j-1.2.15.jar org.docx4j.samples.PartsList [input.docx]
though I always find it easier to run it from my IDE.   Example output:  
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]  
docx4j includes convenience methods to make it easy to access commonly used parts. These include, 
VB.NET PDF File Split Library: Split, seperate PDF into multiple
Demo Code in VB.NET. The following VB.NET codes explain how to split a PDF file into multiple ones by PDF bookmarks or outlines.
how to bookmark a pdf page; bookmark pdf reader
C# PDF File Compress Library: Compress reduce PDF size in C#.net
Bookmarks. Comments, forms and multimedia. Hidden layer content. Convert smooth lines to curves. Flatten visible layers. C#.NET DLLs: Compress PDF Document.
add bookmark pdf; copy pdf bookmarks to another pdf
14 
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.  
RelationshipsPart 
contains various useful utility 
methods, for example: 
/** Gets a loaded Part by its id */ 
public Part getPart(String id)  
public Part getPart(Relationship r ) { 
The  
RelationshipsPart 
is the key player when it comes to adding/removing images and other parts 
from your document. 
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, but you generally shouldn͛t 
add/remove things here directly!
C# PDF Convert to HTML SDK: Convert PDF to html files in C#.net
it extremely easy for C# developers to convert and transform document file, converted by C#.NET PDF to HTML all the original anchors, links, bookmarks and font
create bookmark in pdf automatically; export pdf bookmarks to text file
XDoc.Word for .NET, Advanced .NET Word Processing Features
Create Word from PDF; Create Word from OpenOffice (.odt); More about Word SDK Word Export. Convert Word to PDF; Convert Word to HTML5; Convert Word to Tiff; Convert
how to bookmark a pdf document; bookmark page in pdf
15 
To add a part, see the section Adding a Part below. 
ain ocument art 
The text of the document is to be found in the main document part. 
Its XML will look something like: 
<w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" > 
<w:body> 
<w:p > 
<w:pPr> 
<w:pStyle w:val="Heading1"/> 
</w:pPr> 
<w:r> 
<w:t>Hello World</w:t> 
</w:r> 
</w:p
: 
<w:sectPr > 
<w:pgSz w:w="12240" w:h="15840"/> 
<w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440" w:header="708" 
w:footer="708" w:gutter="0"/> 
</w:sectPr> 
</w:body> 
</w:document
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 you can skip some of that with: 
/** 
* Convenience method to getJaxbElement().getBody().getContent() 
*/ 
public List<Object> getContent()  
A paragraph is org.docx4j.wml.P; a paragraph is basically made up of runs of text. 
C# Word - Convert Word to HTML in C#.NET
VB.NET How-to, VB.NET PDF, VB.NET Word, VB toolkit SDK, preserves all the original anchors, links, bookmarks and font C#: Convert Word document to HTML5 files.
creating bookmarks in a pdf document; create bookmarks in pdf
.NET PDF SDK - Description of All PDF Processing Control Feastures
Full page navigation, zooming & rotation; Outlines, bookmarks, & thumbnail display; PDF Export. Convert PDF to Word (.docx); Convert PDF to HTML; Convert PDF to
excel print to pdf with bookmarks; export bookmarks from pdf to excel
16 
@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: 
Body 
w:body 
document body 
w:p 
paragraph 
w:r 
run 
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() 
As well as  
Hdr, Ftr 
Content is generally stored in a plain old Java List.  So there are familiar methods for inserting 
content at the end of the list, or other location in it. 
Read on for how to add text etc. 
amples 
The package org.docx4j.samples contains examples of how to do things with docx4j.   
The docx4j samples include: 
Basics 
CreateWordprocessingMLDocument 
DisplayMainDocumentPartXml 
OpenAndSaveRoundTripTest 
PartsList 
Navigating the document body 
OpenMainDocumentAndTraverse 
17 
XPathQuery 
Output/Transformation 
ConvertOutHtml 
ConvertOutPDF 
Import (X)HTML 
AltChunkXHTMLRoundTrip 
AltChunkAddOfTypeHtml 
ConvertInXHTMLDocument 
ConvertInXHTMLFragment 
Image handling  
ImageAdd 
ImageConvertEmbeddedToLinked 
Part Handling 
PartCopy 
PartLoadFromFileSystem 
PartsList 
PartsStrip 
Document generation/document assembly using 
content controls 
ContentControlsAddCustomXmlDataStorage
Part 
ContentControlsXmlEdit 
ContentControlsApplyBindings 
ContentControlBindingExtensions 
ContentControlsPartsInfo 
AltChunkAddOfTypeDocx 
VariableReplace (not recommended) 
Specific docx features 
BookmarkAdd 
CommentsSample 
HeaderFooterCreate 
HeaderFooterList 
HyperlinkTest 
NumberingRestart 
SubDocument 
TableOfContentsAdd 
TemplateAttach (attach your.dotx) 
Miscellaneous 
CompareDocuments 
DocProps 
Filter (remove proof errors, w:rsid) 
MergeDocx 
UnmarshallFromTemplate 
Flat OPC XML  
ConvertOutFlatOpenPackage 
ConvertInFlatOpenPackage 
18 
If you installed the source code, you'll have this package already. 
If you didn't, you can browse it online, at  
https://github.com/plutext/docx4j/tree/master/src/samples (note new location for docx4j 
3.0)
There are also various sample documents in the /sample-docs directory; these are most easily 
accessed by checking out docx4j from GitHub. 
reating 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(); 
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 
19 
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. 
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. 
It is based on: 
public org.docx4j.wml.P createParagraphOfText(String simpleText) { 
org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory(); 
org.docx4j.wml.P  para = factory.createP(); 
if (simpleText!=null) { 
org.docx4j.wml.Text  t = factory.createText(); 
t.setValue(simpleText); 
org.docx4j.wml.R  run = factory.createR(); 
run.getContent().add(t); // ContentAccessor  
20 
para.getContent().add(run); // ContentAccessor 
return para; 
Notice that the paragraph, the run, and indeed the Body, all implement the 
ContentAccessor
interface: 
/** 
@since 2.7 
*/ 
public interface ContentAccessor { 
public List<Object> getContent(); 
The add method adds the content at the end of the document.  If you want to insert it somewhere 
else, you could use something like: 
public org.docx4j.wml.P addParaAtIndex(MainDocumentPart mdp, 
String simpleText, int index) { 
org.docx4j.wml.ObjectFactory factory = Context.getWmlObjectFactory(); 
org.docx4j.wml.P para = factory.createP(); 
if (simpleText != null) { 
org.docx4j.wml.Text t = factory.createText(); 
t.setValue(simpleText); 
org.docx4j.wml.R run = factory.createR(); 
run.getContent().add(t); 
para.getContent().add(run); 
mdp.getContent().add(index, para); 
return para; 
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. 
eneral strategy/approach for creating stuff 
The first thing you need to know is what the XML you are trying to create looks like. 
Documents you may be interested
Documents you may be interested