2016-03-22 61 views
0

我将DocX转换为Html并返回到DocX。最终的Docx已成功生成。但是,转换偏斜了最终文档中表格的格式。在最终的docx中生成的表格已将其单元格宽度拉长,导致表格超出文档边界。DOCX4J:将HTML转换为Docx - 表格格式

  • docx中的原始表格的列宽为8.15厘米(表格宽度为16.30厘米)。
  • 转换为html表的宽度为:6.42in。
  • 转换回docx表格列宽为10.76厘米(表格 宽度,21.52厘米)。

有没有办法让我在转换后保持相同的格式? 任何意见,不胜感激。

下面是我的代码:

private void convertHtmlToDocx() throws IOException, JAXBException, Docx4JException{ 
     //convert back to docx 

     String inputfilepath = System.getProperty("user.dir") + "myPath"; 
     String baseURL = "file:///"+System.getProperty("user.dir")+"path"; 

     String stringFromFile = FileUtils.readFileToString(new File(inputfilepath), "UTF-8"); 

     String unescaped = stringFromFile; 
     if (stringFromFile.contains("</")) { 
      unescaped = StringEscapeUtils.unescapeHtml(stringFromFile);   
     }  

     System.out.println("Unescaped: " + unescaped); 

     // Setup font mapping 
     RFonts rfonts = Context.getWmlObjectFactory().createRFonts(); 
     rfonts.setAscii("Century Gothic"); 
     XHTMLImporterImpl.addFontMapping("Century Gothic", rfonts); 

     // Create an empty docx package 
     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.setTableFormatting(FormattingOption.IGNORE_CLASS); 
     XHTMLImporter.setParagraphFormatting(FormattingOption.IGNORE_CLASS); 
     XHTMLImporter.setHyperlinkStyle("Hyperlink"); 
     wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert(unescaped, baseURL)); 


     wordMLPackage.save(new java.io.File(System.getProperty("user.dir") + "myPath")); 

    } 

回答

0

是您通过使用XHTML往返基于Web的情况下编辑?

如果是这样,也许docx-html-editor帮助。它通过保存在往返过程中使用的状态/提示来工作。

除此之外,Word中的表格是固定的单元格宽度,或者不是。您描述的行为是否与固定宽度的表发生关联?

固定宽度应该没问题(或者很容易做到)。不固定更难...

+0

是的。这正是我的用例。是的,表格宽度是固定的。我翻看手册,并有几个问题。 如果我要使用这个库,我是否还需要将docx,html转换为docx? 我使用primefaces作为我的前端,它有CKEditor。我是使用primefaces提供的还是我必须安装它? – user2533611

+0

项目https://github.com/plutext/docx-html-editor进行转换。尝试单独运行,一旦你有这个工作,将其集成到你的项目。正如页面所述,它使用CKeditor v3.6.6.1,所以我猜如果primefaces提供的那个可能会工作,如果它接近。 – JasonPlutext