openxml
ワードドキュメントのインライン「インラインシェイプ」にイメージを挿入する
サーチ…
前書き
四角形や楕円形などのMS Wordドキュメントの図形にイメージを挿入します。
このドキュメントでは、イメージをワードドキュメントに挿入する方法、OpenXMLを使用してワードドキュメントを開いたり閉じたりする方法を理解していることを前提としています
あなたのクラスに次のOpenXML名前空間を追加してください
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;
ドキュメントを開き、図形に挿入する画像を参照するimagePartオブジェクトを追加します。
OpenXMLを使用してドキュメントを開いたら、ファイルストリームを使用して画像オブジェクトを参照するimagePartをMainDocumentPartオブジェクトに追加し、画像の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);
Blipオブジェクトのリファレンスを取得する
オフィスのOpenXMLでは、ワード文書に挿入される画像は、「Blip」オブジェクトまたは要素とみなされます。このクラスはDocumentFormat.OpenXml.Drawingから派生し、BlipにはimagePart IDのEmbed値が必要です。ブリップオブジェクトは、内部に入るBlipFillのオブジェクト/要素、それはまた、内部に入るgraphicDataのオブジェクト/要素、それは順番にになり、グラフィックオブジェクト要素。私は今、あなたがXMLツリーのようにすべてが動作することを実感したことでかなり確信しています。下のサンプルOpen XMLツリー。
<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>
画像の参照をテンプレート文書の図形に追加する。
今あなたはイメージの参照を持っています。画像をテンプレート文書の図形に挿入します。これを行うには、ドキュメントを繰り返し処理するためにLINQを使用し、ドキュメント内のすべての図形への参照を取得する必要があります。上記のXMLコードで表示されるwps:spPr要素は、ドキュメント内の図形のxml要素です。同等のC#クラスはWordprocessingShapeです。
IEnumerable<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape> shapes2 = document.MainDocumentPart.document.Body.Descendants<DocumentFormat.OpenXml.Office2010.Word.DrawingShape.WordprocessingShape>();
すべての図形のコレクション参照で、コレクションをループします。
これで、ドキュメント内のすべてのシェイプリファレンスのコレクションが作成されました。 foreachを使用してコレクションをループし、繰り返しごとにBlipオブジェクトを作成します。 Blipオブジェクトの埋め込み値を、画像部分から先に取り込んだピクチャID参照に設定します。また、StretchオブジェクトとFillRectangleオブジェクトを作成します(これらは実際には必要ではなく、イメージの適切な位置合わせのために使用されています)。 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);
}