èæ¯ï¼å åæOfficeOnlineçæå»ºï¼æä»¥æå»ºå®ä¹åé¢å¯¼åæåºè¦æ±å¦ï¼è¯´ï¼å°xuï¼ä½ â¦â¦ä½ æè¿æä»¶ç缩ç¥å¾ç»ææ´åºæ¥å§ãç»è¿æåæ¶ä¹ è¿çç ç©¶ï¼è¿ä¸ªé®é¢è·¨äºä¸ªå¹´ï¼éç2020ç«æ çåå±ï¼è¿è¿äºä¸¤ä¸ªæï¼æ¾äºä¸ªå¤§é¿åï¼ãä½ç»ï¼è§£å³äºï¼å¿å¤´å¤§æ£ä¹ã
Â
å¯~å·´é~

Â
Â
Â
好å¦ï¼æ£ææ£å¿å «ç»å¼å§äºï¼ç°å¨è¿éæä¸¤ç§è§£å³æ¹æ¡ï¼ä¸å¬æç»ç»è¯´æ¥~
Â
ä½¿ç¨æ®éæ¹æ³æªåæä»¶å¾ç
ä¼ç¹ï¼â æææä»¶é½å¯ä»¥è¢«æªåï¼
缺ç¹ï¼â é¤PPT夿ªåç齿¯æä»¶ç徿 ï¼
 ãã ⡠æªåå¾çæ¯è¾æ¨¡ç³ï¼
 ãã  ⢠æªåå¾çæé»è¾¹ï¼
