125 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C#
		
	
	
| using Microsoft.Extensions.Configuration;
 | |
| using RestSharp;
 | |
| using SharpCompress.Common;
 | |
| using System.Diagnostics;
 | |
| 
 | |
| namespace IRaCIS.Core.Application.Helper;
 | |
| 
 | |
| public class FileConvertHelper
 | |
| {
 | |
| 
 | |
|     /// <summary>
 | |
|     /// 镜像里面打入libreoffice 的方案
 | |
|     /// </summary>
 | |
|     /// <param name="inputWordFilePath"></param>
 | |
|     /// <param name="outputPdfDir"></param>
 | |
|     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();
 | |
|         }
 | |
|     }
 | |
| 
 | |
| 
 | |
|     /// <summary>
 | |
|     /// 返回文件字节数组
 | |
|     /// File.WriteAllBytes(outputFilePath, response.RawBytes);  直接将字节数组写入到本地某个路径
 | |
|     /// var stream = new MemoryStream(response.RawBytes);  直接变为内存流,给其他程序用也可以
 | |
|     /// </summary>
 | |
|     /// <returns></returns>
 | |
|     static public async Task<byte[]> 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<byte[]> 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<byte[]> 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<byte>();
 | |
|             }
 | |
|         }
 | |
|         catch (Exception ex)
 | |
|         {
 | |
|             Console.WriteLine("发生异常: " + ex.Message);
 | |
| 
 | |
|             return Array.Empty<byte>();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     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;
 | |
|     }
 | |
| 
 | |
| 
 | |
| }
 |