добавить HTML-контент в существующий файл DOCX, используя OpenXML в C # - PullRequest
0 голосов
/ 20 сентября 2018

Как добавить / добавить содержимое HTML в существующий файл .docx, используя OpenXML в asp.net C #?

В существующем файле слов я хочу добавить часть содержимого html.Например:

В этом примере я хочу разместить «Это заголовок» внутри тега H1.

Вот мой код

protected void Button1_Click(object sender, EventArgs e)
    {

        try
        {
            using (WordprocessingDocument doc = WordprocessingDocument.Open(@"C:\Users\admin\Downloads\WordGenerator\WordGenerator\FTANJS.docx", true))
            {
                string altChunkId = "myId";
                MainDocumentPart mainDocPart = doc.MainDocumentPart;

                var run = new Run(new Text("test"));
                var p = new Paragraph(new ParagraphProperties(new Justification() { Val = JustificationValues.Center }), run);

                var body = mainDocPart.Document.Body;
                body.Append(p);


                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("<html><head></head><body><h1>HELLO</h1></body></html>"));

                // Uncomment the following line to create an invalid word document.
                // MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("<h1>HELLO</h1>"));

                // Create alternative format import part.
                AlternativeFormatImportPart formatImportPart =
                   mainDocPart.AddAlternativeFormatImportPart(
                      AlternativeFormatImportPartType.Html, altChunkId);
                //ms.Seek(0, SeekOrigin.Begin);

                // Feed HTML data into format import part (chunk).
                formatImportPart.FeedData(ms);
                AltChunk altChunk = new AltChunk();
                altChunk.Id = altChunkId;

                mainDocPart.Document.Body.Append(altChunk);
            }
        }
        catch (Exception ex)
        {

            ex.ToString ();
        }


    }

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Добавьте HTML-контент, так как Chunk должен работать, и вы почти у цели.

Если я правильно понимаю вопрос, этот код должен работать.

        //insert html content to H1 tag
        using(WordprocessingDocument fDocx = WordprocessingDocument.Open(sDocxFile,true))
        {
            string sChunkID = "myhtmlID";
            AlternativeFormatImportPart oChunk = fDocx.MainDocumentPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Html, sChunkID);
            using(FileStream fs = File.Open(sHtml,FileMode.OpenOrCreate))
            {
                oChunk.FeedData(fs);
            }
            AltChunk oAltChunk = new AltChunk();
            oAltChunk.Id =sChunkID ;

            //insert html to the tag of 'H1' and remove H1.
            Body body = fDocx.MainDocumentPart.Document.Body;
            Paragraph theParagraph = body.Descendants<Paragraph>().Where(p => p.InnerText == "H1").FirstOrDefault();
            theParagraph.InsertAfterSelf<AltChunk>(oAltChunk);
            theParagraph.Remove();

            fDocx.MainDocumentPart.Document.Save();
        }
0 голосов
/ 20 сентября 2018

Короткий ответ: «Вы не можете добавить HTML в файл docx».

Docx - это открытый формат , определенный здесь .Если вы используете версию Microsoft, у них есть ряд расширений.

В любом случае файл содержит XML, а не HTML, и вы не можете просто добавить HTML в файл DOCX.Существуют стили и объекты форматирования и указатели, которые все должны быть обновлены.

Если вам нужно изменить файл docx и вы не хотите проводить много исследований и много кодирования, вам нужно будет найти существующую библиотеку для работы.

...