Search code examples
javadocx4j

Why there is style mismatch on Using Xhtmlimporter and AlternativeFormatInputPart on generating document using docx4j


I am trying to generate the document from HTML to docx. By AlternativeFormatInputPart class document is generated properly with proper style.

But

When i use XhtmlImporter class for the Same html Document is getting generated differently. I want to use XhtmlImporter class

how do i resolve this issue?

Below is Html and java code used for generation document.

<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/1999/xhtml" lang="en">
   <head>
      <title>MonthlyReport</title><style>
                    table
                    {
                        border:double #000;
                        table-layout:fixed;
                        vertical-align:top;
                        border-collapse:collapse;
                        width:7.25in;
                    
                    }
                    .main-title
                    {
                        margin-top:5%;
                        font-size:48pt;
                        font-family:Century Gothic;
                        color:#2F5897;
                        text-align:center;
                        font-weight:300;
                    }
                    .year
                    {
                        padding-top:10%;
                        text-align:center;
                        font-size:18px;
                    
                    }
                    .other-detail
                    {
                        padding-top:10%;
                        padding-bottom:10%;
                        font-weight:bold;
                        text-align:center;
                        font-size:18px;
                    }
                    .cont
                    {
                        font-family:Palatino Linotype;
                        margin:0 auto;
                        margin-top:10px;
                    }
                    .cont-table
                    {
                        border:double #000;
                        table-layout:fixed;
                        vertical-align:top;
                        border-collapse:collapse;
                        width:7.25in;
                    }
                    .cont h1
                    {
                        font-family:Century Gothic;
                        color:#2F5897;
                        font-weight:400;
                        margin-left:.15in;
                    }
                    .cont h4
                    {
                        font-family:Century Gothic;
                        font-weight:400;
                        margin-left:.15in;
                    }
                    .cont .school-detail
                    {
                        margin-left:.1in;
                        margin-right:.1in;
                    }
                    .cont ol
                    {
                        margin-left:1in;
                        margin-right:1in;
                    }
                    .cont li
                    {
                        margin-bottom:.25in;
                    }
                    .cont-heading
                    {
                        margin-left:.5in;
                        font-weight:bold;
                        text-decoration:underline;
                        margin-top:.35in;
                    
                    }
                    span
                    {
                        display:block;
                        padding-bottom:10px;
                    }
                    .rheight
                    {
                        height:3.25in;
                    }
                    span.DefaultParagraphFont{
                        display:inline;
                    }
                    .DocDefaults{
                        display:block;
                        margin-bottom:4mm;
                        line-height:115%;
                        font-size:11.0pt;
                    }
                    .Normal{
                        display:block;
                    }</style></head>
   <body>
      <table cellpadding="0" cellspacing="0" align="center">
         <tr class="rheight">
            <td> &nbsp; </td>
         </tr>
         <tr>
            <td>
               <div class="main-title"> Monthly report </div>
            </td>
         </tr>
         <tr>
            <td>
               <div class="year">2016-2017</div>
            </td>
         </tr>
         <tr>
            <td>
               <div class="other-detail">MONTH: September<br></br> CITY: BANGALORE<br></br> FACILITATOR:
                  MANIKANDAN<br></br></div>
            </td>
         </tr>
         <tr class="rheight">
            <td> &nbsp; </td>
         </tr>
      </table>
      <table cellpadding="0" cellspacing="0" align="center" class="cont-table">
         <tr>
            <td>
               <div class="cont">
                  <h1>Monthly Report</h1>
                  <h4>2016-2017</h4><br></br><p class="school-detail">
                     <p class="cont-heading">102 INTERNATONAL PUBLIC SCHOOL(ICSE)</p>
                     <ol>
                        <li><strong>ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING
                              TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY
                              SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION
                              THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES
                              CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR
                              NOTICE REGARDING THE SCHOOL.</strong><br></br>z1
                        </li>
                        <li><strong>ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING
                              BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE
                              LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK).</strong><br></br>z2
                        </li>
                        <li><strong>AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL. AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL. AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL.
                              AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL.</strong><br></br>z3
                        </li>
                        <li><strong>WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME. WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME.
                              WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME. WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME.</strong><br></br>z4
                        </li>
                        <li><strong>DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS
                              OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC.</strong><br></br>z5
                        </li>
                     </ol>
                     <p class="cont-heading">Photos</p>
                     <p class="cont-heading">102 INTERNATONAL PUBLIC SCHOOL(ICSE)</p>
                     <p class="Normal DocDefaults " style="margin-bottom: 0in;"><span class="DefaultParagraphFont " style="font-weight: bold;font-size: 14.0pt;text-decoration: underline;">
                           <center><img height="355" width="620" src="C:\Oracle\Middleware\Weblogic12.1.3\user_projects\domains\springtutorial\servers\ManagedServer\tmp\_WL_user\FMS\ti01mv\public\Hydrangeas.jpg" alt="C:/Users/Public/Pictures/Sample Pictures/Hydrangeas.jpg"></img><p style="text-align:center">Image-1</p>
                           </center>I
                           </span></p>
                     <p class="cont-heading">102 INTERNATONAL PUBLIC SCHOOL(ICSE)</p>
                     <p class="Normal DocDefaults " style="margin-bottom: 0in;"><span class="DefaultParagraphFont " style="font-weight: bold;font-size: 14.0pt;text-decoration: underline;">
                           <center><img height="355" width="620" src="C:\Oracle\Middleware\Weblogic12.1.3\user_projects\domains\springtutorial\servers\ManagedServer\tmp\_WL_user\FMS\ti01mv\public\Hydrangeas.jpg" alt="C:/Users/Public/Pictures/Sample Pictures/Hydrangeas.jpg"></img><p style="text-align:center">Image-1</p>
                           </center>I
                           </span></p>
                     <p class="cont-heading">102 INTERNATONAL PUBLIC SCHOOL(ICSE)</p>
                     <p class="Normal DocDefaults " style="margin-bottom: 0in;"><span class="DefaultParagraphFont " style="font-weight: bold;font-size: 14.0pt;text-decoration: underline;">
                           <center><img height="355" width="620" src="C:\Oracle\Middleware\Weblogic12.1.3\user_projects\domains\springtutorial\servers\ManagedServer\tmp\_WL_user\FMS\ti01mv\public\Hydrangeas.jpg" alt="C:/Users/Public/Pictures/Sample Pictures/Hydrangeas.jpg"></img><p style="text-align:center">Image-2</p>
                           </center>I
                           </span></p>
                     <p class="cont-heading">ELITE EDUCATIONAL TRUST</p>
                     <ol>
                        <li><strong>ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING
                              TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY
                              SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION
                              THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES
                              CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR
                              NOTICE REGARDING THE SCHOOL.</strong><br></br>y1
                        </li>
                        <li><strong>ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING
                              BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE
                              LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK).</strong><br></br>y2
                        </li>
                        <li><strong>AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL. AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL. AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL.
                              AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL.</strong><br></br>y3
                        </li>
                        <li><strong>WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME. WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME.
                              WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME. WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME.</strong><br></br>y4
                        </li>
                        <li><strong>DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS
                              OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC.</strong><br></br>y5
                        </li>
                     </ol>
                     <p class="cont-heading">Photos</p>
                     <p class="cont-heading">ACHALA VIDHYA MANDIRA</p>
                     <ol>
                        <li><strong>ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING
                              TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY
                              SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION
                              THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES
                              CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR
                              NOTICE REGARDING THE SCHOOL.</strong><br></br>q1
                        </li>
                        <li><strong>ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING
                              BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE
                              LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK).</strong><br></br>q2
                        </li>
                        <li><strong>AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL. AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL. AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL.
                              AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL.</strong><br></br>q3
                        </li>
                        <li><strong>WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME. WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME.
                              WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME. WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME.</strong><br></br>q4
                        </li>
                        <li><strong>DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS
                              OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC.</strong><br></br>q5
                        </li>
                     </ol>
                     <p class="cont-heading">Photos</p>
                     <p class="cont-heading">ACHALA VIDHYA MANDIRA</p>
                     <p class="Normal DocDefaults " style="margin-bottom: 0in;"><span class="DefaultParagraphFont " style="font-weight: bold;font-size: 14.0pt;text-decoration: underline;">
                           <center><img height="355" width="620" src="C:\Oracle\Middleware\Weblogic12.1.3\user_projects\domains\springtutorial\servers\ManagedServer\tmp\_WL_user\FMS\ti01mv\public\Hydrangeas.jpg" alt="C:/Users/Public/Pictures/Sample Pictures/Hydrangeas.jpg"></img><p style="text-align:center">Image-1</p>
                           </center>I
                           </span></p>
                     <p class="cont-heading">ACHALA VIDHYA MANDIRA</p>
                     <p class="Normal DocDefaults " style="margin-bottom: 0in;"><span class="DefaultParagraphFont " style="font-weight: bold;font-size: 14.0pt;text-decoration: underline;">
                           <center><img height="355" width="620" src="C:\Oracle\Middleware\Weblogic12.1.3\user_projects\domains\springtutorial\servers\ManagedServer\tmp\_WL_user\FMS\ti01mv\public\Hydrangeas.jpg" alt="C:/Users/Public/Pictures/Sample Pictures/Hydrangeas.jpg"></img><p style="text-align:center">Image-2</p>
                           </center>I
                           </span></p>
                     <p class="cont-heading">CITIZENS HIGH SCHOOL</p>
                     <ol>
                        <li><strong>ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING
                              TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY
                              SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES CONDUCTED IN THIS SCHOOL. PLEASE MENTION
                              THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR NOTICE REGARDING THE SCHOOL. ACTIVITIES
                              CONDUCTED IN THIS SCHOOL. PLEASE MENTION THE TYPE OF SESSIONS CONDUCTED, ANY SPECIFIC POINT YOU WOULD LIKE TO BRING TO OUR
                              NOTICE REGARDING THE SCHOOL.</strong><br></br>w1
                        </li>
                        <li><strong>ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING
                              BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE
                              LINK). ANY SPECIFIC ACTIVITY WORTH MENTIONING BY THE STUDENTS(ATTACH IMAGES TO SEPARATE LINK).</strong><br></br>w2
                        </li>
                        <li><strong>AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL. AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL. AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL.
                              AT LEAST ONE TESTIMONIAL FROM ONE SCHOOL.</strong><br></br>w3
                        </li>
                        <li><strong>WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME. WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME.
                              WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME. WHAT WENT RIGHT; WHAT DID NOT GO RIGHT &amp; REASONS FOR THE SAME.</strong><br></br>w4
                        </li>
                        <li><strong>DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS
                              OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC. DETAILS OF INTERACTION WITH THE PRINCIPAL AND/OR THE POC.</strong><br></br>w5
                        </li>
                     </ol>
                     <p class="cont-heading">Photos</p>
                     <p class="cont-heading">CITIZENS HIGH SCHOOL</p>
                     <p class="Normal DocDefaults " style="margin-bottom: 0in;"><span class="DefaultParagraphFont " style="font-weight: bold;font-size: 14.0pt;text-decoration: underline;">
                           <center><img height="355" width="620" src="C:\Oracle\Middleware\Weblogic12.1.3\user_projects\domains\springtutorial\servers\ManagedServer\tmp\_WL_user\FMS\ti01mv\public\Hydrangeas.jpg" alt="C:/Users/Public/Pictures/Sample Pictures/Hydrangeas.jpg"></img><p style="text-align:center">Image-1</p>
                           </center>I
                           </span></p>
                     <p class="cont-heading">CITIZENS HIGH SCHOOL</p>
                     <p class="Normal DocDefaults " style="margin-bottom: 0in;"><span class="DefaultParagraphFont " style="font-weight: bold;font-size: 14.0pt;text-decoration: underline;">
                           <center><img height="355" width="620" src="C:\Oracle\Middleware\Weblogic12.1.3\user_projects\domains\springtutorial\servers\ManagedServer\tmp\_WL_user\FMS\ti01mv\public\Hydrangeas.jpg" alt="C:/Users/Public/Pictures/Sample Pictures/Hydrangeas.jpg"></img><p style="text-align:center">Image-2</p>
                           </center>I
                           </span></p>
                  </p>
               </div>
            </td>
         </tr>
      </table>
   </body>
