2017-02-16 3 views
1

Ich möchte eine .docx-Datei lesen und senden Sie ihren Inhalt in E-Mail als E-Mail-Körper nicht als Anhang.OpenXml Konvertieren von Word-Dokument in HTML mit Header

Also verwende ich OpenXML und OpenXmlPowerTools, um docx-Datei in HTML zu konvertieren. Das funktioniert fast gut, bis ich ein Dokument, das Header und Footer mit Bildern hat.

Hier ist mein Code .docx zu Html

using (WordprocessingDocument doc = WordprocessingDocument.Open(stream, true)) 
       { 
        HtmlConverterSettings convSettings = new HtmlConverterSettings() 
        { 
         FabricateCssClasses = true, 
         CssClassPrefix = "cls-", 
         RestrictToSupportedLanguages = false, 
         RestrictToSupportedNumberingFormats = false, 
         ImageHandler = imageInfo => 
         { 
          DirectoryInfo localDirInfo = new DirectoryInfo(imageDirectoryName); 
          if (!localDirInfo.Exists) 
          { 
           localDirInfo.Create(); 
          } 

          ++imageCounter; 
          string extension = imageInfo.ContentType.Split('/')[1].ToLower(); 
          ImageFormat imageFormat = null; 
          if (extension == "png") 
          { 
           extension = "jpeg"; 
           imageFormat = ImageFormat.Jpeg; 
          } 
          else if (extension == "bmp") 
          { 
           imageFormat = ImageFormat.Bmp; 
          } 
          else if (extension == "jpeg") 
          { 
           imageFormat = ImageFormat.Jpeg; 
          } 
          else if (extension == "tiff") 
          { 
           imageFormat = ImageFormat.Tiff; 
          } 

          // If the image format is not one that you expect, ignore it, 
          // and do not return markup for the link. 
          if (imageFormat == null) 
          { 
           return null; 
          } 

          string imageFileName = imageDirectoryName + "/image" + imageCounter.ToString() + "." + extension; 

          try 
          { 
           imageInfo.Bitmap.Save(imageFileName, imageFormat); 
          } 
          catch (System.Runtime.InteropServices.ExternalException) 
          { 
           return null; 
          } 

          XElement img = new XElement(Xhtml.img, new XAttribute(NoNamespace.src, imageFileName), imageInfo.ImgStyleAttribute, imageInfo.AltText != null ? new XAttribute(NoNamespace.alt, imageInfo.AltText) : null); 
          return img; 
         } 
        }; 

        XElement html = OpenXmlPowerTools.HtmlConverter.ConvertToHtml(doc1, convSettings); 

Above Code funktioniert gut, Konvertieren von Bildern als auch zu konvertieren, aber wenn der Belegkopf hat und Fußzeile diejenigen werden nicht konvertiert.

So ist ihre jede Problemumgehung, Header und Fußzeile in HTML-Datei zu enthalten.

Bitte schlagen Sie mir vor. Vielen Dank!

+0

(Ich weiß das ein bisschen irrelevant) Gibt es einen bestimmten Grund, warum Sie OpenXML SDK anstelle von MS Word Interop Assembly verwenden? –

+2

@AzazulHaq Ich denke MS Word Interop Assembly muss MS Office auf Ihrem Computer installiert werden, so vermeide ich dies. –

Antwort

0

OpenXmlPowerTools ignoriert Kopf- und Fußzeilen beim Konvertieren eines docx-Dokuments in HTML, so dass sie nicht im resultierenden HTML angezeigt werden (Sie können browse the source code auf github).

Vielleicht liegt es daran, dass das Konzept einer "Seite" nicht auf HTML zutrifft, also gibt es keine offensichtliche Entsprechung zu einem Dokumentkopf.