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