将HTML转换为Word Docx,样式完整

时间:2013-06-11 16:25:44

标签: c# openxml

我知道已有类似的问题,并建议使用Open XML和所有。

我正在使用Open XMl,但它只适用于内联样式。

是否有任何解决方案或任何其他更好的方法将html转换为除Open XML之外的docx。

谢谢!

1 个答案:

答案 0 :(得分:5)

您可以使用类似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.html追加到ConvertedDocument.docx。如果ConvertedDocument.docx最初为空,则此方法实际上是转换。

每当您使用AltChunk构建文档时,HTML都会嵌入到文档中,直到下次在Word中打开文档为止。此时,HTML将转换为WordProcessingML标记。如果不在MS Word中打开文档,这实际上只是一个问题。如果您要上传到Google文档,在OpenOffice中打开,或使用COM转换为PDF,OpenXML是不够的。在这种情况下,您可能需要使用像Aspose.Words这样的付费工具。