2008-10-09 48 views
7

Al usar SDK de OpenXML, quiero insertar fragmentos de HTML básicos en un documento de Word.Insertar HTML en documento de Word OpenXML (.Net)

¿cómo hacer esto:

  • La manipulación de XML directamente?
  • ¿Usando un XSLT?
  • usando AltChunk?

Por otra parte, C# o VB ejemplos son más que bienvenidos :)

Respuesta

2

No estoy seguro, lo que realmente le gustaría lograr. Los documentos OpenXML tienen una notación propia html-like (WordprocessingML) para los elementos de formato (como párrafo, texto en negrita, etc.). Si desea agregar texto a un documento, con formato básico, entonces sugiero usar la sintaxis de OpenXML y formatear el texto insertado con eso.

Si tiene un fragmento de html, que debe incluir en el documento tal como está, puede usar la función de "contenido externo" de OpenXML. Con contenido externo, puede incluir el documento HTML en el paquete y crear una referencia (altChunk) en el documento en la posición en la que desea incluirlo. La desventaja de esta solución es que no todas las herramientas admitirán (o admitirán adecuadamente) el documento generado, por lo tanto, no recomiendo esta solución, a menos que realmente no pueda cambiar la fuente HTML.

Cómo incluir cualquier contenido (el wordml) en un documento de texto openxml es una pregunta independiente en mi humilde opinión, y la respuesta depende en gran medida de cómo las modificaciones complejas que desea aplicar y qué tan grande es el documento. Para un documento simple, simplemente leería la parte del documento del paquete, obtendría su flujo y lo cargaría en un XmlDocument. Puede insertar contenido adicional en XmlDocument con bastante facilidad y luego guardarlo nuevamente en el paquete. Si el documento es grande o si necesita modificaciones complejas en varios lugares, XSLT es una buena opción.

+2

Tienes razón, pero estoy buscando para el retorno de la experiencia. Hasta ahora, he implementado altChunk pero solo funciona si tienes Word2007, no el paquete de compatibilidad. – Nico

4

Bueno, es difícil dar consejos generales, porque depende en gran medida de su aporte lo que es mejor.

Aquí hay un ejemplo simple de insertar un párrafo en un documento DOCX para cada párrafo en un documento (X) HTML usando v2.0 OpenXML SDK y un 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(); 
     } 
    } 

El ejemplo requiere que su entrada sea válida XML, de lo contrario obtendrá una excepción al crear el XPathDocument.

Tenga en cuenta que este es un ejemplo muy básico que no tiene en cuenta ningún formato, encabezado, lista, etc.

Cuestiones relacionadas