Поиск…


Вступление

Вставьте изображение в формы документа MS Word, такие как прямоугольники и овалы.

В этой документации предполагается, что вы знаете, как вставить изображение в документ Word, открыть и закрыть документ с использованием OpenXML

Добавьте в свой класс следующие пространства имен OpenXML

using System;
using System.Collections.Generic;
using System.Linq;
using DocumentFormat.OpenXml;
using A = DocumentFormat.OpenXml.Drawing;
using DW = DocumentFormat.OpenXml.Drawing.Wordprocessing;
using PIC = DocumentFormat.OpenXml.Drawing.Pictures;
using DocumentFormat.OpenXml.Drawing.Wordprocessing;
using Wps = DocumentFormat.OpenXml.Office2010.Word.DrawingShape;

Откройте документ и добавьте объект ImagePart для ссылки на изображение, которое вы хотите вставить в форму

Теперь откройте документ с помощью OpenXML, вы должны добавить ImagePart, который ссылается на объект изображения на объект MainDocumentPart, используя поток файлов и получить идентификатор изображения

    string temp;
MainDocumentPart mainPart = document.MainDocumentPart;
                               ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Bmp);

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

                               temp = mainPart.GetIdOfPart(imagePart);

Получить ссылку на объект Blip

В Office OpenXML изображение, вставленное в текстовый документ, считается объектом или элементом «Blip». Класс получен из документа DocumentFormat.OpenXml.Drawing. Blip должен иметь значение Embed, которое является идентификатором образа. Затем объект Blip входит в объект / элемент BlipFill и также входит внутри объекта / элемента graphicsData и, в свою очередь, переходит в элемент графического объекта. Я почти уверен, что вы поняли, что все работает как дерево XML. Пример дерева Open XML ниже.

<a:graphic xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main">
                       <a:graphicData uri="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
                         <wps:wsp>
                           <wps:cNvSpPr>
                             <a:spLocks noChangeArrowheads="1" />
                           </wps:cNvSpPr>
                           <wps:spPr bwMode="auto">
                             <a:xfrm>
                               <a:off x="0" y="0" />
                               <a:ext cx="1234440" cy="1234440" />
                             </a:xfrm>
                             <a:prstGeom prst="roundRect">
                               <a:avLst>
                                 <a:gd name="adj" fmla="val 16667" />
                               </a:avLst>
                             </a:prstGeom>
                             <a:blipFill dpi="0" rotWithShape="1">
                               <a:blip r:embed="Raade88ffea8d4c1b" />
                               <a:stretch>
                                 <a:fillRect l="10000" t="10000" r="10000" b="10000" />
                               </a:stretch>
                             </a:blipFill>
                           </wps:spPr>
                           <wps:bodyPr rot="0" vert="horz" wrap="square" lIns="91440" tIns="45720" rIns="91440" bIns="45720" anchor="t" anchorCtr="0" upright="1">
                             <a:noAutofit />
                           </wps:bodyPr>
                         </wps:wsp>
                       </a:graphicData>
                     </a:graphic>

Добавление ссылки на изображение фигур в документе шаблона.

Теперь у вас есть ссылка на изображение. Вставьте изображение в фигуры в документе шаблона. Для этого вам нужно будет использовать LINQ для повторения документа и получения ссылки на все фигуры в документе. Элемент wps: spPr, который вы видите в приведенном выше XML-коде, представляет собой элемент xml для фигур в документе. Эквивалентным классом C # является WordprocessingShape

IEnumerable<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape> shapes2 = document.MainDocumentPart.document.Body.Descendants<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape>();

Со ссылкой на подборку всех фигур, пройдите через коллекцию.

Теперь у вас есть коллекция всех ссылок на фигуры в документе. Прокрутите коллекцию с помощью foreach и через каждую итерацию создайте объект Blip. Установите значение встроенного объекта Blip в ссылку на идентификатор изображения, которую вы перенесли ранее из части изображения. Также создайте объект Stretch и объект FillRectangle (они действительно не нужны, они просто используются для правильного выравнивания изображения). И добавьте каждый к его родительскому объекту, как эквивалент дерева XML.

foreach (DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape sp in shapes2)
                              {
                                  //Wps.ShapeProperties shapeProperties1 = 
                                  A.BlipFill blipFill1 = new A.BlipFill() { Dpi = (UInt32Value)0U, RotateWithShape = true };
                                  A.Blip blip1 = new A.Blip() { Embed = temp };

                                  A.Stretch stretch1 = new A.Stretch();
                                  A.FillRectangle fillRectangle1 = new A.FillRectangle() { Left = 10000, Top = 10000, Right = 10000, Bottom = 10000 };
                                  Wps.WordprocessingShape wordprocessingShape1 = new Wps.WordprocessingShape();



                                      stretch1.Append(fillRectangle1);
                                      blipFill1.Append(blip1);
                                      blipFill1.Append(stretch1);
                                      Wps.ShapeProperties shapeProperties1 = sp.Descendants<Wps.ShapeProperties>().First();
                                      shapeProperties1.Append(blipFill1);
                                      
                              }


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow