using Microsoft.Extensions.Configuration; using RestSharp; using SharpCompress.Common; using System.Diagnostics; namespace IRaCIS.Core.Application.Helper; public class FileConvertHelper { /// /// 镜像里面打入libreoffice 的方案 /// /// /// static public void ConvertWordToPdf(string inputWordFilePath, string outputPdfDir) { // 设置 libreoffice 命令行参数 string arguments = $"--headless --invisible --convert-to pdf \"{inputWordFilePath}\" --outdir \"{outputPdfDir}\""; // 启动 libreoffice 进程 using (Process process = new Process()) { process.StartInfo.FileName = "libreoffice"; process.StartInfo.Arguments = arguments; process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; process.StartInfo.RedirectStandardOutput = true; process.StartInfo.RedirectStandardError = true; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.Start(); // 等待进程结束 process.WaitForExit(); } } /// /// 返回文件字节数组 /// File.WriteAllBytes(outputFilePath, response.RawBytes); 直接将字节数组写入到本地某个路径 /// var stream = new MemoryStream(response.RawBytes); 直接变为内存流,给其他程序用也可以 /// /// static public async Task ThirdStirling_PDFWordToPdfAsync(string filePath) { var apiUrl = GetApiUrl(); var client = new RestClient(apiUrl); var request = new RestRequest(apiUrl, Method.Post); request.AddHeader("accept", "*/*"); // 直接上传文件,无需生成字节数组 request.AddFile("fileInput", filePath); return await GetPDFByteArrayAsync(client, request); } static public async Task ThirdStirling_PDFWordToPdfAsync(byte[] fileBytes, string fileName) { var apiUrl = GetApiUrl(); var client = new RestClient(apiUrl); var request = new RestRequest(apiUrl, Method.Post); request.AddHeader("accept", "*/*"); // 添加文件流到请求 request.AddFile("fileInput", fileBytes, fileName); return await GetPDFByteArrayAsync(client, request); } static private async Task GetPDFByteArrayAsync(RestClient client, RestRequest request) { try { // 发送请求并获取响应 var response = await client.ExecuteAsync(request); // 检查请求是否成功 if (response.IsSuccessful) { return response.RawBytes ?? new byte[] { }; } else { Console.WriteLine($"上传失败,错误代码: {response.StatusCode}, 错误消息: {response.ErrorMessage}"); return Array.Empty(); } } catch (Exception ex) { Console.WriteLine("发生异常: " + ex.Message); return Array.Empty(); } } static private string GetApiUrl() { var enviromentName = Environment.GetEnvironmentVariables()["ASPNETCORE_ENVIRONMENT"]?.ToString(); var configuration = new ConfigurationBuilder().AddJsonFile($"appsettings.{enviromentName}.json", false, false).Build(); // 手动绑定配置 var appSettings = new ServiceVerifyConfigOption(); configuration.GetSection("BasicSystemConfig").Bind(appSettings); return appSettings.ThirdPdfUrl; } }