zoukankan      html  css  js  c++  java
  • C#采用OpenXml给word里面插入图片

    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)));
    }
    }
    }

     

    首先图片300*300对应的图片大小为:7.935cm*7.035cm,至于如何计算可以参考下面的计算换算规则:

    然而Open xml中的度量单位为EMU(全称为 English Metric Unit),1cm =360000EMUS,所以7.935cm=7.935*360000=2857500, 更多内容你可以参考下面的文章介绍:http://startbigthinksmall.wordpress.com/2010/01/04/points-inches-and-emus-measuring-units-in-office-open-xml/ 

  • 相关阅读:
    字符串初始化、查找字符+获取字符
    冒泡排序
    JAVA中值类型和引用类型的不同?
    二维数组初始化,属性,遍历,输出各元素总和。
    数组定义属性遍历循环,输出最大数
    for穷举,叠代练习
    HTML--Boby部分之<a>标签
    HTML--Boby内标签之多行文本及下拉框
    HTML--Boby部分Input之重置
    HTML--Boby部分Input之上传文件
  • 原文地址:https://www.cnblogs.com/zcm123/p/6069507.html
Copyright © 2011-2022 走看看