May 12 2014
By now we’re used to products which emit docx files which are umm, not .. quite .. right.
But its more noteworthy when the product in question is from Microsoft. After all, its their file format (ECMA etc standardisation notwithstanding).
The product in question here is SQL Server Reporting Services 2012 and its Word export.
It seems they didn’t bother to validate their documents (eg using Open XML SDK 2.0 Productivity Tool):
Apparently there’s a reason for this:
“Word and SSRS treat page headers and footers differently. Word actually positions them inside the page margins, whereas SSRS positions them inside the area that the margins surround. As a result, in Word, the page margins do not control the distance between the top edge of the page and that of the page header (or similarly for the page footer). Instead, Word has separate “Header from Top” and “Footer from Bottom” properties to control those distances. Since RDL does not have equivalent properties, the Word renderer sets these properties to zero.”
JAXB doesn’t like invalid documents, so docx4j has to fix these sorts of things before it can construct a content model. (Maybe that’s why SSRS calls it Word export, not docx export:- they just check Word can open the document, then call it job done)
There are other problems with SSRS docx which the Productivity Tool doesn’t report.
Take a look at the styles part:
Notice anything wrong? It’d be better if the EmptyCellLayoutStyle had @w:styleId and @w:type, like so:
It’d also be nice if it defined the “Normal” style it is basedOn!
docx4j and other consumers could/should detect such problems and degrade gracefully in the face of them, but Microsoft (of all companies!) should exercise better quality control.