在docx文件中插入HTML

时间:2017-09-06 14:38:34

标签: openxml openxml-sdk

我已经创建了一个用customxmlparts填充wordfiles的应用程序,我正在尝试将文本放入文本字​​段,但它中有HTML,我希望它显示它的样式。我尝试将其转换为富文本格式,但只是粘贴在word文件中。以下是代码示例:

var taskId = Guid.NewGuid();
var tempFilePath = $"{Path.GetTempPath()}/{taskId}";

using (var templateStream = new FileStream($"{tempFilePath}.docx", FileMode.CreateNew))
{
    templateStream.Write(template, 0, template.Length);
    // 1. Fill template.
    using (WordprocessingDocument doc = WordprocessingDocument.Open(templateStream, true))
    {
        MainDocumentPart mainDocument = doc.MainDocumentPart;

        if (mainDocument.CustomXmlParts != null)
        {
            mainDocument.DeleteParts<CustomXmlPart>(mainDocument.CustomXmlParts);
        }
        CustomXmlPart cxp = mainDocument.AddCustomXmlPart(CustomXmlPartType.CustomXml);
        foreach (var line in data.Lines)
        {
            if (line.MoreInfo != null && line.MoreInfo != " ") {

            }
        }
        var xmlData = ObjectToXml(data);

        using (var stream = GenerateStreamFromString(tempFilePath, xmlData))
        {
            cxp.FeedData(stream);
        }

        mainDocument.Document.Save();
    }               
}

1 个答案:

答案 0 :(得分:1)

您不能将HTML格式的文本写入DOCX字段,您需要将其转换为WordprocessingML格式。
但是,您可以尝试另一种方法,即插入“AltChunk”元素。该元素表示有点像占位符,它可以引用HTML文件,然后当在MS Word中打开DOCX文件时,它将为您进行HTML转换为WordprocessingML。有关详细信息,请参阅:How to Use altChunk for Document Assembly

或者您可以使用某些第三方,例如GemBox.Document,它可以为您制作HTML到WordprocessingML转换。
例如,请检查此Set Content example

// Set content using HTML tags
document.Sections[0].Blocks[4].Content.LoadText(
    "Paragraph 5 <b>(part of this paragraph is bold)</b>", LoadOptions.HtmlDefault);