Sök…


Introduktion

Sätt in en bild i ett MS Word-dokumentformer som rektanglar och ovaler.

Den här dokumentationen antar att du vet hur du sätter in en bild i ett orddokument, öppnar och stänger ett orddokument med OpenXML

Lägg till följande OpenXML-namnutrymmen i din klass

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;

Öppna dokumentet och lägg till imagePart-objekt för att referera till den bild du vill infoga i formen

Öppna nu dokumentet med OpenXML, du måste lägga till ett imagePart som refererar till bildobjektet till MainDocumentPart-objektet genom att använda en filström och få bildens ID

    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);

Få en referens till ett Blip-objekt

I Office OpenXML betraktas en bild som infogas i ett orddokument som ett "Blip" -objekt eller -element. Klassen härleds från DocumentFormat.OpenXml.Drawing the Blip måste ha ett Bädda värde som är ett imagePart-ID. Blip-objektet går sedan in i ett BlipFill- objekt / -element, och det går också in i ett graphicsData- objekt / element och som i sin tur går in i ett grafiskt objektelement. Jag är ganska säker på att du nu har insett att allt fungerar som ett XML-träd. Prov Öppna XML-träd nedan.

<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>

Lägger till referens till bilden formerna i malldokumentet.

Nu har du en referens till bilden. Sätt in bilden i formerna i malldokumentet. För att göra detta måste du använda lite LINQ för att iterera igenom dokumentet och få en referens till alla former i dokumentet. Wps: spPr-elementet som du ser i ovanstående XML-kod är xml-elementet för formerna i ett dokument. Motsvarande C # -klass är WordprocessingShape

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

Med en samlingsreferens av alla former, gå igenom samlingen.

Nu när du har en samling av alla formreferenser i dokumentet. Gå igenom kollektionen med en förhand och skapa en Blip-objekt genom varje iteration. Ställ in Blip-objektets inbäddningsvärde på den bild-ID-referens du tagit tidigare från bilddelen. Skapa också ett Stretch-objekt och FillRectangle-objekt (dessa är inte riktigt nödvändiga, de används bara för att justera bilden korrekt). Och lägg till var och en till sina överordnade objekt som motsvarande XML-träd.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow