CSharp中调用WPS实现文档转PDF

2023-04-27 15:18:51 浏览数 (1)

调用WPS的DLL

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

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

注意

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

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

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

代码语言:javascript复制
xcopy /Y /d $(ProjectDir)LibsInterop.Office.dll $(TargetDir)

添加方法

代码语言:javascript复制
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;
}

调用

代码语言:javascript复制
Task.Run(
    () =>
    {
        ConvertToPdf(@"D:ToolsDocs1.docx", @"D:ToolsDocs1.pdf");
    }
);

调用COM接口

代码语言:javascript复制
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();
            }
        }
    }
}

调用

代码语言:javascript复制
Task.Run(
    () =>
    {
        Wps2Pdf wps2Pdf = null;
        try
        {
            wps2Pdf = new Wps2Pdf();
            wps2Pdf.ToPdf(@"D:ToolsDocs1.docx", @"D:ToolsDocs1.pdf");
        }
        finally
        {
            // 不管转换是否成功都退出WPS
            if (wps2Pdf != null)
            {
                wps2Pdf.Dispose();
            }
        }
    }
)
;

调用EXE

https://github.com/cognidox/OfficeToPDF

这个只支持微软的Office。

下载后执行

代码语言:javascript复制
OfficeToPDF.exe "D:ToolsDocs1.docx" "D:ToolsDocs1.pdf"

0 人点赞