</html>

AlternativeFormatInputPart method

private static void documentGenerator(String html, File file) throws Docx4JException, JAXBException {
//Word Processing Package
WordprocessingMLPackage wordMLPackage = getWordMLPackage();
NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();
AlternativeFormatInputPart inputPart = new AlternativeFormatInputPart(AltChunkType.Xhtml);
inputPart.setContentType(new ContentType("text/html"));
inputPart.setBinaryData(html.getBytes());
Relationship altChunkRel = wordMLPackage.getMainDocumentPart().addTargetPart(inputPart);
// .. the bit in document body
CTAltChunk ac = Context.getWmlObjectFactory().createCTAltChunk();
ac.setId(altChunkRel.getId());
wordMLPackage.getMainDocumentPart().addObject(ac);
// .. content type
wordMLPackage.getContentTypeManager().addDefaultContentType("html", "text/html");
//Saving the Document
wordMLPackage.save(file);
}

XHtmlImporter

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();

NumberingDefinitionsPart ndp = new NumberingDefinitionsPart();
wordMLPackage.getMainDocumentPart().addTargetPart(ndp);
ndp.unmarshalDefaultNumbering();

// Convert the XHTML, and add it into the empty docx we made
XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
XHTMLImporter.setRunFormatting(FormattingOption.CLASS_PLUS_OTHER);
XHTMLImporter.setHyperlinkStyle("Hyperlink");
wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert(unescaped, null));
wordMLPackage.save(new java.io.File("C:/OUT_from_XHTML.docx"));

Solution

  • As I explained at https://stackoverflow.com/a/41587822/1031689 when you save a docx containing an altChunk, you are relying on Word to convert the content.

    Word's conversion is different from docx4j's XHTMLImporterImpl; the latter does not aim to mimic the former.

    Specific issues with docx4j's XHTMLImporterImpl can be raised here, in the relevant docx4j forum, or at https://github.com/plutext/docx4j-ImportXHTML/issues as appropriate.

    You'll get best results if you stick to one issue per post.