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 에서 파생됩니다. Blip에는 imagePart ID 인 Embed 값이 있어야합니다. 그런 다음 Blip 객체는 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 object embed 값을 이미지 부분에서 이전에 캡처 한 그림 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);
}