openxml
Inserisci l'immagine in una "forma in linea" incorporata nei documenti word
Ricerca…
introduzione
Inserisci un'immagine in forme di documenti di MS Word come Rettangoli e ovali.
Questa documentazione presume che tu sappia come inserire un'immagine in un documento word, aprire e chiudere un documento word usando OpenXML
Aggiungi i seguenti spazi dei nomi OpenXML alla tua classe
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;
Aprire il documento e aggiungere l'oggetto imagePart per fare riferimento all'immagine che si desidera inserire nella forma
Ora apri il documento usando OpenXML, devi aggiungere un imagePart che fa riferimento all'oggetto immagine all'oggetto MainDocumentPart utilizzando un flusso di file e ottieni l'ID dell'immagine
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);
Ottieni un riferimento di un oggetto Blip
In Office OpenXML, un'immagine che viene inserita in un documento word è considerata un oggetto o elemento "Blip". La classe è derivata da DocumentFormat.OpenXml.Drawing il Blip deve avere un valore di incorporamento che è un ID di imagePart. L'oggetto Blip viene quindi inserito all'interno di un oggetto / elemento BlipFill e anche all'interno di un oggetto / elemento graphicData che a sua volta entra in un elemento oggetto grafico . Sono abbastanza sicuro che ora hai realizzato che tutto funziona come un albero XML. Esempio di albero XML aperto di seguito.
<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>
Aggiunta del riferimento dell'immagine alle forme nel documento modello.
Ora hai un riferimento dell'immagine. Inserisci l'immagine nelle forme nel documento modello. Per fare ciò, dovrai usare qualche LINQ per scorrere il documento e ottenere un riferimento a tutte le forme nel documento. L'elemento wp: spPr che vedi nel codice XML di cui sopra è l'elemento xml per le forme in un documento. La classe C # equivalente è WordprocessingShape
IEnumerable<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape> shapes2 = document.MainDocumentPart.document.Body.Descendants<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape>();
Con un riferimento alla collezione di tutte le forme, passa attraverso la collezione.
Ora che hai una collezione di tutti i riferimenti di forma nel documento. Passa attraverso la collezione con un foreach, e attraverso ogni iterazione crea un oggetto Blip. Imposta il valore di incorporamento dell'oggetto Blip sul riferimento dell'ID dell'immagine acquisito in precedenza dalla parte dell'immagine. Crea anche un oggetto Stretch e un oggetto FillRectangle (questi non sono realmente necessari, sono solo usati per il corretto allineamento dell'immagine). E aggiungi ciascuno al suo oggetto padre come l'equivalente dell'albero 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);
}