irc-netcore-api/IRaCIS.Core.Application/Helper/FileDocProcess/FileConvertHelper.cs

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;
}
}