Re: Creating Table of Contents

Rob Sargent <[email protected]> Wed, 22 Jun 2022 09:28:13 -0600
Newsgroups gmane.comp.jakarta.poi.user
Message-ID <[email protected]>
On 6/22/22 07:41, PJ Fanning wrote:
>   I have never come across anyone using POI and docx4j together.
> Maybe you would be better off using stackoverflow.com and providing a reproducible use case. A larger number of developers can be reached there.
>
>
>      On Tuesday 21 June 2022, 08:56:51 IST, Anton Oellerer<[email protected]>  wrote:
>   
>   Hello,
> The project I am currently working on needs to hand over a .docx document with a finished table of contents to an API for pdf conversion.
> As far as I figured out, it is currently not possible to generate a finished TOC with Apache POI alone, so we decided to try using docx4j + Apache FOP to update the TOC after generating the document with Apache POI.
> In the first testing runs, we noticed that there are multiple errors in docx4j Apache FOP stemming from missing values, which prevent generating a valid document.
> Those include:
>
>    *  Cannot invoke "org.docx4j.wml.Style$Name.getVal()" because the return value of "org.docx4j.wml.Style.getName()" is null
>    *  org.docx4j.XmlUtils: java.lang.NullPointerException: Cannot invoke "org.w3c.dom.DocumentFragment.getFirstChild()" because "df" is null
>    *  java.lang.StringIndexOutOfBoundsException: begin 0, end -1, length 2 at org.docx4j.model.properties.run.Lang.setXslFO(Lang.java:71)
>    *  javax.xml.transform.TransformerException: org.apache.fop.fo.ValidationException: "fo:table-cell" is missing child elements. Required content model: marker* (%block;)+ (See position 9:3836)
>
> Do you know whether these results stem from a misconfiguration on our side, or is Apache POI -> docx4j simply not a supported use case?
> Best regards
> Anton Oellerer
>
>    
It's been quite some time since I last used FOP, but these errors, 
especially the fo:table-cell, look to me like the document has empty or 
extraneous "containers".  Maybe injecting a "saxon lint" step between 
POI output and docx4j would be worthwhile.