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的页数》

发布了42 篇原创文章 · 获赞 15 · 访问量 9771

猜你喜欢

转载自blog.csdn.net/weixin_40326608/article/details/102659935