All Versions
Latest Version
Avg Release Cycle
51 days
Latest Release

Changelog History
Page 4

  • v3.3.4 Changes

    BinaryPartAbstractImage: ImageMagick executable name fetched from Docx4jProperties.getProperty("", "imconvert") ๐Ÿ and workaround for file URL issue on Windows

    Parent handling: convenience for user SdtPr set parent (same for SdtContent, now an interface);

    ๐Ÿ›  mc-preprocessor.xslt: more Google Docs fixes

    ๐Ÿšš samples/BookmarksDuplicateCheck: Check also the ends; option to remediate (ie remove broken ones)

    ๐Ÿ›  OpenDoPE fixes/enhancements:

    234 convert #STRING to NodeList

    235 complex XPaths

    count-type conditions in repeats: perform enhancement in non-oda case

    ๐Ÿ›  other bugfixes:

    175 HTML output: conversion to nested or

    164 Reset error counter, this time for IBM's JAXB (in Websphere inc


    ๐Ÿ›  fix to support Apple iCloud Numbers (set reference attribute on cell)

    loading .pptx and .xlsx files from InputStream

  • v3.3.3 Changes

    ๐Ÿ‘€ Minor modifications to support use on Android; see

    ๐Ÿ›  Several bugfixes, including:

    • ๐Ÿ– Handle non-English speaking locales in XmlPart.cachedXPathGetString (used in OpenDoPE content control data binding)
    • Regression in xpathtracker histgram namespace handling (issue #230)


    Convenience method for cell to access its WorksheetPart; WorksheetPart to get WorkbookPart.

    Cell content extraction - formatted (using modified Apache POI code)

  • v3.3.2 Changes

    JAXBXmlPart pipe methods, which enable you to process using StAX or SAX ๐Ÿ‘€ (avoiding JAXB overhead); see VariableReplaceStAX for an example

    ๐ŸŒ JAXB content model for web extensions

    ๐Ÿ›  Various bugfixes, including:

    • ๐Ÿ›  fix for OpenDoPE complex conditions (broken by 3.3.1)
    • ๐Ÿ›  fix for IllegalArgumentException: local part cannot be "null" when creating a QName
  • v3.3.1 Changes

    Contents lists are now of type ArrayListWml, in which parent is automatically set correctly

    ๐Ÿ“ฆ org.docx4j.anon: new package which converts a docx to lorem ipsum latin, and removes ๐Ÿ‘ other sensitive info, so the docx can safely be shared eg for tech support.
    For this to work, you'll need to add a new dependency:

    ๐ŸŽ OpenDoPE: Two separate performance optimizations which substantially speed up large XML binding jobs. By traversing the XML data, manually calculate and cache XPaths (tested with 500,000 entries). Our strategy is to try the cache first (if enabled), then if there is a cache miss, use org.apache.xpath.CachedXPathAPI (the second optimization - CachedXPathAPI is quicker than default javax.xml.xpath.XPath implementations)

    Dedicated parts for w15 CommentsExtended and People

    ๐Ÿ‘Œ Support anchor attributes wp14:anchorId and wp14:editId; children wp14:sizeRelH, wp14:sizeRelV

    ๐Ÿ‘Œ Support w:bdo and w:dir from ECMA 376 4ed

    โ†ช workaround for MOXy issue triggering pre-processing from binder:

    0๏ธโƒฃ JAXB event handler: make shouldContinue false by default, mc Content pre-processing works in MOXy (for unmarshalling anyway, as distinct from binder)

    unmarshall input stream: do mc pre-processing if necessary

    ๐Ÿ†• New property docx4j.jaxb.marshal.canonicalize: 0๏ธโƒฃ Whether to canonicalize during marshalling (defaults to false); this is for aesthetic purposes: the Sun/Oracle JAXB reference implementation writes a lot of unnecessary namespaces (each one in the JAXB context?).

    Dependency Changes

    โž• Added com.thedeanda:lorem:jar:2.0; only required if you want to use org.docx4j.anon (see above)

  • v3.3.0 Changes

    ๐Ÿš€ Release date

    21 April 2016

    ๐Ÿš€ Contributors to this release

    Jason Harrop

    Notable Changes - PDF

    ๐Ÿšš XSL FO based PDF output moved to new/separate project docx4j-export-fo; default PDF converter ๐Ÿ”„ changed from XSL FO + Apache FOP to Plutext's PDF Converter. The instance at 0๏ธโƒฃ is used by default, but you can (and should!) alter it to your own instance, by setting docx4j property, eg:


    ๐Ÿ‘€ See further

    โช If you want to use the existing XSL FO + Apache FOP PDF Conversion, just add docx4j-export-fo (+ deps) to your classpath. These jars are in the zip file, in dir optional/export-fo docx4j will detect that they are present, and revert to the FO based conversion.

    Notable Changes - Other

    Document protection (read only, track revisions etc) for docx/pptx/xlsx, with or without password. ๐Ÿ‘ NB: Digital signature support is in Enterprise Ed. See further and

    โšก๏ธ docx table of contents (TOC) generation and update migrated from Enterpise Ed. See org.docx4j.toc and the Toc* samples. The layout model in Plutext's PDF Converter (see above) will be used to calculate page numbers, unless docx4j-export-fo (+ deps) is on your path

    ๐Ÿš€ Workaround for JAXB behaviour change (for recent releases of JAXB, mcPreprocessor only worked the first 10 times); ๐Ÿ‘€ see/subscribe to

    ๐Ÿ‘€ Xalan <= 2.7.2 can't handle astral characters: see/vote for So: โ†ช (i) workaround this when serializing XML โ†ช (ii) optionally workaround this when we use Xalan for XSLT, controlled by docx4j.xalan.XALANJ-2419.workaround=true|false ๐Ÿš€ [Comment: When will Xalan make a release which fixes this issue? This code will be removed if they do.]

    โš™ RunFontSelector: basic support for Unicode astral characters

    ๐ŸŽ Performance improvement: property* allows us to avoid unmarshalling via DOM

    ๐Ÿ– Handle McIgnorableNamespaces within NamespacePrefixMapper classes

    XJC generated code for word/2010/wordprocessingDrawing

    ๐Ÿ“ฆ Repackage portions of org.apache.poi (mainly poifs) as ๐Ÿšš (and remove dependency on poi-scratchpad; remove Doc import since poi.hwpf dep is now absent)

    ๐Ÿ”’ Repackage santuario c14n ( as ๐Ÿšš [Comment: Useful for c14n, but not essential to docx4j, so may yet be removed. Opinions welcome]

    ๐Ÿ’… Avoid adding virtual styles to docx representing DocDefaults; this is now internal to StyleTree

    Dependency Changes (relative to 3.2.x)

    โœ‚ Removed: jaxb-xmldsig-core, poi-scratchpad, commons-lang

    โž• Added:


    ๐Ÿšš Moved FOP/batik jars to separate project docx4j-export-fo

    โฌ†๏ธ Bumped most deps to most recent available (except MOXy, where bumped to most recent compiled for Java 6)

  • v3.2.2 Changes

    guard against XML Enternal Entity Injection attacks for some additional cases (the main cases were addressed in v3.2.0)

    ๐ŸŒฒ tune down certain logging

    temp embedded font handling improvements (sgrachov, jharrop)

    PDF (FO via XSL): insert blank page to honour sectPr/w:type oddPage|evenPage set on the following section


    • ๐Ÿ‘Œ support w14 checkbox, w15:repeatingSection

    • 0๏ธโƒฃ property docx4j.model.datastorage.BindingHandler.Implementation (which defaults to BindingTraverserXSLT)

    • ๐ŸŽ ODH minor performance optimization

    (X)HTML output: use ul|ol list items, if feature PP_HTML_COLLECT_LISTS is set and SdtToListSdtTagHandler is registered.


    Variable replacement in xlsx4j


    Ensure VML namespace is declared on key parts

  • v3.2.1 Changes

    ๐Ÿ‘ MailMergerWithNext (baudinseb): supports NEXT, useful for mailing labels

    OpenDoPE: bookmark ID management

    pkg Load classes: getSourceRelationships().add(r) for additional source rel

    ๐Ÿ‘Œ Improvements to diffx (still not production ready though)


    ๐Ÿ”ฆ Expose Base.partName, so MergeDocx v1.6.6 can use this docx4j

  • v3.2.0 Changes

    ๐Ÿ”’ d150d9c7f6 Security fix Configure DocumentBuilderFactory to disallow doctype declaration etc. (reported by Sven Jacobi)

    FO/PDF output: miscellaneous improvements, including:

    header/footer height calculation Support for table row w:cantsplit property
    ParagraphStylesInTableFix enhancements support FOP config font substitutions formatting of list item label
    generally use per class logging, since this makes it easier to see where the message is generated Add GlyphCheck; improve support for Arial Unicode MS For Wingding etc symbols, use hAnsi font ; PDF events PDF (non XLST): support nested tables Workaround for missing space before fo:page-number-citation-last in FOP 1.1 output FO support for ptab align right Create a suitable ConversionSectionWrapper, when continuous sectPr encountered, by using header/footer details from the previous sectPr Where appropriate (ie different page size), insert a page break Support css line-height In HTML|FO\PDF output, ensure tblPr is not null - Try to behave gracefully if broken style is encountered (ie missing @w:type or @w:styleId) w:br in FO output: Handling of vertical space

    31m0c0e45d API change getContents now throws Docx4JException, instead of returning null in the case of error.

    ๐Ÿ†• New

    # PDF output; ability to specify font substitutions.  See src/samples/_resources
    # Avoid using both this and fontMapper.getFontMappings() for the same fonts!
    # Defaults to org/docx4j/fonts/microsoft/MicrosoftFonts.xml
    # which is contained in the docx4j jar
    # If you need to override it in order to provide different file names for
    # one or more fonts, start by extracting and editing a copy of the existing file
    # In XHTML import, span/@style='background-color:red;' would usually become w:rPr/w:shd/@w:fill="ff0000"
    # Set this to true to use w:highlight instead
    # Defaults to org/docx4j/jaxb/mc-preprocessor.xslt
    # The styles part content used by WordprocessingMLPackage createPackage
    # and by getStyleDefinitionsPart(true) where the styles part is null
    # Used to try to activate a style (PropertyResolver.activateStyle) which isn't defined in the styles part
    # Embedded Fonts - extract to dir
    # By default, docx4j will extract embedded fonts to dir 
    # ~/.docx4all/temporary embedded fonts
    # (creating it if necessary).\\temp
    # .. placeholder to use instead of "Click here to enter text" 
    # Defaults to OpenDoPE/placeholder.xml, and if nothing is there,
    # will fallback to org/docx4j/model/datastorage/placeholder.xml (which is in the docx4j jar)
    # What is new is that you can override that location (ie so you don't have to create an OpenDoPE folder)


    d1b60a96e7 pptx4j: dedicated parts for slide comments

    ๐Ÿ‘ b452e79852 Support for opening pptm/potx/potm files

    Other Changes (non-exhaustive)

    8e640dafb7 dedicated parts for VbaProjectSignature

    9d714432db partName is now private; has getter/setter

    e66884b830 Create rels part name dynamically

    31mff84cf0 DocumentModel: use SectPrFinder to find the sectPr (which means it will now find sectPr inside content controls)

    31m0700196 preset Shape definitions

    31mfbef8b9 Map font names case-insensitive, since Word treats w:rFonts attribute values case-insensitive.

    31mfa767f6 RPr and ParaRPr inherit from RPrAbstract

    ๐Ÿ›  31m7c9dd58 signature line attributes: add namespace; fixes

    ๐Ÿ‘ 31m543713f Support for part representing userShapes added to a chart

    ๐Ÿ›  31m265ee8b fixed code that generates textId (BobFleischman)

    ๐Ÿšš 31m9a8b75c BinaryPart: Tidy up code and remove soft reference ByteBuffer.

    Import XHTML

    31m85b7a4d  In XHTML import, span/@style='background-color:red;' would usually become w:rPr/w:shd/@w:fill="ff0000" Now you can configure it to use w:highlight instead
    31m810ed9b LineSpacing: handle the CSS default 'normal' sensibly when importing 

    ๐Ÿ’… 31mdbf7dee StyleUtil: changes to isEmpty and apply semantics for Style objects

    ๐Ÿ’… 31m3845825 StyleUtil changes: - change to isEmpty semantics for Integer, BigInteger so that a value of 0 is not treated as empty (since otherwise eg spaceAfter 0 isn't applied) - pPr includes sectPr, so add PARTIAL implementation of areEqual and apply for sectPr

    31mea22fb6 make jc final. it's used in a lot of places but only assigned once. (apixandru)

    ๐Ÿ“œ 31m8edaddf For Oracle Java 8, use and

    โ†ช 31mdf84571 Workaround for Microsoft SQLServer Reporting Service (SSRS) 2012, which generates invalid docx

    31mf0fbd9f User can override org/docx4j/jaxb/mc-preprocessor.xslt with an xslt on their classpath named custom-preprocessor.xslt

  • v3.1.0 Changes

    Events infrastructure, allowing a listener to subscribe to track progress of time consuming tasks (eg PDF output). ๐Ÿ‘€ See for example

    FO/PDF output: suitable room for header/footer

    Other Changes (non-exhaustive)

    ๐Ÿšš Part remove - new method VbaDataPart - namespace qualify attributes

    Fonts on Mac OSX - avoid NPE

    ๐Ÿ›  docx Binding fixes for case where OpenDoPE parts are not present

    ๐Ÿ“„ docx fix for non-conformant Google Docs docx

    docx PDF (and XSL FO) output

    • TOC dot leader tabs
    • soft return reduce vertical space
    • ๐Ÿ’… computed style improvements for p in table
    • Arabic numbering
    • Arabic/Hebrew output: w:pPr/w:bidi and w:rPr/w:rtl handling
    • ๐Ÿ‘Œ Support bidiVisual property, to layout columns in rtl order for eg Hebrew
    • Chinese improvements


    • 0๏ธโƒฃ slides: use UTF-8, irrespective of default encoding


    • โž• add bookViews/workbookView to workbook to ensure Excel 2010 doesn't crash when printing
  • v3.0.1 Changes

    OpenDoPE - Handle escaped Flat OPC ie bind rich text content (tag contains 'od:progid=Word.Document')

    Other Changes (non-exhaustive)

    ๐Ÿ‘ PDF/FO output - basic implementation of textbox handling (dependent on support in FO renderer)

    61ea5a2 - FieldsPreprocessor ignore empty w:instrText elements 5a21b10 - Fields: handle nested p, eg w:p//v:textbox//w:p e726d4d - MailMerger: handle quoted field name (containing spaces) 0057b7b - text box handling in MailMerge (David Becker)

    56227b3 - OpenDoPE. New CustomXmlDataStoragePartSelector to identify the XML part being replaced c672b1f - Renumber bookmarks in repeats 01203b6 - placeholder.xml - user can override with OpenDoPE/placeholder.xml 06a8f02 - od:Handler=Picture processes a rich text control containing an image ๐Ÿ’… 1525482 - OpenDoPE org.docx4j.model.datastorage.BindingTraverser.XHTML.Block.rStyle.Adopt option to automatcially apply linked paragraph style to bound escaped XHTML

    cf9a517 - VML shape interfaces 0๏ธโƒฃ 87ac08f - use default font size of 10pt (same as Word)

    5c297e1 - List numbering emulator - fix for lower lettering (batonez)

    ba59b54 - xlsx4j getWorksheet(int index) ab59e6c - xlsx4j ExternalLinkPart

    7ee0ab5 - pptx4j getSlide(int index) 86f5ebb - pptx4j SlidePart marshal mc:AlternateContent

    1491394 - mc:AlternateContent JAXB model

    ๐Ÿ‘ ba560ca - Support Google AppEngine (GAE)

    ๐Ÿ›  dd51255 - RunFontSelector bug fixes