首页 > 编程 > C# > 正文

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

2020-01-24 02:23:39
字体:
来源:转载
供稿:网友

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表