首页 > 学院 > 开发设计 > 正文

OpenXml入门---word里面插入图片

2019-11-17 02:52:51
字体:
来源:转载
供稿:网友

Openxml入门---Word里面插入图片

下面介绍如何在word里面插入图片,顺便小弟发现MSDN官网有完整的OpenXML教程,虽然是全英文的不过还是很有帮助的。

Tips,原来摘抄代码里面没有模板,在copy过来发现插入word中的图片大小不一样,我们如何查找设置图片大小带代码的那一块,建议自己用在word里面插入一张图片,通过OpenXml Tools反编译出C#代码,然后改变图片的大小,再次反编译。

使用byeondcompare【http://www.scootersoftware.com/下载地址】比较C#代码,就会发现是因为new DW.Extent() { Cx = 990000L, Cy = 792000L}是因为这段设置照成的。以后其实很多地方都可以借助OpenXml Tools反编译来进行对比。查看设置样式的属性位置。

MSDNopenxml学习链接: 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)));        }    }}


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