Добавление заголовка в HTML из файла Word с помощью WordProcessingDocument c#

#c# #ms-word #header #openxml-sdk

#c# #ms-word #заголовок #openxml-sdk

Вопрос:

У меня есть файл шаблона word (расширение.docx), который содержит заголовок и текст с некоторым текстом и изображением, изображение в теле такое же, как в заголовке.

Я успешно преобразовал файл word в файл изображения, все на месте, кроме части заголовка. Таким образом, я вручную добавляю заголовок через программу до того, как класс WordProcessingDocument преобразует его в HTML, однако он не работает, заголовок все еще отсутствует после того, как он успешно преобразован в HTML и из HTML преобразован в изображение.

Вот скриншот результата:

  • Файл шаблона Word (расширение.docx) gt; заметил, что есть часть заголовка

Файл Word

  • Файл изображения после преобразования из HTML в файл изображения

Файл изображения

Вот код, который я использую:

 var DocFileInfo = new FileInfo("C:DeveloperDeveloperWordFile.docx");  string HTMLDocument = ParseDOCX(DocFileInfo, "Developer");  File.WriteAllBytes("C:DeveloperDeveloperImageFile.png", new NReco.ImageGenerator.HtmlToImageConverter().GenerateImage(HTMLDocument, NReco.ImageGenerator.ImageFormat.Png));  private string ParseDOCX(FileInfo fileInfo, string pageTitle)  {  byte[] byteArray = File.ReadAllBytes(fileInfo.FullName);   using (var memoryStream = new MemoryStream())  {  memoryStream.Write(byteArray, 0, byteArray.Length);   using (var wDoc = WordprocessingDocument.Open(memoryStream, true))  {  int imageCounter = 0;   var settings = new HtmlConverterSettings  {  PageTitle = pageTitle,  FabricateCssClasses = true,  CssClassPrefix = "pt-",  RestrictToSupportedLanguages = false,  RestrictToSupportedNumberingFormats = false,  ImageHandler = imageInfo =gt;  {    imageCounter;   string extension = imageInfo.ContentType.Split('/')[1].ToLower();   var imageFormat = default(ImageFormat);   if (extension == "png")  imageFormat = ImageFormat.Png;   else if (extension == "gif")  imageFormat = ImageFormat.Gif;   else if (extension == "bmp")  imageFormat = ImageFormat.Bmp;   else if (extension == "jpeg")  imageFormat = ImageFormat.Jpeg;   else if (extension == "tiff")  {  extension = "gif";  imageFormat = ImageFormat.Gif;  }   else if (extension == "x-wmf")  {  extension = "wmf";  imageFormat = ImageFormat.Wmf;  }   if (imageFormat == null)  return null;   string base64 = string.Empty;   try  {  using (var ms = new MemoryStream())  {  imageInfo.Bitmap.Save(ms, imageFormat);   var ba = ms.ToArray();   base64 = Convert.ToBase64String(ba);  }  }   catch (System.Runtime.InteropServices.ExternalException)  {  return null;  }   var format = imageInfo.Bitmap.RawFormat;  var codec = ImageCodecInfo.GetImageDecoders().First(c =gt; c.FormatID == format.Guid);   string mimeType = codec.MimeType;  string imageSource = string.Format("data:{0};base64,{1}", mimeType, base64);   var img = new XElement(Xhtml.img, new XAttribute(NoNamespace.src, imageSource), imageInfo.ImgStyleAttribute, imageInfo.AltText != null ? new XAttribute(NoNamespace.alt, imageInfo.AltText) : null);   return img;  }  };   InsertHeaderImage(wDoc);   var htmlElement = HtmlConverter.ConvertToHtml(wDoc, settings);   var html = new XDocument(new XDocumentType("html", null, null, null), htmlElement);   string htmlString = html.ToString(SaveOptions.DisableFormatting);   return htmlString;  }  }  }   private void InsertHeaderImage(WordprocessingDocument wDoc)  {  var HeaderPart = wDoc.MainDocumentPart.GetPartsOfTypelt;HeaderPartgt;().FirstOrDefault();  var ImagePart = HeaderPart.AddImagePart(ImagePartType.Jpeg);    using (var Stream = new FileStream("C:DeveloperDeveloperImageFileTemplate.jpeg", FileMode.Open))  ImagePart.FeedData(Stream);   var element = new Drawing(  new DW.Inline(  new DW.Extent() { Cx = 990000L, Cy = 792000L },  new DW.EffectExtent()  {  LeftEdge = 0L,  TopEdge = 0L,  RightEdge = 0L,  BottomEdge = 0L  },  new DW.DocProperties()  {  Id = 1U,  Name = "Picture 1"  },  new DW.NonVisualGraphicFrameDrawingProperties(  new A.GraphicFrameLocks() { NoChangeAspect = true }),  new A.Graphic(  new A.GraphicData(  new PIC.Picture(  new PIC.NonVisualPictureProperties(  new PIC.NonVisualDrawingProperties()  {  Id = 0U,  Name = "New Bitmap Image.jpg"  },  new PIC.NonVisualPictureDrawingProperties()),  new PIC.BlipFill(  new A.Blip(  new A.BlipExtensionList(  new A.BlipExtension()  {  Uri =  "{28A0092B-C50C-407E-A947-70E740481C1C}"  })  )  {  Embed = HeaderPart.GetIdOfPart(ImagePart),  CompressionState =  A.BlipCompressionValues.Print  },  new A.Stretch(  new A.FillRectangle())),  new PIC.ShapeProperties(  new A.Transform2D(  new A.Offset() { X = 0L, Y = 0L },  new A.Extents() { Cx = 990000L, Cy = 792000L }),  new A.PresetGeometry(  new A.AdjustValueList()  )  { Preset = A.ShapeTypeValues.Rectangle }))  )  { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })  )  {  DistanceFromTop = 0U,  DistanceFromBottom = 0U,  DistanceFromLeft = 0U,  DistanceFromRight = 0U,  EditId = "50D07946"  });   HeaderPart.Header.AppendChild(new DocumentFormat.OpenXml.Wordprocessing.Paragraph(new DocumentFormat.OpenXml.Wordprocessing.Run(element)));  }  

Любая помощь была бы очень признательна.

Большое спасибо.