C#采取OpenXml給word外面拔出圖片。本站提示廣大學習愛好者:(C#采取OpenXml給word外面拔出圖片)文章只能為提供參考,不一定能成為您想要的結果。以下是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<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)));
}
}
}
本文示例運轉後果以下圖所示:

願望本文所述對年夜家的C#法式設計有所贊助。