openxml
Bild in eine Inline-Inline-Form in Word-Dokumenten einfügen
Suche…
Einführung
Einfügen eines Bildes in ein MS Word-Dokument, z. B. Rechtecke und Ovale.
In dieser Dokumentation wird davon ausgegangen, dass Sie wissen, wie Sie ein Bild in ein Word-Dokument einfügen, ein Word-Dokument mit OpenXML öffnen und schließen
Fügen Sie Ihrer Klasse die folgenden OpenXML-Namespaces hinzu
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;
Öffnen Sie das Dokument und fügen Sie das imagePart-Objekt hinzu, um auf das Bild zu verweisen, das Sie in die Form einfügen möchten
Öffnen Sie nun das Dokument mit OpenXML. Sie müssen ein imagePart hinzufügen, das das Bildobjekt mithilfe eines Dateistreams auf das MainDocumentPart-Objekt verweist, und die ID des Bildes abrufen
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);
Liefert einen Verweis auf ein Blip-Objekt
In Office OpenXML wird ein Bild, das in ein Word-Dokument eingefügt wird, als "Blip" -Objekt oder Element betrachtet. Die Klasse wird von DocumentFormat.OpenXml abgeleitet.Drawing Der Blip muss einen Embed-Wert haben, der eine imagePart-ID ist. Das Blip-Objekt befindet sich dann in einem BlipFill- Objekt / Element, und das befindet sich auch in einem graphicData- Objekt / Element und das wiederum in einem Grafikelement- Element. Ich bin mir ziemlich sicher, dass Sie inzwischen erkannt haben, dass alles wie ein XML-Baum funktioniert. Beispiel für die Open XML-Struktur unten.
<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>
Hinzufügen der Referenz des Bildes zu den Formen im Vorlagendokument.
Jetzt haben Sie eine Referenz des Bildes. Fügen Sie das Bild in die Formen im Vorlagendokument ein. Dazu müssen Sie LINQ verwenden, um das Dokument zu durchlaufen und einen Verweis auf alle Shapes im Dokument zu erhalten. Das im obigen XML-Code gezeigte Element wps: spPr ist das XML-Element für die Shapes in einem Dokument. Die äquivalente C # -Klasse ist WordprocessingShape
IEnumerable<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape> shapes2 = document.MainDocumentPart.document.Body.Descendants<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape>();
Durchlaufen Sie die Sammlung mit einer Sammlungsreferenz aller Formen.
Nun haben Sie eine Sammlung aller Formverweise im Dokument. Durchlaufen Sie die Sammlung mit einem foreach und erstellen Sie durch jede Iteration ein Blip-Objekt. Stellen Sie den Blip-Objekteinbettungswert auf die Bild-ID-Referenz ein, die Sie zuvor aus dem Bildteil erfasst haben. Erstellen Sie außerdem ein Stretch-Objekt und ein FillRectangle-Objekt (diese sind nicht unbedingt erforderlich, sie werden nur zur korrekten Ausrichtung des Bildes verwendet). Fügen Sie jedes Objekt wie das XML-Baumäquivalent an das übergeordnete Objekt an.
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);
}