using System.Collections.Generic;
using System.Windows.Forms;
using System.Drawing.Imaging;
//記得要Reference Microsoft Word 1*.0 Object Library
using Microsoft.Office.Interop.Word;
static void Main(string[] args)
ApplicationClass wordApp = new ApplicationClass();
object missing = System.Reflection.Missing.Value;
object fileName = args[0];
int w = int.Parse(args[1]);
int h = int.Parse(args[2]);
if (!File.Exists(fileName.ToString())) {
Console.WriteLine("Can't find file[" + fileName + "]");
//Convert to full path, or Word can't find it
//Path.GetFullPath可以將相對路徑轉成絕對路徑
fileName = Path.GetFullPath(fileName.ToString());
Console.WriteLine("File [" + fileName + "] opening...");
//用C#操作Word DOM的小缺點,沒用到的參數要傳入ref missing
Document doc = wordApp.Documents.Open(
ref fileName, ref missing, ref readOnly, ref missing,
ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref isVisible,
ref missing, ref missing, ref missing, ref missing);
if (doc.InlineShapes.Count > 0)
InlineShape shp = doc.InlineShapes[1];
//Google上很多文章都用Clipboard把InlineShape轉成Image
MemoryStream ms = new MemoryStream(
(byte[])shp.Range.EnhMetaFileBits);
Metafile mf = new Metafile(ms);
double ratioW = Convert.ToDouble(mf.Width) / w;
double ratioH = Convert.ToDouble(mf.Height) / h;
if (ratioW > 1 || ratioH > 1)
h * (Convert.ToDouble(mf.Width) / mf.Height));
w * (Convert.ToDouble(mf.Height) / mf.Width));
w = mf.Width; h = mf.Height;
Path.ChangeExtension(fileName.ToString(), "jpg");
//利用Image.GetThumbnailImage產生縮圖
Image thumbnail = mf.GetThumbnailImage(w, h,
new Image.GetThumbnailImageAbort(ThumbnailCallback),
thumbnail.Save(imgFileName);
Console.WriteLine("Image [" + imgFileName + "] saved!");
doc.Close(ref missing, ref missing, ref missing);
Console.WriteLine("Error:" + ex.Message);
wordApp.Quit(ref missing, ref missing, ref missing);
public static bool ThumbnailCallback()
注意: 記得要參考Word的COM+ Library物件,版本依你所裝的Word版本而定。Word 12.0是Word 2007,Word 2003則是Word 11.0。