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#程序设计有所帮助。
相关文章
- c#数组赋初值_C#数组初始化
- C# 手动缩放图片帮助方法
- c# mysql executenonquery_C#与数据库访问技术总结(八)之ExecuteNonQuery方法
- C#抓取网络图片保存到本地详解编程语言
- C#构造函数
- c#循环中产生伪随机数
- asp.net(c#)实现从sqlserver存取二进制图片的代码
- C#图片截取压缩(百分比压缩/大小压缩)实现代码
- C#小程序15位转18位身份证号代码
- c#多图片上传并生成缩略图的实例代码
- C#图片与二进制转换的简单实例
- C#日期转换函数分享
- C#正则表达式分解和转换IP地址实例(C#正则表达式大全c#正则表达式语法)
- c#利用Grahics进行图片裁剪
- c#实现把汉字转为带田字格背景的jpg图片
- c#Invoke和BeginInvoke区别分析
- 基于C#winform实现图片上传功能的方法
- C#中缓存的基本用法总结
- C#生成code128条形码的方法
- C#(.net)水印图片的生成完整实例
- C#实现对图片文件的压缩、裁剪操作实例