2017-01-26 8 views
0

У меня есть метод, который заменяет теги в тексте конкретного документа. Как заменить изображение метки? enter image description hereC# WordprocessingDocument - вставить изображение в ячейку

+0

Что вы подразумеваете под ярлыком? Объясните свой вопрос подробно, чтобы другие могли вам помочь. – Dhanashree

+0

PersonMainPhoto, PersonPhoto2, PersonPhoto3 - наклейки, его необходимо заменить изображениями – murash

+0

Эта ссылка может быть полезна - http://alemiralles.blogspot.nl/2013/08/how-to-replace-text-with-images-onword .html – Dhanashree

ответ

3

Вот фрагмент кода, который ищет ячейку с текстом PersonMainPhoto внутри таблицы. Ячейка tabel очищается, и изображение вставлено. Надеемся, это поможет вам в правильном направлении.

Вставка изображения представляет собой процесс две части:

  • Добавить часть изображения в документ
  • Вставьте ссылку на изображение внутри основного текста - все виды информации относительно масштабирования, позиционирование и т.д.

код для вставки ссылки взяты из блестящей OpenXML SDK документации: https://msdn.microsoft.com/en-us/library/office/bb497430.aspx

using System.IO; 
using System.Linq; 
using DocumentFormat.OpenXml; 
using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Wordprocessing; 
using A = DocumentFormat.OpenXml.Drawing; 
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing; 
using PIC = DocumentFormat.OpenXml.Drawing.Pictures; 

namespace StackOverflow 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string file = @"c:\temp\mydoc.docx"; 
     string imageFile = @"c:\temp\myimage.jpg"; 
     string labelText = "PersonMainPhoto"; 

     using (var document = WordprocessingDocument.Open(file, isEditable: true)) 
     { 
     var mainPart = document.MainDocumentPart; 
     var table = mainPart.Document.Body.Descendants<Table>().First(); 

     var pictureCell = table.Descendants<TableCell>().First(c => c.InnerText == labelText); 

     ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg); 

     using (FileStream stream = new FileStream(imageFile, FileMode.Open)) 
     { 
      imagePart.FeedData(stream); 
     } 

     pictureCell.RemoveAllChildren(); 
     AddImageToCell(pictureCell, mainPart.GetIdOfPart(imagePart)); 

     mainPart.Document.Save(); 
     } 
    } 

    private static void AddImageToCell(TableCell cell, string relationshipId) 
    { 
     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 = (UInt32Value)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 = (UInt32Value)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 = relationshipId, 
         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 = (UInt32Value)0U, 
      DistanceFromBottom = (UInt32Value)0U, 
      DistanceFromLeft = (UInt32Value)0U, 
      DistanceFromRight = (UInt32Value)0U 
      }); 

     cell.Append(new Paragraph(new Run(element))); 
    } 
    } 
}