#c# #ms-word #header #openxml-sdk
#c# #ms-word #заголовок #openxml-sdk
Вопрос:
У меня есть файл шаблона word (расширение.docx), который содержит заголовок и текст с некоторым текстом и изображением, изображение в теле такое же, как в заголовке.
Я успешно преобразовал файл word в файл изображения, все на месте, кроме части заголовка. Таким образом, я вручную добавляю заголовок через программу до того, как класс WordProcessingDocument преобразует его в HTML, однако он не работает, заголовок все еще отсутствует после того, как он успешно преобразован в HTML и из HTML преобразован в изображение.
Вот скриншот результата:
- Файл шаблона Word (расширение.docx) gt; заметил, что есть часть заголовка
- Файл изображения после преобразования из 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))); }
Любая помощь была бы очень признательна.
Большое спасибо.