欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#采用OpenXml給word里面插入圖片

 更新時(shí)間:2014年09月24日 10:40:14   投稿:shichen2014  
這篇文章主要介紹了C#采用OpenXml給word里面插入圖片的方法,參考了MSDN官網(wǎng)的示例加以說(shuō)明,是OpenXml操作Word的一個(gè)非常重要的應(yīng)用,需要的朋友可以參考下

本文實(shí)例講述了C#采用OpenXml給word里面插入圖片的方法,分享給大家供大家參考。具體分析如下:

首先需要指出的是在MSDN官網(wǎng)有完整的OpenXML教程,雖然是全英文的不過(guò)還是很有幫助的。

注,原來(lái)摘抄代碼里面沒(méi)有模板,在copy過(guò)來(lái)發(fā)現(xiàn)插入word中的圖片大小不一樣,我們?nèi)绾尾檎以O(shè)置圖片大小帶代碼的那一塊,建議自己用在word里面插入一張圖片,通過(guò)OpenXml Tools 反編譯出C#代碼,然后改變圖片的大小,再次反編譯。

使用byeond compare 【http://www.scootersoftware.com/ 下載地址】比較C#代碼,就會(huì)發(fā)現(xiàn)是因?yàn)閚ew DW.Extent() { Cx = 990000L, Cy = 792000L}  是因?yàn)檫@段設(shè)置造成的。以后其實(shí)很多地方都可以借助OpenXml Tools反編譯來(lái)進(jìn)行對(duì)比。查看設(shè)置樣式的屬性位置。

MSDN openxml學(xué)習(xí)鏈接:  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;
        // 通過(guò)后綴名判斷圖片類型, true 表示忽視大小寫
        if (Enum.TryParse<ImagePartType>(picType, true, out imagePartType))
        {
          imagePart = doc.MainDocumentPart.AddImagePart(imagePartType);
        }

        imagePart.FeedData(File.Open(picturePath, FileMode.Open)); // 讀取圖片二進(jìn)制流
        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 }, // 調(diào)節(jié)圖片大小
             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 }), //與上面的對(duì)準(zhǔn)
                     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)));
    }
  }
}

本文示例運(yùn)行效果如下圖所示:

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • C# 漢字轉(zhuǎn)化拼音的簡(jiǎn)單實(shí)例代碼

    C# 漢字轉(zhuǎn)化拼音的簡(jiǎn)單實(shí)例代碼

    C# 漢字轉(zhuǎn)化拼音的簡(jiǎn)單實(shí)例代碼,需要的朋友可以參考一下
    2013-04-04
  • C#中給Excel添加水印的具體方法

    C#中給Excel添加水印的具體方法

    這篇文章主要介紹了C#中如何給Excel添加水印,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • C#自適應(yīng)合并文件的方法

    C#自適應(yīng)合并文件的方法

    這篇文章主要介紹了C#自適應(yīng)合并文件的方法,涉及C#基于FileStream類實(shí)現(xiàn)文件讀寫操作的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-07-07
  • C#使用ML.Net完成人工智能預(yù)測(cè)

    C#使用ML.Net完成人工智能預(yù)測(cè)

    這篇文章主要介紹了C#使用ML.Net完成人工智能預(yù)測(cè)的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • C#使用EF連接PGSql數(shù)據(jù)庫(kù)的完整步驟

    C#使用EF連接PGSql數(shù)據(jù)庫(kù)的完整步驟

    這篇文章主要給大家介紹了關(guān)于C#使用EF連接PGSql數(shù)據(jù)庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 使用C#實(shí)現(xiàn)在word中插入頁(yè)眉頁(yè)腳的方法

    使用C#實(shí)現(xiàn)在word中插入頁(yè)眉頁(yè)腳的方法

    這篇文章主要介紹了使用C#實(shí)現(xiàn)在word中插入頁(yè)眉頁(yè)腳的方法,是操作Word的常見(jiàn)方法,有一定的學(xué)習(xí)借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C#頁(yè)面之間跳轉(zhuǎn)功能的小結(jié)

    C#頁(yè)面之間跳轉(zhuǎn)功能的小結(jié)

    在兩個(gè)ASP.NET頁(yè)面之間傳遞值
    2013-03-03
  • c#格式化數(shù)字的方法

    c#格式化數(shù)字的方法

    這篇文章主要介紹了c#格式化數(shù)字的方法,涉及C#針對(duì)數(shù)字轉(zhuǎn)化的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C#中Invoke和BeginInvoke實(shí)際應(yīng)用詳解

    C#中Invoke和BeginInvoke實(shí)際應(yīng)用詳解

    這篇文章主要給大家介紹了關(guān)于C#中Invoke和BeginInvoke實(shí)際應(yīng)用的相關(guān)資料,Invoke是對(duì)象方法,BeginInvoke是靜態(tài)方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • 基于Unity制作一個(gè)簡(jiǎn)易的計(jì)算器

    基于Unity制作一個(gè)簡(jiǎn)易的計(jì)算器

    今天主要和大家分享如何使用Unity制作計(jì)算器,難度中等,可以用來(lái)學(xué)習(xí),或者當(dāng)成其他項(xiàng)目的小組件導(dǎo)入。當(dāng)然,也可以導(dǎo)出來(lái),發(fā)布到網(wǎng)頁(yè)端,來(lái)做一個(gè)嵌入式工具也可以。感興趣的可以跟隨小編學(xué)習(xí)一下
    2022-03-03

最新評(píng)論