C#編寫ASP.NET Core的Web API並部署到IIS上的詳細教程(API用於準確獲取Word/Excel/PPT/PDF的頁數)2 -獲取Word的頁數

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的頁數》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章