openxml
Sätt in bilden i en inline "inlineform" i orddokument
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);
}