Вставьте HTML в документ Word OpenXML (.Net) - PullRequest
7 голосов
/ 09 октября 2008

Используя OpenXML SDK, я хочу вставить базовые фрагменты HTML в документ Word.

Как бы вы это сделали:

  • Манипулирование XML напрямую?
  • Использование XSLT?
  • используя AltChunk?

Более того, примеры C # или VB приветствуются:)

Ответы [ 3 ]

6 голосов
/ 10 марта 2011

Вот еще одна (относительно новая) альтернатива

http://notesforhtml2openxml.codeplex.com/

4 голосов
/ 25 ноября 2008

Ну, трудно дать общий совет, потому что это зависит от вашего мнения, что лучше.

Вот простой пример вставки абзаца в документ DOCX для каждого абзаца в (X) HTML-документе с использованием OpenXML SDK v2.0 и XPathDocument:

    void ConvertHTML(string htmlFileName, string docFileName)
    {
        // Create a Wordprocessing document. 
        using (WordprocessingDocument package = WordprocessingDocument.Create(docFileName, WordprocessingDocumentType.Document))
        {
            // Add a new main document part. 
            package.AddMainDocumentPart();

            // Create the Document DOM. 
            package.MainDocumentPart.Document = new Document(new Body());
            Body body = package.MainDocumentPart.Document.Body;

            XPathDocument htmlDoc = new XPathDocument(htmlFileName);

            XPathNavigator navigator = htmlDoc.CreateNavigator();
            XmlNamespaceManager mngr = new XmlNamespaceManager(navigator.NameTable);
            mngr.AddNamespace("xhtml", "http://www.w3.org/1999/xhtml");

            XPathNodeIterator ni = navigator.Select("//xhtml:p", mngr);
            while (ni.MoveNext())
            {
                body.AppendChild<Paragraph>(new Paragraph(new Run(new Text(ni.Current.Value))));
            }

            // Save changes to the main document part. 
            package.MainDocumentPart.Document.Save();
        }
    }

В примере требуется, чтобы ваш ввод был действительным XML, в противном случае вы получите исключение при создании XPathDocument.

Обратите внимание, что это очень простой пример, не учитывающий форматирование, заголовки, списки и т. Д.

2 голосов
/ 13 октября 2008

Я не уверен, чего вы на самом деле хотели бы достичь. Документы OpenXML имеют собственную html-подобную (WordprocessingML) нотацию для элементов форматирования (таких как абзац, полужирный текст и т. Д.). Если вы хотите добавить какой-либо текст в документ с базовым форматированием, я бы предпочел использовать синтаксис OpenXML и форматировать вставленный текст таким образом.

Если у вас есть HTML-фрагмент, который вы должны включить в документ как есть, вы можете использовать функцию «внешнего контента» в OpenXML. С внешним контентом вы можете включить HTML-документ в пакет и создать ссылку (altChunk) в документе в той позиции, где вы хотите включить это. Недостаток этого решения в том, что не все инструменты будут поддерживать (или поддерживать должным образом) сгенерированный документ, поэтому я не рекомендую это решение, если вы действительно не можете изменить исходный код HTML.

Как включить любой контент (wordml) в документ openxml word doc - это независимый вопрос, ИМХО, и ответ во многом зависит от того, какие сложные модификации вы хотите применить, и насколько велик документ. Для простого документа я бы просто считал часть документа из пакета, получил его поток и загрузил в XmlDocument. Вы можете легко вставить дополнительный контент в XmlDocument, а затем сохранить его обратно в пакет. Если документ большой или вам нужны сложные модификации в нескольких местах, XSLT - хороший вариант.

...