2016-02-01 44 views
1

我創造新的Word文檔用下面的代碼:Docx4j出口的風格,並用它在另一個.DOCX

Tidy tidy = new Tidy(); 
      tidy.setShowWarnings(true); 
      tidy.setInputEncoding("UTF-8"); 
      tidy.setOutputEncoding("UTF-8"); 
      tidy.setXHTML(true); 
      tidy.setMakeClean(true); 
      tidy.setQuoteNbsp(false); 

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 
      XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage); 

for (Value v : res.getRules()) { 
       System.out.println(v.toString()); 
       ByteArrayOutputStream ou = new ByteArrayOutputStream(); 
       tidy.parse(new ByteArrayInputStream(v.toString().getBytes(StandardCharsets.UTF_8)), ou); 
       wordMLPackage.getMainDocumentPart().getContent().clear(); 
       wordMLPackage.getMainDocumentPart().getContent().addAll(XHTMLImporter.convert(new String(ou.toByteArray()), null)); 
      } 
      wordMLPackage.save(new java.io.File(System.getProperty("user.dir") + "/report.docx")); 

我想要做的,就是用風格從其他.DOCX和將其附加到我保存的輸出的特定部分。有任何想法嗎 ?我花了很多時間尋找解決方案,但我沒有找到有用的東西。

+0

你想使用其他的一些樣式CX風格什麼?你的一些XHTML?如果有的話,請將XHTML代碼片段添加到您的問題中。 – JasonPlutext

+0

我想風格也.docx。在第一個.docx中,我定義了樣式。我必須使用第一個.docx中的樣式生成另一個.docx,而不是第二個.docx中的特定部分。 – user3061714

回答

3

第一份文件。我們想從中導入樣式。

WordprocessingMLPackage wordMLPackage2 = WordprocessingMLPackage 
.load(new java.io.File(System.getProperty("user.dir") + "/template.docx")); 

第二份文件

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 

我們進口從第一文檔樣式,並將其追加到第二個文檔

MainDocumentPart tempDocPart = wordMLPackage2.getMainDocumentPart(); 
StyleDefinitionsPart sdp = tempDocPart.getStyleDefinitionsPart(); 
Styles tempStyle = sdp.getJaxbElement(); 
wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart().setJaxbElement(tempStyle); 

而且我們可以使用它的ID使用特定的風格

wordMLPackage.getMainDocumentPart().addStyledParagraphOfText("Heading1", "Example"); 
0

通常,您需要將您的XHTML直接導入到目標docx中(而不是像您在問題中那樣創建新的docx)。這樣,導入的內容可以使用目標樣式(如果這是你想要的)。

如果您希望將樣式從一個docx複製到另一個docx,那麼可能是微不足道或更復雜(但與XHTML導入無關)。

要下手,你就需要在每個DOCX到樣式的引用:

Styles styles = wordMLPackage.getMainDocumentPart().getStyleDefinitionsPart().getJaxbElement(); 

樣式通常是「支持算法FMP」另一種風格。如果您要導入的樣式基於目標docx中具有相同定義的樣式,則可以複製源樣式。

如果basedOn樣式不存在於目標docx中或定義不同,則需要通過複製/重命名來處理該情況。等等。

此外,樣式可以使用編號定義,所以您可能還需要導入這些(從NumberingDefinitionsPart)。

相關問題