HTML текстовое содержимое в Word с использованием OpenXml - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть текстовое поле, содержащее текст в формате html, а также мы можем вставить скопированные изображения.Я пытался с AlternativeFormatImportPart и методом AltChunk.Он генерирует документ, но получает следующую ошибку.Пожалуйста, дайте мне знать, что мне здесь не хватает.

enter image description here enter image description here

  
MemoryStream ms;// = new MemoryStream(new UTF8Encoding(true).GetPreamble().Concat(Encoding.UTF8.GetBytes(h)).ToArray());
                ms = new MemoryStream(HtmlToWord(fileContent));
                //MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(h));
                // Create alternative format import part.
                AlternativeFormatImportPart chunk =
                   mainDocPart.AddAlternativeFormatImportPart(
                      "application/xhtml+xml", altChunkId);
                chunk.FeedData(ms);
                AltChunk altChunk = new AltChunk();
                altChunk.Id = altChunkId;

public static byte[] HtmlToWord(String html)
        {
            const string filename = "test.docx";
            if (File.Exists(filename)) File.Delete(filename);
            var doc = new Document();

            using (MemoryStream generatedDocument = new MemoryStream())
            {
                using (WordprocessingDocument package = WordprocessingDocument.Create(
                generatedDocument, WordprocessingDocumentType.Document))
                {
                    MainDocumentPart mainPart = package.MainDocumentPart;

                    if (mainPart == null)
                    {
                        mainPart = package.AddMainDocumentPart();
                        new Document(new Body()).Save(mainPart);
                    }


                    HtmlConverter converter = new HtmlConverter(mainPart);
                    converter.ExcludeLinkAnchor = true;
                    converter.RefreshStyles();
                    converter.ImageProcessing = ImageProcessing.AutomaticDownload;
                    //converter.BaseImageUrl = new Uri(domainNameURL + "Images/");
                    converter.ConsiderDivAsParagraph = false;

                    Body body = mainPart.Document.Body;
                    var paragraphs = converter.Parse(html);
                    for (int i = 0; i < paragraphs.Count; i++)
                    {
                        body.Append(paragraphs[i]);
                    }
                    mainPart.Document.Save();
                }
                return generatedDocument.ToArray();
            }
        }

1 Ответ

0 голосов
/ 31 декабря 2018

Есть некоторые проблемы в AlternativeFormatImportPart с MemoryStream, документ плохо отформатирован.Поэтому последовал альтернативный подход, используя метод HtmlToWord, чтобы сохранить содержимое html в word и прочитать содержимое файла с помощью FileStream и передать AlternativeFormatImportPart.

string docFileName;
HtmlToWord(fileContent, out docFileName);
FileStream fileStream = File.Open(docFileName, FileMode.Open);                
// Create alternative format import part.
AlternativeFormatImportPart chunk =mainDocPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.WordprocessingML, altChunkId);
chunk.FeedData(fileStream);
AltChunk altChunk = new AltChunk();
altChunk.Id = altChunkId;
...