2016-05-11 8 views
0

ich diese Methode bin mit zur Erzeugung docx Datei:generieren docx-Datei von HTML-Datei mit OpenXML

public static void CreateDocument(string documentFileName, string text) 
{ 
    using (WordprocessingDocument wordDoc = 
     WordprocessingDocument.Create(documentFileName, WordprocessingDocumentType.Document)) 
    { 
     MainDocumentPart mainPart = wordDoc.AddMainDocumentPart(); 

     string docXml = 
        @"<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?> 
       <w:document xmlns:w=""http://schemas.openxmlformats.org/wordprocessingml/2006/main""> 
       <w:body><w:p><w:r><w:t>#REPLACE#</w:t></w:r></w:p></w:body> 
       </w:document>"; 

     docXml = docXml.Replace("#REPLACE#", text); 

     using (Stream stream = mainPart.GetStream()) 
     { 
      byte[] buf = (new UTF8Encoding()).GetBytes(docXml); 
      stream.Write(buf, 0, buf.Length); 
     } 
    } 
} 

Es wirkt wie ein Zauber:

CreateDocument("test.docx", "Hello"); 

Aber was, wenn ich will HTML setzen Inhalt statt Hello? zum Beispiel:

CreateDocument("test.docx", @"<html><head></head> 
           <body> 
            <h1>Hello</h1> 
           </body> 
         </html>"); 

Oder etwas Ähnliches:

CreateDocument("test.docx", @"Hello<BR> 
            This is a simple text<BR> 
            Third paragraph<BR> 
            Sign 
         "); 

beiden Fällen schafft eine ungültige Struktur für document.xml. Irgendeine Idee? Wie kann ich eine docx-Datei aus einem HTML-Inhalt generieren?

Antwort

1

Sie können den HTML-Inhalt nicht einfach in eine "document.xml" einfügen, dieser Teil erwartet nur einen WordprocessingML-Inhalt, so dass Sie diesen HTML-Code in WordprocessingML, see this, konvertieren müssen.

Eine andere Sache, die Sie verwenden könnten, ist AltChunk Element, mit dem Sie eine HTML-Datei in Ihre DOCX-Datei platzieren und dann auf diesen HTML-Inhalt an einer bestimmten Stelle in Ihrem Dokument, see this verweisen können.

Last als Alternative, mit GemBox.Document library Sie genau erreichen könnte, was Sie wollen, finden Sie hier:

public static void CreateDocument(string documentFileName, string text) 
{ 
    DocumentModel document = new DocumentModel(); 
    document.Content.LoadText(text, LoadOptions.HtmlDefault); 
    document.Save(documentFileName); 
} 

Oder Sie könnten tatsächlich ohne weiteres einen HTML-Inhalt in eine DOCX-Datei konvertieren:

public static void Convert(string documentFileName, string htmlText) 
{ 
    HtmlLoadOptions options = LoadOptions.HtmlDefault; 
    using (var htmlStream = new MemoryStream(options.Encoding.GetBytes(htmlText))) 
     DocumentModel.Load(htmlStream, options) 
        .Save(documentFileName); 
} 
+0

Mein Beitrag http://www.docx4java.org/blog/2014/09/c-net-import-xhtml-into-docx-without-word/ endet mit ein paar anderen Optionen – JasonPlutext