C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)2 -獲取Word的頁數
1.前言
在我前一篇博文《C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)1 -環境準備及創建項目》中,我介紹瞭如何爲環境Office的DCOM組件,如何安裝.NET Core 3.0 SDK,以及如何通過標準模板創建ASP.NET Core的Web API項目等。
而本篇博文,將繼續介紹如何編寫業務代碼,實現獲取Word的頁數。
2.爲項目添加引用
此項目會用到五個包:
- Microsoft.Office.Interop.Word:用於操作Word
- Microsoft.Office.Interop.Excel:用於操作Excel
- Microsoft.Office.Interop.PowerPoint:用於操作PPT
- MicrosoftOfficeCore:Office核心支持
- iTextSharp:用於操作PDF
在“解決方案資源管理器”中,選擇“依賴項”,然後右鍵,選擇“添加引用”,或者“管理NuGet程序包”,這裏我選擇NuGet,如下圖:
然後直接搜索並下載即可,如下圖:
依次添加後,可以在項目結構的依賴項中,看到新安裝的程序包,如下圖:
3.獲取Word頁數的代碼
獲取Word頁數的業務代碼,我單獨封裝成一個Service,其提供如下三種方法:
- 打開Word,讀取頁數;
- 關閉Word,退出Word程序;
- 殺掉Word的死進程;
爲項目新添加一個文件夾名爲Service,然後添加WordReader.cs的類,如下圖:
代碼如下:
using System;
using System.Reflection;
namespace DocReaderWebAPIDemo.Service
{
public class WordReader
{
/// <summary>
/// 獲取Word頁數的方法
/// </summary>
/// <param name="path">文件的完整路徑</param>
/// <returns>頁數</returns>
public static int getWordPageNum(String path)
{
int pageNum = 0;
Microsoft.Office.Interop.Word.Application myWordApplication = null;
Microsoft.Office.Interop.Word.Document myWordDocument = null;
try
{
//啓動Word程序
myWordApplication = new Microsoft.Office.Interop.Word.Application();
object missing = Missing.Value;
//打開文件
myWordDocument = myWordApplication.Documents.Open(
path, missing, missing, missing,
missing, missing, missing, missing,
missing, missing, missing, missing,
missing, missing, missing, missing);
//文件頁數
pageNum = myWordDocument.ComputeStatistics(Microsoft.Office.Interop.Word.WdStatistic.wdStatisticPages, ref missing);
}
catch (Exception e)
{
throw e;
}
finally
{
//關閉文件,退出Word程序
CloseWord(myWordApplication, myWordDocument);
}
return pageNum;
}
/// <summary>
/// 關閉Word的方法
/// </summary>
public static void CloseWord(Microsoft.Office.Interop.Word.Application wordApplication, Microsoft.Office.Interop.Word.Document wordDocument)
{
if (wordDocument != null)
{
wordDocument.Close(false, Type.Missing, Type.Missing);
}
if (wordApplication != null)
{
wordApplication.Quit(false, Type.Missing, Type.Missing);
}
GC.Collect();
KillProcess();
}
/// <summary>
/// 殺掉Word的死進程
/// </summary>
private static void KillProcess()
{
//Word.Application跟Excel不一樣,獲取不到Hwnd,所以直接通過進程名稱殺掉所有死進程
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("WINWORD"); //得到所有Word進程
foreach (System.Diagnostics.Process p in ps)
{
p.Kill(); //關閉進程
}
}
}
}
4.後記
下一篇:
《C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)3 -獲取PPT和PDF的頁數》