å¦ä¸å¾ï¼
Â
Â
Â
代ç
[Flags]
public enum ThumbnailOptions
{
None = 0x00,
BiggerSizeOk = 0x01,
InMemoryOnly = 0x02,
IconOnly = 0x04,
ThumbnailOnly = 0x08,
InCacheOnly = 0x10,
}
public class WindowsThumbnailProvider
{
private const string IShellItem2Guid = "7E9FB0D3-919F-4307-AB2E-9B1860310C93";
[DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
internal static extern int SHCreateItemFromParsingName(
[MarshalAs(UnmanagedType.LPWStr)] string path,
// The following parameter is not used - binding context.
IntPtr pbc,
ref Guid riid,
[MarshalAs(UnmanagedType.Interface)] out IShellItem shellItem);
[DllImport("gdi32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
internal static extern bool DeleteObject(IntPtr hObject);
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe")]
internal interface IShellItem
{
void BindToHandler(IntPtr pbc,
[MarshalAs(UnmanagedType.LPStruct)]Guid bhid,
[MarshalAs(UnmanagedType.LPStruct)]Guid riid,
out IntPtr ppv);
void GetParent(out IShellItem ppsi);
void GetDisplayName(SIGDN sigdnName, out IntPtr ppszName);
void GetAttributes(uint sfgaoMask, out uint psfgaoAttribs);
void Compare(IShellItem psi, uint hint, out int piOrder);
};
internal enum SIGDN : uint
{
NORMALDISPLAY = 0,
PARENTRELATIVEPARSING = 0x80018001,
PARENTRELATIVEFORADDRESSBAR = 0x8001c001,
DESKTOPABSOLUTEPARSING = 0x80028000,
PARENTRELATIVEEDITING = 0x80031001,
DESKTOPABSOLUTEEDITING = 0x8004c000,
FILESYSPATH = 0x80058000,
URL = 0x80068000
}
internal enum HResult
{
Ok = 0x0000,
False = 0x0001,
InvalidArguments = unchecked((int)0x80070057),
OutOfMemory = unchecked((int)0x8007000E),
NoInterface = unchecked((int)0x80004002),
Fail = unchecked((int)0x80004005),
ElementNotFound = unchecked((int)0x80070490),
TypeElementNotFound = unchecked((int)0x8002802B),
NoObject = unchecked((int)0x800401E5),
Win32ErrorCanceled = 1223,
Canceled = unchecked((int)0x800704C7),
ResourceInUse = unchecked((int)0x800700AA),
AccessDenied = unchecked((int)0x80030005)
}
[ComImportAttribute()]
[GuidAttribute("bcc18b79-ba16-442f-80c4-8a59c30c463b")]
[InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
internal interface IShellItemImageFactory
{
[PreserveSig]
HResult GetImage(
[In, MarshalAs(UnmanagedType.Struct)] NativeSize size,
[In] ThumbnailOptions flags,
[Out] out IntPtr phbm);
}
[StructLayout(LayoutKind.Sequential)]
internal struct NativeSize
{
private int width;
private int height;
public int Width { set { width = value; } }
public int Height { set { height = value; } }
};
[StructLayout(LayoutKind.Sequential)]
public struct RGBQUAD
{
public byte rgbBlue;
public byte rgbGreen;
public byte rgbRed;
public byte rgbReserved;
}
/// <summary>
/// è·å缩ç¥å¾
/// </summary>
/// <param name="filePath">æä»¶æå¨ç»å¯¹è·¯å¾</param>
/// <param name="width">å¾ç宽</param>
/// <param name="height">å¾çé«</param>
/// <param name="options"></param>
public static void GetThumbnail(string filePath, string imgFullPath, int width, int height, ThumbnailOptions options)
{
IntPtr hBitmap = GetHBitmap(Path.GetFullPath(filePath), width, height, options);
try
{
SaveBitmap(hBitmap, imgFullPath);
}
catch
{
throw;
}
finally
{
DeleteObject(hBitmap);
}
}
/// <summary>
/// å°Bitmapè½¬æ¢æå¾çï¼å¹¶è¿å缩ç¥å¾ç¸å¯¹è·¯å¾
/// </summary>
/// <param name="hBitmap"></param>
/// <param name="fileName">æä»¶åç§°</param>
/// <returns></returns>
public static void SaveBitmap(IntPtr hBitmap, string imgFullPath)
{
try
{
Bitmap bmp = GetBitmapFromHBitmap(hBitmap);
bmp.Save(imgFullPath, ImageFormat.Jpeg);
}
catch (IOException ex)
{
throw ex;
}
}
/// <summary>
/// å°HBitmapè½¬æ¢æBitmap
/// </summary>
/// <param name="nativeHBitmap"></param>
/// <returns></returns>
public static Bitmap GetBitmapFromHBitmap(IntPtr nativeHBitmap)
{
Bitmap bmp = Bitmap.FromHbitmap(nativeHBitmap);
if (Bitmap.GetPixelFormatSize(bmp.PixelFormat) < 32)
return bmp;
return CreateAlphaBitmap(bmp, PixelFormat.Format32bppArgb);
}
/// <summary>
/// å建å¾ç
/// </summary>
/// <param name="srcBitmap"></param>
/// <param name="targetPixelFormat"></param>
/// <returns></returns>
public static Bitmap CreateAlphaBitmap(Bitmap srcBitmap, PixelFormat targetPixelFormat)
{
Bitmap result = new Bitmap(srcBitmap.Width, srcBitmap.Height, targetPixelFormat);
Rectangle bmpBounds = new Rectangle(0, 0, srcBitmap.Width, srcBitmap.Height);
BitmapData srcData = srcBitmap.LockBits(bmpBounds, ImageLockMode.ReadOnly, srcBitmap.PixelFormat);
bool isAlplaBitmap = false;
try
{
for (int y = 0; y <= srcData.Height - 1; y++)
{
for (int x = 0; x <= srcData.Width - 1; x++)
{
Color pixelColor = Color.FromArgb(
Marshal.ReadInt32(srcData.Scan0, (srcData.Stride * y) + (4 * x)));
if (pixelColor.A > 0 & pixelColor.A < 255)
{
isAlplaBitmap = true;
}
result.SetPixel(x, y, pixelColor);
}
}
}
finally
{
srcBitmap.UnlockBits(srcData);
}
if (isAlplaBitmap)
{
return result;
}
else
{
return srcBitmap;
}
}
/// <summary>
/// GetHBitmap
/// </summary>
/// <param name="fileName"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="options"></param>
/// <returns></returns>
private static IntPtr GetHBitmap(string fileName, int width, int height, ThumbnailOptions options)
{
IShellItem nativeShellItem;
Guid shellItem2Guid = new Guid(IShellItem2Guid);
int retCode = SHCreateItemFromParsingName(fileName, IntPtr.Zero, ref shellItem2Guid, out nativeShellItem);
if (retCode != 0)
throw Marshal.GetExceptionForHR(retCode);
NativeSize nativeSize = new NativeSize();
nativeSize.Width = width;
nativeSize.Height = height;
IntPtr hBitmap;
HResult hr = ((IShellItemImageFactory)nativeShellItem).GetImage(nativeSize, options, out hBitmap);
Marshal.ReleaseComObject(nativeShellItem);
if (hr == HResult.Ok) return hBitmap;
throw Marshal.GetExceptionForHR((int)hr);
}
}
Â
å¦ä½ä½¿ç¨
//string filePath = "E:\\File\\æå°±æ¯å¾å¼å¿.txt";//æä»¶æå¨ä½ç½®
//string filePath = "E:\\File\\ææç¹ä¸å¼å¿.xlsx";//æä»¶æå¨ä½ç½®
//string filePath = "E:\\File\\ä½ çèµ·æ¥å¾å¥½å.docx";//æä»¶æå¨ä½ç½®
string filePath = "E:\\File\\é¡¹ç®æµè¯ä½¿ç¨æä»¶.pptx";//æä»¶æå¨ä½ç½®
//èªå®ä¹å¾çè·¯å¾
string imgName = Path.GetFileName(filePath).Split(\'.\')[0];
string direcName = Path.GetDirectoryName(filePath);
string imgFullPath = $"{direcName}\\{imgName}.jpg";//éç»ï¼è·åå¾çåæ¾ä½ç½®
int pic_size = 1000;
WindowsThumbnailProvider.GetThumbnail(filePath, imgFullPath, pic_size, pic_size, ThumbnailOptions.None);
Â
Â
使ç¨Asposeæªåæä»¶å¾ç
注æï¼Asposeèªèº«å¯ä»¥æªåæææä»¶ï¼ä½æè¿é设置çç®ååªè½æªårarãpptãexcelãwordè¿åç§æ ¼å¼ï¼å ¶ä»æ ¼å¼å°±ä¼æ¥éãä½ å¦æéè¦æ´å¤çæä»¶æ ¼å¼æªå¾ï¼å°±åè¿è¡ç ç©¶å°±é以ã该dllä¸çæ¹æ³å¯ä»¥æªåå¤å¼ å¾çï¼ä¸ä¸å®å°±æ¯æä»¶é¦é¡µãç¬è¯~
Â
Â
Â
廿°´å°
å¦ææ²¡æç ´è§£ç ï¼ç´æ¥ä½¿ç¨asposeï¼æå°åºæ¥çç §çå°±ä¼ææ°´å°ãå¦ä¸å¾ï¼
Â
Â
 æä»¥ä½ éè¦å¨App.configä¸ï¼æ·»å ä¸ä¸ªèç¹ï¼å¦ä¸ï¼
ï¼æ³¨ï¼web项ç®å¯¹åºçæ¯web.config;æ§å¶å°é¡¹ç®å¯¹åºçæ¯app.config,ä¸è¿ä¸é¢èç¹å¨ä¸¤ç§æä»¶éé¢é½éç¨)
<add key="AsposeKey" value="PExpY2Vuc2U+DQogIDxEYXRhPg0KICAgIDxMaWNlbnNlZFRvPkFzcG9zZSBTY290bGFuZCBUZWFtPC9MaWNlbnNlZFRvPg0KICAgIDxFbWFpbFRvPmJpbGx5Lmx1bmRpZUBhc3Bvc2UuY29tPC9FbWFpbFRvPg0KICAgIDxMaWNlbnNlVHlwZT5EZXZlbG9wZXIgT0VNPC9MaWNlbnNlVHlwZT4NCiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+DQogICAgPE9yZGVySUQ+MTQwNDA4MDUyMzI0PC9PcmRlcklEPg0KICAgIDxVc2VySUQ+OTQyMzY8L1VzZXJJRD4NCiAgICA8T0VNPlRoaXMgaXMgYSByZWRpc3RyaWJ1dGFibGUgbGljZW5zZTwvT0VNPg0KICAgIDxQcm9kdWN0cz4NCiAgICAgIDxQcm9kdWN0PkFzcG9zZS5Ub3RhbCBmb3IgLk5FVDwvUHJvZHVjdD4NCiAgICA8L1Byb2R1Y3RzPg0KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4NCiAgICA8U2VyaWFsTnVtYmVyPjlhNTk1NDdjLTQxZjAtNDI4Yi1iYTcyLTdjNDM2OGYxNTFkNzwvU2VyaWFsTnVtYmVyPg0KICAgIDxTdWJzY3JpcHRpb25FeHBpcnk+MjAxNTEyMzE8L1N1YnNjcmlwdGlvbkV4cGlyeT4NCiAgICA8TGljZW5zZVZlcnNpb24+My4wPC9MaWNlbnNlVmVyc2lvbj4NCiAgICA8TGljZW5zZUluc3RydWN0aW9ucz5odHRwOi8vd3d3LmFzcG9zZS5jb20vY29ycG9yYXRlL3B1cmNoYXNlL2xpY2Vuc2UtaW5zdHJ1Y3Rpb25zLmFzcHg8L0xpY2Vuc2VJbnN0cnVjdGlvbnM+DQogIDwvRGF0YT4NCiAgPFNpZ25hdHVyZT5GTzNQSHNibGdEdDhGNTlzTVQxbDFhbXlpOXFrMlY2RThkUWtJUDdMZFRKU3hEaWJORUZ1MXpPaW5RYnFGZkt2L3J1dHR2Y3hvUk9rYzF0VWUwRHRPNmNQMVpmNkowVmVtZ1NZOGkvTFpFQ1RHc3pScUpWUVJaME1vVm5CaHVQQUprNWVsaTdmaFZjRjhoV2QzRTRYUTNMemZtSkN1YWoyTkV0ZVJpNUhyZmc9PC9TaWduYXR1cmU+DQo8L0xpY2Vuc2U+" />
注ï¼ä½¿ç¨æ¤ç æ¯å¯¹asposeå个dllççæ¬æè¦æ±çï¼éè¦å¨2015å¹´12æ30æ¥ä¹åççæ¬ï¼æå¯ä»¥ä½¿ç¨ãæä»¥ä½ å¯ä»¥å»nugetå®ç½ï¼https://www.nuget.org/packages?q=Aspose.Wordsï¼æ¥æ¾ç¸åºæ¥æå¯¹åºççæ¬ãå¦æä½ æï¼ä½ æï¼æâ¦â¦ï¼ä¸ç¨æ å¿ï¼æç»ä½ æ¾å¥½äºã
Â
åç§° | çæ¬ | æ¥æ |
Aspose.Words | 15.12.0 | 2015/12/26 |
Aspose.Excel | 8.6.3 | 2015/12/23 |
Aspose.Slides | 15.10.0.0 | 2015/12/10 |
Aspose.Pdf | 11.1.1.0 | 2015/12/30 |
Â
代ç
详è§ä¸é¢ç龿¥ä¸çè§£å³æ¹æ¡å§ï¼ä¸æ³å¤å¶äºï¼å®å¨æ¯å¤ªå¤å¦ã
å¦ä½ä½¿ç¨
//string filePath = "E:\\File\\æå°±æ¯å¾å¼å¿.txt";//æä»¶æå¨ä½ç½®
//string filePath = "E:\\File\\ææç¹ä¸å¼å¿.xlsx";//æä»¶æå¨ä½ç½®
//string filePath = "E:\\File\\ä½ çèµ·æ¥å¾å¥½å.docx";//æä»¶æå¨ä½ç½®
string filePath = "E:\\File\\é¡¹ç®æµè¯ä½¿ç¨æä»¶.pptx";//æä»¶æå¨ä½ç½®
//èªå®ä¹å¾çè·¯å¾
string imgName = Path.GetFileName(filePath).Split(\'.\')[0];
string direcName = Path.GetDirectoryName(filePath);
string imgFullPath = $"{direcName}\\{imgName}.jpg";//éç»ï¼è·åå¾çåæ¾ä½ç½®
string extendName = Path.GetExtension(filePath);
//è¿éè¿ç¨çæ¯ç®å工忍¡å¼
ImageConverterFactory factory = new ImageConverterFactory();
var imageConvert = factory.CreateImageConverter(extendName);
imageConvert.ConvertToImage(filePath, imgFullPath);
Â
Â
代ç ä¸è½½
ä¸¤ç§æ¹æ³å¨åä¸ä¸ªè§£å³æ¹æ¡é
 ç¾åº¦äºçï¼é¾æ¥ï¼https://pan.baidu.com/s/10edFyh1W_6zYjcTVmXFGEQ  æåç ï¼1l4tÂ
Â
æè°¢å¤§ä½¬ççå¿å享ï¼https://www.cnblogs.com/zhuweisky/p/4774803.html
Â
Â
æä»ä¹ä¸æç½çå¯éæ¶è¯è®ºï¼æçå°å°±ä¼åå¤å¦~
Â
çå°è¿äºï¼å°ä¸»å¤§äººï¼æçä½é¦ï¼ç¹ä¸ªèµç½~
Â