调用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 { if (wps2Pdf != null) { wps2Pdf.Dispose(); } } } );
|
调用WPS的DLL
在安装的wps下复制 wpsapi.dll,wppapi.dll,etapi.dll,这三个文件可以操作word,powerpoint,excel;
这里只操作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"
|