CSharp中调用WPS实现文档转PDF

调用COM接口(推荐)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.IO;
using Word;

namespace WpsToPdf
{
class Wps2Pdf : IDisposable
{
readonly dynamic _wps;

public Wps2Pdf()
{
Type type = Type.GetTypeFromProgID("KWps.Application");
_wps = Activator.CreateInstance(type);
}

public void ToPdf(string wpsFilename, string pdfFilename = null)
{
if (wpsFilename == null)
{
throw new ArgumentNullException(@"wpsFilename");
}

if (pdfFilename == null)
{
pdfFilename = Path.ChangeExtension(wpsFilename, "pdf");
}

Console.WriteLine($@"正在转换 [{wpsFilename}]-> [{pdfFilename}]");

dynamic doc = _wps.Documents.Open(wpsFilename, Visible: false);
doc.ExportAsFixedFormat(pdfFilename, WdExportFormat.wdExportFormatPDF);
doc.Close();
Console.WriteLine($@"转换完成 [{pdfFilename}]");
}

public void Dispose()
{
if (_wps != null)
{
_wps.Quit();
}
}
}
}

调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Task.Run(
() =>
{
Wps2Pdf wps2Pdf = null;
try
{
wps2Pdf = new Wps2Pdf();
wps2Pdf.ToPdf(@"D:\Tools\Docs\01.docx", @"D:\Tools\Docs\01.pdf");
}
finally
{
// 不管转换是否成功都退出WPS
if (wps2Pdf != null)
{
wps2Pdf.Dispose();
}
}
}
);

调用WPS的DLL

在安装的wps下复制 wpsapi.dllwppapi.dlletapi.dll,这三个文件可以操作wordpowerpointexcel

这里只操作Word,所以只引用wpsapi.dll就行。

注意

wpsapi.dll并不需要生成到打包目录,所以并不用担心这几个DLL比较大,这种方式本质还是使用COM实现的。

点击Word引用,属性-》嵌入互操作类型-》false

生成事件=>生成前事件命令行:

1
xcopy /Y /d $(ProjectDir)\Libs\Interop.Office.dll $(TargetDir)

添加方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static bool ConvertToPdf(string sourcePath, string targetPath)
{
Word.ApplicationClass app = new Word.ApplicationClass();
Word.Document doc = null;
try
{
Console.WriteLine($@"正在转换 [{sourcePath}]-> [{targetPath}]");
doc = app.Documents.Open(sourcePath, Visible: false);
doc.ExportAsFixedFormat(targetPath, Word.WdExportFormat.wdExportFormatPDF);
Console.WriteLine($@"转换完成 [{targetPath}]");
}
catch (Exception)
{
return false;
}
finally
{
if (doc != null) doc.Close();
app.Quit();
}

return true;
}

调用

1
2
3
4
5
6
Task.Run(
() =>
{
ConvertToPdf(@"D:\Tools\Docs\01.docx", @"D:\Tools\Docs\01.pdf");
}
);

调用EXE

https://github.com/cognidox/OfficeToPDF

这个只支持微软的Office。

下载后执行

1
OfficeToPDF.exe "D:\Tools\Docs\01.docx" "D:\Tools\Docs\01.pdf"