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

C#采用OpenXml给word里面插入图片,第1张

概述本文实例讲述了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#程序设计有所帮助。

总结

以上是内存溢出为你收集整理的C#采用OpenXml给word里面插入图片全部内容,希望文章能够帮你解决C#采用OpenXml给word里面插入图片所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1254632.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存