using ComPDFKit_Conversion.Options; using DryIoc; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using PDF_Master.Properties; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using static Dropbox.Api.Files.SearchMatchType; using static Dropbox.Api.TeamLog.EventCategory; namespace PDF_Master.Helper { public static class ChatGTPAIHelper { private static string host = "https://ai.compdf.com"; private static string translate = "http://101.132.103.13:8030"; /// /// 翻译文档Key接口 /// private static string Uri_fileKeytranslate = translate + "/v1/translate/fileUpload"; /// /// 翻译文档接口 /// private static string Uri_filetranslate = translate + "/v1/translate/fileTranslateHandle"; /// /// 翻译文本接口 /// private static string Uri_texttranslate = translate + "/v1/translate/textTrans"; ///// ///// FAQ接口 ///// //private static string Uri_FAQ = host + "/find-faq"; ///// ///// 跳转接口 ///// //private static string Uri_GoToView = host + "/recognition"; ///// ///// 摘要接口 ///// //private static string Uri_Summary = host + "/summary"; /// /// 错别字纠正 /// private static string Uri_Correction = host + "/api/correct-typos"; /// /// 错别字纠正 /// private static string Uri_Rewrite = host + "/api/rewrite"; /// /// 翻译指定内容,可以指定语言 /// /// /// 1=中文 2=英文 3=法语 4=汉语 /// public async static Task fileKeyTranslate(string content, string filename) { HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_fileKeytranslate); request.Method = "Post"; var formData = new MultipartFormDataContent(); byte[] data = File.ReadAllBytes(@content); MemoryStream stream = new MemoryStream(data); formData.Add(new ByteArrayContent(data), "file", filename); formData.Add(new StringContent("2"), "projectId"); formData.Add(new StringContent("1.0.1"), "version"); if (!string.IsNullOrEmpty(Settings.Default.UserDate.id)) { formData.Add(new StringContent(Settings.Default.UserDate.id), "userId"); } else { formData.Add(new StringContent("1"), "userId"); } // 设置请求体格式 request.ContentType = formData.Headers.ContentType.ToString(); request.ContentLength = formData.Headers.ContentLength.Value; // 将FormData写入请求体 using (var requestStream = request.GetRequestStream()) { await formData.CopyToAsync(requestStream); } try { // 获取HTTP响应 HttpWebResponse response2 = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response2.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response2 != null) { response2.Close(); } if (request != null) { request.Abort(); } if (jobject["code"].ToObject().ToLower() == "200") { translate = jobject["data"]["fileKey"].ToObject().ToLower(); } //return jobject["code"].ToObject().ToLower(); return translate; } return ""; } catch (WebException ex) { Console.WriteLine("HTTP异常:" + ex.Message); return ""; } } public static string HttpDownloadFile(string url, string path) { // 设置参数 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //发送请求并获取相应回应数据 HttpWebResponse response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 Stream responseStream = response.GetResponseStream(); //创建本地文件写入流 Stream stream = new FileStream(path, FileMode.Create); byte[] bArr = new byte[1024]; int size = responseStream.Read(bArr, 0, (int)bArr.Length); while (size > 0) { stream.Write(bArr, 0, size); size = responseStream.Read(bArr, 0, (int)bArr.Length); } stream.Close(); responseStream.Close(); return path; } /// /// 翻译指定内容,可以指定语言 /// /// 文本Key /// 文本语言 /// 需要翻译的语言 /// public static async Task fileTranslate(string content, string fromlanguage, string tolanguage) { FileInfo file = new FileInfo(content); string fileKey = await fileKeyTranslate(content, file.Name); HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_filetranslate); request.Method = "Post"; request.ContentType = "application/json"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; StringWriter sw = new StringWriter(); using (JsonWriter writer = new JsonTextWriter(sw)) { writer.WriteStartObject(); writer.WritePropertyName("fileKey"); writer.WriteValue(fileKey); writer.WritePropertyName("from"); writer.WriteValue(fromlanguage); writer.WritePropertyName("to"); writer.WriteValue(tolanguage); writer.WritePropertyName("projectId"); writer.WriteValue("2"); writer.WritePropertyName("version"); writer.WriteValue("1.0.1"); writer.WritePropertyName("userId"); writer.WriteValue(Settings.Default.UserDate.id); writer.WriteEndObject(); } try { string postBody = sw.ToString(); using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) { writer.Write(postBody); writer.Close(); } response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } if (jobject["code"].ToObject().ToLower() == "200") { translate = jobject["data"]["ossDownUrl"].ToObject().ToLower(); } //return jobject["code"].ToObject().ToLower(); using (var client = new WebClient()) { string folderPath = Path.Combine(App.CurrentPath, "DownloadFile"); //有可能因为其他原因存在同名文件,导致创建文件夹失败,需要先删除同名文件 if (File.Exists(folderPath)) { File.Delete(folderPath); } DirectoryInfo tempfolder = new DirectoryInfo(folderPath); if (!tempfolder.Exists) { tempfolder.Create(); } client.DownloadProgressChanged += (sender, e) => { }; client.DownloadFile(translate, folderPath + "\\" + file.Name.Replace(file.Extension,".pdf")); } return "200"; } } catch { return "300"; } } /// /// 翻译指定内容,可以指定语言 /// /// 翻译内容 /// 文本语言 /// 需要翻译的语言 /// public static String textTranslate(string content, string fromlanguage, string tolanguage, ref string translate) { HttpWebResponse response = null; ServicePointManager.DefaultConnectionLimit = 200; HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Uri_texttranslate); request.Method = "Post"; request.ContentType = "application/json"; //request.Accept = "application/vnd.api+json;version=1"; request.UserAgent = "Apifox/1.0.0 (https://www.apifox.cn)"; request.Timeout = 20000; request.ServicePoint.Expect100Continue = false; StringWriter sw = new StringWriter(); using (JsonWriter writer = new JsonTextWriter(sw)) { writer.WriteStartObject(); writer.WritePropertyName("q"); writer.WriteValue(content); writer.WritePropertyName("from"); writer.WriteValue(fromlanguage); writer.WritePropertyName("to"); writer.WriteValue(tolanguage); writer.WritePropertyName("projectId"); writer.WriteValue("2"); writer.WritePropertyName("version"); writer.WriteValue("1.0.1"); writer.WritePropertyName("userId"); writer.WriteValue(Settings.Default.UserDate.id); writer.WriteEndObject(); } try { string postBody = sw.ToString(); using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) { writer.Write(postBody); writer.Close(); } response = (HttpWebResponse)request.GetResponse(); using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string responseData = reader.ReadToEnd(); Console.WriteLine(responseData); reader.Close(); JObject jobject = (JObject)JsonConvert.DeserializeObject(responseData); if (response != null) { response.Close(); } if (request != null) { request.Abort(); } if (jobject["code"].ToObject().ToLower() == "200") { translate = jobject["data"]["dst"].ToObject().ToLower(); } //return jobject["code"].ToObject().ToLower(); return "200"; } } catch { return "300"; } } /// /// 纠错 /// /// /// public async static Task Correction(string content) { System.Collections.Specialized.NameValueCollection namevalue = new System.Collections.Specialized.NameValueCollection(); //需要纠错的内容 namevalue["project_id"] = "2"; namevalue["version"] = "1.0.1"; if (!string.IsNullOrEmpty(Settings.Default.UserDate.id)) { namevalue["user_id"] = Settings.Default.UserDate.id; } else { namevalue["user_id"] = "3"; } namevalue["content"] = content; return await PostString(Uri_Correction, namevalue, "content"); } /// /// 重写 /// /// /// public async static Task Rewrite(string content) { System.Collections.Specialized.NameValueCollection namevalue = new System.Collections.Specialized.NameValueCollection(); //需要纠错的内容 namevalue["project_id"] = "2"; namevalue["version"] = "1.0.1"; if (!string.IsNullOrEmpty(Settings.Default.UserDate.id)) { namevalue["user_id"] = Settings.Default.UserDate.id; } else { namevalue["user_id"] = "3"; } namevalue["content"] = content; return await PostString(Uri_Rewrite, namevalue, "content"); } ///// ///// 页面跳转 ///// ///// ///// //public async static Task GoToView(string content) //{ // System.Collections.Specialized.NameValueCollection namevalue = new System.Collections.Specialized.NameValueCollection(); // //需要翻译的内容 // namevalue["str"] = content; // return await PostString(Uri_GoToView, namevalue, "flag"); //} /// /// 从链接中返回存在的链接(仅返回第一个找到的链接) /// /// /// public static List GetLinkFromString(string content) { if (string.IsNullOrEmpty(content)) { return null; } // 创建正则表达式模式 string pattern = @"(https?://[^\s]+)"; // 获取所有匹配项 MatchCollection matches = Regex.Matches(content, pattern); List list = new List(); // 遍历并打印所有匹配项 foreach (Match match in matches) { list.Add(match.Value); } return list; } /// /// 从接口获取信息,获取message对应value值 /// /// /// /// private async static Task PostString(string url, System.Collections.Specialized.NameValueCollection namevalue, string key = "message") { string repsonseData = ""; try { using (var client = new WebClient()) { byte[] bytes = await client.UploadValuesTaskAsync(url, namevalue); //转换成字符串类型 var json = Encoding.Default.GetString(bytes); //将Json格式字符串转换成键值对 //var values = JsonConvert.DeserializeObject>(json); JObject jobject = (JObject)JsonConvert.DeserializeObject(json); string unicode = ""; // 遍历字典对象输出键值对 unicode = jobject["data"][key].ToObject().ToLower(); //将Unicode格式转换成String //repsonseData = Regex.Unescape(unicode); repsonseData = unicode; } } catch (Exception ex) { return null; } return repsonseData; } public static List FromlanguageFamily { set; get; } = new List(); public static List SetFromlanguageOrigin() { FromlanguageFamily.Clear(); FromlanguageFamily.Add("Automatic Identification"); FromlanguageFamily.Add("English"); FromlanguageFamily.Add("Simplified Chinese"); FromlanguageFamily.Add("Traditional Chinese"); FromlanguageFamily.Add("Japanese"); FromlanguageFamily.Add("Korean"); FromlanguageFamily.Add("French"); FromlanguageFamily.Add("Spanish"); FromlanguageFamily.Add("Italian"); FromlanguageFamily.Add("German"); FromlanguageFamily.Add("Portuguese"); FromlanguageFamily.Add("Russian"); FromlanguageFamily.Add("Vietnamese"); FromlanguageFamily.Add("Thai"); FromlanguageFamily.Add("Arabic"); FromlanguageFamily.Add("Greek"); FromlanguageFamily.Add("Bulgarian"); FromlanguageFamily.Add("Finnish"); FromlanguageFamily.Add("Slovene"); FromlanguageFamily.Add("Dutch"); FromlanguageFamily.Add("Czech"); FromlanguageFamily.Add("Swedish"); FromlanguageFamily.Add("Polish"); FromlanguageFamily.Add("Danish"); FromlanguageFamily.Add("Romanian"); FromlanguageFamily.Add("Hungarian"); return FromlanguageFamily; } public static List TolanguageFamily { set; get; } = new List(); public static List SetTolanguageOrigin() { TolanguageFamily.Clear(); TolanguageFamily.Add("English"); TolanguageFamily.Add("Simplified Chinese"); TolanguageFamily.Add("Traditional Chinese"); TolanguageFamily.Add("Japanese"); TolanguageFamily.Add("Korean"); TolanguageFamily.Add("French"); TolanguageFamily.Add("Spanish"); TolanguageFamily.Add("Italian"); TolanguageFamily.Add("German"); TolanguageFamily.Add("Portuguese"); TolanguageFamily.Add("Russian"); TolanguageFamily.Add("Vietnamese"); TolanguageFamily.Add("Thai"); TolanguageFamily.Add("Arabic"); TolanguageFamily.Add("Greek"); TolanguageFamily.Add("Bulgarian"); TolanguageFamily.Add("Finnish"); TolanguageFamily.Add("Slovene"); TolanguageFamily.Add("Dutch"); TolanguageFamily.Add("Czech"); TolanguageFamily.Add("Swedish"); TolanguageFamily.Add("Polish"); TolanguageFamily.Add("Danish"); TolanguageFamily.Add("Romanian"); TolanguageFamily.Add("Hungarian"); return TolanguageFamily; } public static string UpdateLanguagebType(int index) { switch (index) { case 0: return "auto"; case 1: return "en"; case 2: return "zh"; case 3: return "cht"; case 4: return "jp"; case 5: return "kor"; case 6: return "fra"; case 7: return "spa"; case 8: return "it"; case 9: return "de"; case 10: return "pt"; case 11: return "ru"; case 12: return "vie"; case 13: return "th"; case 14: return "ara"; case 15: return "el"; case 16: return "bul"; case 17: return "fin"; case 18: return "slo"; case 19: return "nl"; case 20: return "cs"; case 21: return "swe"; case 22: return "pl"; case 23: return "dan"; case 24: return "rom"; case 25: return "hu"; default: return""; } } } }