本文实例讲述了C#采用OpenXml给word里面插入图片的方法,分享给大家供大家参考。具体分析如下:
首先需要指出的是在MSDN官网有完整的OpenXML教程,虽然是全英文的不过还是很有帮助的。
注,原来摘抄代码里面没有模板,在copy过来发现插入word中的图片大小不一样,我们如何查找设置图片大小带代码的那一块,建议自己用在word里面插入一张图片,通过OpenXml Tools 反编译出C#代码,然后改变图片的大小,再次反编译。
使用byeond compare 【http://www.scootersoftware.com/ 下载地址】比较C#代码,就会发现是因为new DW.Extent() { Cx = 990000L,Cy = 792000L} 是因为这段设置造成的。以后其实很多地方都可以借助OpenXml Tools反编译来进行对比。查看设置样式的属性位置。
MSDN openxml学习链接: http://msdn.microsoft.com/en-us/library/office/bb491088(v=office.15).aspx。感兴趣的朋友可以查看一下。
示例代码如下:
using System;using System.Collections.Generic;using System.linq;using System.Text;using System.Threading.Tasks;using documentFormat.OpenXml;using documentFormat.OpenXml.Packaging;using documentFormat.OpenXml.Wordprocessing;using System.IO;using DW = documentFormat.OpenXml.Drawing.Wordprocessing;using PIC = documentFormat.OpenXml.Drawing.Pictures;using A = documentFormat.OpenXml.Drawing;namespace AddPictureIntoWord{ public class Program { public static voID Main(string[] args) { string picPath = "u=639047729,3872612606&fm=11&gp=0.bmp"; string filePath = "Test.docx"; AddPictureIntoWord(filePath,picPath); } public static voID AddPictureIntoWord(string filePath,string picturePath) { using (Wordprocessingdocument doc = Wordprocessingdocument.Open(filePath,true)) { string picType = picturePath.Split('.').Last(); ImagePartType imagePartType; ImagePart imagePart = null; // 通过后缀名判断图片类型,true 表示忽视大小写 if (Enum.TryParse<ImagePartType>(picType,true,out imagePartType)) { 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 private static voID AddImagetoBody(Wordprocessingdocument wordDoc,string relationshipID) { // define the reference of the image. var element = new Drawing( new DW.Inline( new DW.Extent() { Cx = 990000L,Cy = 792000L },// 调节图片大小 new DW.EffectExtent() { leftEdge = 0L,topEdge = 0L,RightEdge = 0L,BottomEdge = 0L },new DW.DocPropertIEs() { ID = (UInt32Value)1U,name = "Picture 1" },new DW.NonVisualGraphicFrameDrawingPropertIEs( new A.GraphicFrameLocks() { NoChangeAspect = true }),new A.Graphic( new A.Graphicdata( new PIC.Picture( new PIC.NonVisualPicturePropertIEs( new PIC.NonVisualDrawingPropertIEs() { ID = (UInt32Value)0U,name = "New Bitmap Image.jpg" },new PIC.NonVisualPictureDrawingPropertIEs()),new PIC.BlipFill( new A.Blip( new A.BlipExtensionList( new A.BlipExtension() { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }) ) { Embed = relationshipID,CompressionState = A.BlipCompressionValues.Print },new A.Stretch( new A.FillRectangle())),new PIC.ShapePropertIEs( new A.transform2D( new A.Offset() { X = 0L,Y = 0L },new A.Extents() { Cx = 990000L,Cy = 792000L }),//与上面的对准 new A.PresetGeometry( new A.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" }); // Append the reference to body,the element should be in a Run. wordDoc.MaindocumentPart.document.Body.AppendChild(new Paragraph(new Run(element))); } }}
本文示例运行效果如下图所示:
希望本文所述对大家的C#程序设计有所帮助。
总结以上是内存溢出为你收集整理的C#采用OpenXml给word里面插入图片全部内容,希望文章能够帮你解决C#采用OpenXml给word里面插入图片所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)