zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#采用OpenXml给word里面插入图片

c# 图片 插入 采用 word 里面 openxml
2023-06-13 09:15:46 时间

本文实例讲述了C#采用OpenXml给word里面插入图片的方法,分享给大家供大家参考。具体分析如下:

首先需要指出的是在MSDN官网有完整的OpenXML教程,虽然是全英文的不过还是很有帮助的。

注,原来摘抄代码里面没有模板,在copy过来发现插入word中的图片大小不一样,我们如何查找设置图片大小带代码的那一块,建议自己用在word里面插入一张图片,通过OpenXmlTools反编译出C#代码,然后改变图片的大小,再次反编译。

使用byeondcompare【http://www.scootersoftware.com/下载地址】比较C#代码,就会发现是因为newDW.Extent(){Cx=990000L,Cy=792000L} 是因为这段设置造成的。以后其实很多地方都可以借助OpenXmlTools反编译来进行对比。查看设置样式的属性位置。

MSDNopenxml学习链接: http://msdn.microsoft.com/en-us/library/office/bb491088(v=office.15).aspx。感兴趣的朋友可以查看一下。

示例代码如下:

usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingDocumentFormat.OpenXml;
usingDocumentFormat.OpenXml.Packaging;
usingDocumentFormat.OpenXml.Wordprocessing;
usingSystem.IO;
usingDW=DocumentFormat.OpenXml.Drawing.Wordprocessing;
usingPIC=DocumentFormat.OpenXml.Drawing.Pictures;
usingA=DocumentFormat.OpenXml.Drawing;

namespaceAddPictureIntoWord
{
publicclassProgram
{
publicstaticvoidMain(string[]args)
{
stringpicPath="u=639047729,3872612606&fm=11&gp=0.bmp";
stringfilePath="Test.docx";
AddPictureIntoWord(filePath,picPath);
}

publicstaticvoidAddPictureIntoWord(stringfilePath,stringpicturePath)
{
using(WordprocessingDocumentdoc=WordprocessingDocument.Open(filePath,true))
{
stringpicType=picturePath.Split(".").Last();
ImagePartTypeimagePartType;
ImagePartimagePart=null;
//通过后缀名判断图片类型,true表示忽视大小写
if(Enum.TryParse<ImagePartType>(picType,true,outimagePartType))
{
imagePart=doc.MainDocumentPart.AddImagePart(imagePartType);
}

imagePart.FeedData(File.Open(picturePath,FileMode.Open));//读取图片二进制流
AddImageToBody(doc,doc.MainDocumentPart.GetIdOfPart(imagePart));
}
}

//摘抄自http://msdn.microsoft.com/EN-US/library/office/bb497430(v=office.15).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-5
privatestaticvoidAddImageToBody(WordprocessingDocumentwordDoc,stringrelationshipId)
{
//Definethereferenceoftheimage.
varelement=
newDrawing(
newDW.Inline(
newDW.Extent(){Cx=990000L,Cy=792000L},//调节图片大小
newDW.EffectExtent()
{
LeftEdge=0L,
TopEdge=0L,
RightEdge=0L,
BottomEdge=0L
},
newDW.DocProperties()
{
Id=(UInt32Value)1U,
Name="Picture1"
},
newDW.NonVisualGraphicFrameDrawingProperties(
newA.GraphicFrameLocks(){NoChangeAspect=true}),
newA.Graphic(
newA.GraphicData(
newPIC.Picture(
newPIC.NonVisualPictureProperties(
newPIC.NonVisualDrawingProperties()
{
Id=(UInt32Value)0U,
Name="NewBitmapImage.jpg"
},
newPIC.NonVisualPictureDrawingProperties()),
newPIC.BlipFill(
newA.Blip(
newA.BlipExtensionList(
newA.BlipExtension()
{
Uri=
"{28A0092B-C50C-407E-A947-70E740481C1C}"
})
)
{
Embed=relationshipId,
CompressionState=
A.BlipCompressionValues.Print
},
newA.Stretch(
newA.FillRectangle())),
newPIC.ShapeProperties(
newA.Transform2D(
newA.Offset(){X=0L,Y=0L},
newA.Extents(){Cx=990000L,Cy=792000L}),//与上面的对准
newA.PresetGeometry(
newA.AdjustValueList()
){Preset=A.ShapeTypeValues.Rectangle}))
){Uri="http://schemas.openxmlformats.org/drawingml/2006/picture"})
)
{
DistanceFromTop=(UInt32Value)0U,
DistanceFromBottom=(UInt32Value)0U,
DistanceFromLeft=(UInt32Value)0U,
DistanceFromRight=(UInt32Value)0U,
EditId="50D07946"
});

//Appendthereferencetobody,theelementshouldbeinaRun.
wordDoc.MainDocumentPart.Document.Body.AppendChild(newParagraph(newRun(element)));
}
}
}

本文示例运行效果如下图所示:

希望本文所述对大家的C#程序设计有所帮助。