安装LibreOffice 7.2插件
使用的开发工具是VS,.NET6.0的项目框架。要实现office文件转pdf要先安装一个好用的插件。
1.到官网下载: LibreOffice下载地址
2.安装,这里我选择的是企业版
安装后文件目录结构:
3.配置环境变量,配置完成后可以使用cmd命令直接转换office文件为pdf文件,无须打开桌面的LibreOffice客户程序。
配置路径为,桌面上的电脑图标,右键“属性”-“高级系统设置”-“高级”-“环境变量”.
在Path变量下设置增加环境变量值:
我这里安装在f盘,设置如下。
F:\SoftWare\libreOffice\program
这里设置了两个地方的Path变量,一个是用户变量,一个是系统变量。
设置完成就可以来使用cmd命令检验下是否生效了。
使用cmd命令提示工具实现文件转换
1.快捷键win+R:打开cmd命令提示工具。
2.输入命令 “cmd /c soffice --headless --convert-to pdf F:/xx文件夹/测试文件.doc --outdir F:/xx文件夹/”,前面文件地址是绝对地址代表要转换生成的文件,后面地址是要生成到目标文件夹。按下Enter执行命令,在目标文件夹下面即会生成一个“测试文件.pdf”的新文件。这里验证了插件可以正常使用。
ps:当然有的电脑,不能识别这个soffice,可以使用soffice.exe来替换。就可以找到
在c#代码中调用cmd命令,程序自动执行转换文件
下面是执行cmd命令的代码片段
/// <summary>/// office文件转pdf/// </summary>/// <param name="officePath">输入文件夹地址</param>/// <param name="outPutPath">输出文件地址</param>/// <returns></returns>/// <exception cref="Exception"></exception>[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();}//查询文件是否存在,存在则返回turevar fileName = Path.GetFileName(officePath);if (fileName == "" || string.IsNullOrEmpty(fileName)) {return result; }var newFileName = Path.GetFileNameWithoutExtension(fileName) + ".pdf";newFileName = bine("F:/测试文件夹/", newFileName);if (System.IO.File.Exists(newFileName)){result = true;}return result;}catch (Exception ex){throw new Exception(ex.Message);}}
运行此段代码,可以发现同样生成了一个”机构图号命名规则.pdf“文件。
发布到IIS服务器
发布到IIS后发现执行完接口方法,界面就一直加载中,也没有文件生成。并不能实现生成文件的效果。
解决方法:
网站发布的”应用程序池“-”高级设置“
1.启用32位应用程序设置为True
2.托管管道模式为经典 Classic
3.进程模型中-”标识“-默认内置账户是”ApplicationPoolIdentity“改为”LocalSystem“。
接口重新调用后,就可以生成新的pdf文件了。
至此一个完整的方法就完结了。
参考了好几个博主的文章,其中最有灵感的是这个博主的文章。
【libreoffice】libreoffice实现office转pdf、html、jpg等格式数据