C#采用OpenXml给word里面插入图片
本篇章节讲解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#程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |