c#实现ppt,word,excel,txt,jpg文件转pdf功能

安装LibreOffice 7.2插件

使用的开发工具是VS2022,.NET6.0的项目框架。要实现office文件转pdf要先安装一个好用的插件。
1.到官网下载: LibreOffice下载地址
2.安装,这里我选择的是企业版
c#实现ppt,word,excel,txt,jpg文件转pdf功能_第1张图片
安装后文件目录结构:
c#实现ppt,word,excel,txt,jpg文件转pdf功能_第2张图片

3.配置环境变量,配置完成后可以使用cmd命令直接转换office文件为pdf文件,无须打开桌面的LibreOffice客户程序。
配置路径为,桌面上的电脑图标,右键“属性”-“高级系统设置”-“高级”-“环境变量”.
在Path变量下设置增加环境变量值:
我这里安装在f盘,设置如下。
F:\SoftWare\libreOffice\program
这里设置了两个地方的Path变量,一个是用户变量,一个是系统变量。
设置完成就可以来使用cmd命令检验下是否生效了。

使用cmd命令提示工具实现文件转换

1.快捷键win+R:打开cmd命令提示工具。
c#实现ppt,word,excel,txt,jpg文件转pdf功能_第3张图片
2.输入命令 “ cmd /c soffice --headless --convert-to pdf F:/xx文件夹/测试文件.doc --outdir F:/xx文件夹/ ”,前面文件地址是绝对地址代表要转换生成的文件,后面地址是要生成到目标文件夹。按下Enter执行命令,在目标文件夹下面即会生成一个“测试文件.pdf”的新文件。这里验证了插件可以正常使用。

ps:当然有的电脑,不能识别这个soffice,可以使用soffice.exe来替换。就可以找到

c#实现ppt,word,excel,txt,jpg文件转pdf功能_第4张图片

在c#代码中调用cmd命令,程序自动执行转换文件

下面是执行cmd命令的代码片段

        /// 
        /// office文件转pdf
        /// 
        /// 输入文件夹地址
        /// 输出文件地址
        /// 
        /// 
        [HttpGet("OfficeToPdf")]
        public bool OfficeToPdf(string officePath = "F:/测试文件夹/机构图号命名规则.doc", string outPutPath = "F:/测试文件夹/")
        {
            var result = false;
            try
            {
                //拼接cmd命令,此命令执行前要确保环境变量有值
                string strCMD = $" soffice --headless --convert-to pdf  {officePath} --outdir  {outPutPath}";
                //调用cmd命令提示符工具

                using (var process = new Process())
                {
                    process.StartInfo.FileName = "cmd.exe";
                    //cmd / c xxxx:是执行完dir命令后关闭命令窗口;cmd / k xxxx:是执行完dir命令后不关闭命令窗口。
                    process.StartInfo.Arguments = "/c " + strCMD; // "soffice --headless --convert-to pdf  F:/测试文件夹/机构图号命名规则.doc --outdir  F:/测试文件夹/";
                    process.StartInfo.UseShellExecute = false;   //是否使用操作系统shell启动 
                    process.StartInfo.CreateNoWindow = true;   //是否在新窗口中启动该进程的值 (不显示程序窗口)
                    //process.StartInfo.WorkingDirectory = @"C:/Windows/system32";    // 重定向错误输出  
                    process.Start();
                    process.WaitForExit();  //等待程序执行完退出进程
                    process.Close();
                }

                //查询文件是否存在,存在则返回ture
                var fileName = Path.GetFileName(officePath);
                if (fileName == "" || string.IsNullOrEmpty(fileName)) { return result; }

                var newFileName = Path.GetFileNameWithoutExtension(fileName) + ".pdf";
                newFileName = Path.Combine("F:/测试文件夹/", newFileName);
                if (System.IO.File.Exists(newFileName))
                {
                    result = true;
                }

                return result;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

运行此段代码,可以发现同样生成了一个”机构图号命名规则.pdf“文件。

发布到IIS服务器

发布到IIS后发现执行完接口方法,界面就一直加载中,也没有文件生成。并不能实现生成文件的效果。
c#实现ppt,word,excel,txt,jpg文件转pdf功能_第5张图片
解决方法:
网站发布的”应用程序池“-”高级设置“
1.启用32位应用程序设置为True
2.托管管道模式为经典 Classic
3.进程模型中-”标识“-默认内置账户是”ApplicationPoolIdentity“改为”LocalSystem“。
接口重新调用后,就可以生成新的pdf文件了。

至此一个完整的方法就完结了。
参考了好几个博主的文章,其中最有灵感的是这个博主的文章。
【libreoffice】libreoffice实现office转pdf、html、jpg等格式数据

你可能感兴趣的:(文件格式转换,c#,asp.net)