• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > C#采用OpenXml给word里面插入图片

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

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了openxml word,openxml,openxml sdk,sql openxml,office openxml等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例讲述了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)));
    }
  }
}

</div>

本文示例运行效果如下图所示:

希望本文所述对大家的C#程序设计有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C#采用OpenXml给word里面插入图片
  • C#采用OpenXml给Word文档添加表格
  • C#采用OpenXml实现给word文档添加文字
  • C#利用Openxml读取Excel数据实例
  • OpenXml读写Excel实例代码

相关文章

  • 2017-05-28C#和SQL实现的字符串相似度计算代码分享
  • 2017-05-28C#找出字符串中第一个字母并大写的方法
  • 2017-05-28简单谈谈C#中深拷贝、浅拷贝
  • 2017-05-28C#实现终止正在执行的线程
  • 2017-05-28C#创建线程带参数的方法
  • 2017-05-28C#预定义数据类型之值类型和引用类型介绍
  • 2017-05-28关于C#基础知识回顾--反射(三)
  • 2017-05-28C#迷你猜数实例分析
  • 2017-05-28C# double和decimal数据类型以截断的方式保留指定的小数位数
  • 2017-05-28c# 如何将RadioButton与DataTable数据进行绑定

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C#中委托的基本概念介绍
    • 深入HTTP head的使用详解
    • c#实现网站监控查看是否正常示例
    • AnyChat的视频会议程序实例详解
    • C# 如何在MVC3中取消备用控制器的选择
    • C# 调用Delphi dll 实例代码
    • C#实现远程连接ORACLE数据库的方法
    • C#中面向对象编程机制之多态学习笔记
    • C# 去除首尾字符或字符串的方法
    • C#实现的ACCESS数据库操作类完整实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有