2013-06-11 93 views
3

我知道這裏已經有類似的問題,並且建議使用Open XML和全部。將HTML轉換爲Word Docx,樣式不變

我使用的是Open XMl,但它僅適用於內聯樣式。

是否有任何解決方案,或者任何其他更好的方法來將html轉換爲除Open XML以外的docx。

謝謝!

回答

4

您可以使用類似於here所述的工具來內聯CSS文件。

然後,執行轉換(改編自Eric White's blog):

using (WordprocessingDocument myDoc = 
    WordprocessingDocument.Open("ConvertedDocument.docx", true)) 
{ 
    string altChunkId = "AltChunkId1"; 
    MainDocumentPart mainPart = myDoc.MainDocumentPart; 
    var chunk = mainPart.AddAlternativeFormatImportPart(
     AlternativeFormatImportPartType.Html, altChunkId); 

    using (FileStream fileStream = File.Open("YourHtmlDocument.html", FileMode.Open)) 
    { 
     chunk.FeedData(fileStream); 
    } 
    AltChunk altChunk = new AltChunk() {Id = altChunkId}; 

    mainPart.Document.Body.InsertAfter(
       altChunk, mainPart.Document.Body.Elements<Paragraph>().Last()); 
    mainPart.Document.Save(); 
} 

這是不完全轉換HTML到DOCX。它的追加YourHtmlDocument.htmlConvertedDocument.docx。如果ConvertedDocument.docx最初爲空,則此方法實際上是一種轉換。

無論何時使用AltChunk構建文檔,HTML都會嵌入到文檔中,直到下次在Word中打開文檔爲止。此時,HTML會被轉換爲WordProcessingML標記。如果文檔不能在MS Word中打開,這實際上只是一個問題。如果您正在上傳到Google文檔,在OpenOffice中打開或使用COM轉換爲PDF,OpenXML將不夠用。在這種情況下,您可能需要使用付費工具,如Aspose.Words

+0

這會在'Elements ().Last()'上崩潰,如果之前沒有插入段落,因爲找不到'Last()'。使用'mainPart.Document.Body.InsertAfterSelf(altChunk);'代替 –