openxml
Afbeelding invoegen in een inline "inline vorm" in Word-documenten
Zoeken…
Invoering
Voeg een afbeelding in een MS Word-document in, zoals rechthoeken en ovalen.
In deze documentatie wordt ervan uitgegaan dat u weet hoe u een afbeelding in een Word-document invoegt, een Word-document opent en sluit met OpenXML
Voeg de volgende OpenXML-naamruimten toe aan uw klas
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;
Open het document en voeg het imagePart-object toe om te verwijzen naar de afbeelding die u in de vorm wilt invoegen
Open nu het document met OpenXML, u moet een imagePart toevoegen dat het picture-object verwijst naar het MainDocumentPart-object met behulp van een bestandsstream, en de ID van de afbeelding ophalen
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);
Krijg een referentie van een Blip-object
In Office OpenXML wordt een afbeelding die in een Word-document wordt ingevoegd, beschouwd als een "Blip" -object of -element. De klasse is afgeleid van de DocumentFormat.OpenXml.Tekening van de Blip moet een Embed-waarde hebben die een imagePart ID is. Het Blip-object gaat dan in een BlipFill- object / -element, en dat gaat ook in een graphicData- object / -element en dat gaat op zijn beurt over in een grafisch object-element. Ik ben er vrij zeker van dat je je inmiddels hebt gerealiseerd dat alles werkt als een XML-boom. Voorbeeld van een open XML-structuur hieronder.
<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>
Referentie van de afbeelding toevoegen van de vormen in het sjabloondocument.
Nu heb je een referentie van de afbeelding. Plaats de afbeelding in de vormen in het sjabloondocument. Om dit te doen, moet je wat LINQ gebruiken om het document te doorlopen en een verwijzing naar alle vormen in het document te krijgen. Het wps: spPr-element dat u in de bovenstaande XML-code ziet, is het xml-element voor de vormen in een document. De equivalente C # -klasse is WordprocessingShape
IEnumerable<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape> shapes2 = document.MainDocumentPart.document.Body.Descendants<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape>();
Loop met een verzamelingreferentie van alle vormen door de collectie.
Nu heb je een verzameling van alle vormverwijzingen in het document. Loop door de collectie met een foreach en maak door elke iteratie een Blip-object. Stel de insluitwaarde van het Blip-object in op de foto-ID-referentie die u eerder vanuit het afbeeldingsgedeelte hebt vastgelegd. Maak ook een Stretch-object en FillRectangle-object (deze zijn niet echt nodig, ze worden alleen gebruikt voor een juiste uitlijning van de afbeelding). En voeg elk toe aan zijn bovenliggend object zoals het equivalent van de XML-boom.
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);
}