zoukankan      html  css  js  c++  java
  • OpenXml入门---word里面插入图片

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

            Tips,原来摘抄代码里面没有模板,在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))); } } }

    Frank.Zhang
    座右铭: 因为没有翅膀,所以要努力奔跑
    简介: 成都90后IT民工,熟悉Vue,.Net,Hybrid开发。对我有兴趣吗? 请点击我
  • 相关阅读:
    计算机视觉(四)
    计算机视觉(三)
    计算机视觉(二)
    计算机视觉(一)
    基于opencv3实现运动物体识别
    tensorRT程序设计框架_4
    Cuda程序的设计-2
    神经网络的快速体验
    STL简介_18
    函数模板-17
  • 原文地址:https://www.cnblogs.com/FourLeafCloverZc/p/3980437.html
Copyright © 2011-2022 走看看