栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

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

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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(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#程序设计有所帮助。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/126039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号