using ComPDFKit.PDFDocument; using ComPDFKitViewer; using ComPDFKitViewer.PdfViewer; using Microsoft.Office.Core; using Microsoft.Office.Interop.Word; using Microsoft.Win32; using PDF_Master.CustomControl; using PDF_Master.Helper; using PDF_Master.Model; using PDF_Master.Properties; using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Windows; using System.Windows.Threading; using Task = System.Threading.Tasks.Task; namespace PDF_Master.ViewModels.HomePanel.ChatGPTAI { public class ChatGPTAITranslationContentViewModel : BindableBase, INavigationAware { #region 文案 private string T_title; public string T_Title { get { return T_title; } set { SetProperty(ref T_title, value); } } private string T_supportTip; public string T_SupportTip { get { return T_supportTip; } set { SetProperty(ref T_supportTip, value); } } private string T_limitTip; public string T_LimitTip { get { return T_limitTip; } set { SetProperty(ref T_limitTip, value); } } private string T_translationLanguage; public string T_TranslationLanguage { get { return T_translationLanguage; } set { SetProperty(ref T_translationLanguage, value); } } private string T_selectFileBtn; public string T_SelectFileBtn { get { return T_selectFileBtn; } set { SetProperty(ref T_selectFileBtn, value); } } private string T_dropTip; public string T_DropTip { get { return T_dropTip; } set { SetProperty(ref T_dropTip, value); } } private void InitString() { T_Title = App.HomePageLoader.GetString("AITranslationBtn_Title"); T_SupportTip = App.HomePageLoader.GetString("AITranslationBtn_SupportTip"); T_LimitTip = App.HomePageLoader.GetString("AITranslationBtn_LimitTip"); T_TranslationLanguage = App.HomePageLoader.GetString("AITranslationBtn_TranslationLanguage"); T_SelectFileBtn = App.HomePageLoader.GetString("AITranslationBtn_SelectFileBtn"); T_DropTip = App.HomePageLoader.GetString("AITranslationBtn_DropTip"); } #endregion #region 参数和属性 public HomeContentViewModel homeContentViewModel = null; /// /// 初始化需要翻译的内容语言 /// public string fromlanguage = ChatGTPAIHelper.UpdateLanguagebType(0); /// /// 初始化翻译后的语言 /// public string tolanguage = ChatGTPAIHelper.UpdateLanguagebType(1); private int fromlanguageIndex = 0; public int FromlanguageIndex { get { return fromlanguageIndex; } set { SetProperty(ref fromlanguageIndex, value); fromlanguage = ChatGTPAIHelper.UpdateLanguagebType(value); } } private int tolanguageIndex = 0; public int TolanguageIndex { get { return tolanguageIndex; } set { SetProperty(ref tolanguageIndex, value); tolanguage = ChatGTPAIHelper.UpdateLanguagebType(value + 1); } } private Visibility errorTipVisible = Visibility.Collapsed; public Visibility ErrorTipVisible { get { return errorTipVisible; } set { SetProperty(ref errorTipVisible, value); if (value == Visibility.Visible) { dispatcherTimer.Start(); } } } private string errorTipText = "The uploaded file cannot exceed 10MB"; public string ErrorTipText { get { return errorTipText; } set { SetProperty(ref errorTipText, value); } } /// /// 初始化翻译前语言列表 /// public static List FromlanguageFamily { set; get; } = new List(); private void GetFromlanguageOrigin() { FromlanguageFamily.Clear(); FromlanguageFamily = ChatGTPAIHelper.SetFromlanguageOrigin(); } /// /// 初始化翻译到语言列表 /// public List TolanguageFamily { set; get; } = new List(); private void GetTolanguageOrigin() { TolanguageFamily.Clear(); TolanguageFamily = ChatGTPAIHelper.SetTolanguageOrigin(); } /// /// 设置错误提示显示时间 /// private DispatcherTimer dispatcherTimer = new DispatcherTimer(); #endregion #region 委托声明 public DelegateCommand SelectFilesCommand { get; set; } #endregion public ChatGPTAITranslationContentViewModel() { SelectFilesCommand = new DelegateCommand(selectFiles); dispatcherTimer.Interval = TimeSpan.FromSeconds(3); dispatcherTimer.Tick += Dispatchertimer_Tick; init(); InitString(); } #region 逻辑函数 /// /// 初始化下拉列表,或其他 /// private void init() { GetFromlanguageOrigin(); GetTolanguageOrigin(); } /// /// 控制错误提示 /// /// /// private void Dispatchertimer_Tick(object sender, EventArgs e) { ErrorTipVisible = Visibility.Collapsed; dispatcherTimer.Stop(); } /// /// 选择文件逻辑翻译,word pdf /// public async void selectFiles() { //添加付费拦截锁 if (!ServiceHelper.IAPBeforeFunction()) { return; } if (Settings.Default.UserDate.subscribestatus != 1) { App.mainWindowViewModel.dialogs.ShowDialog(DialogNames.IAPCompareDialog); return; } string word = Properties.Resources.wordex; string pdf = Properties.Resources.pdf; string allfiles = pdf + word; OpenFileDialog dialog = new OpenFileDialog(); //dialog.Multiselect = true; dialog.Filter = string.Format($"Files({allfiles.Replace(";", ",")}|{allfiles})|" + $"Pdf({pdf})|{pdf}|" + $"Microsoft Office Word({word})|{word}"); if ((bool)dialog.ShowDialog()) { ErrorTipVisible = Visibility.Collapsed; FileInfo fileInfo = new FileInfo(dialog.FileName); //判断文件大小 if ((((float)fileInfo.Length) / 1024 / 1024) > 10) { ErrorTipText = "The uploaded file cannot exceed 10MB"; ErrorTipVisible = Visibility.Visible; return; } //判断文件页数 if (fileInfo.Extension.ToLower() == ".pdf") { CPDFDocument cPDFDocument = CPDFDocument.InitWithFilePath(dialog.FileName); if (cPDFDocument.PageCount > 30) { ErrorTipText = "The uploaded file cannot exceed 10MB"; ErrorTipVisible = Visibility.Visible; return; } } else { try { Microsoft.Office.Interop.Word.Application myWordApp = new Microsoft.Office.Interop.Word.Application(); object Nothing = System.Reflection.Missing.Value; object oMissing = System.Reflection.Missing.Value; object filePath = dialog.FileName; //这里是Word文件的路径 //打开文件 Document myWordDoc = myWordApp.Documents.Open( ref filePath, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); //下面是取得打开文件的页数 int pages = myWordDoc.ComputeStatistics(WdStatistic.wdStatisticPages, ref Nothing); //关闭文件 myWordDoc.Close(ref oMissing, ref oMissing, ref oMissing); //退出Word程序 myWordApp.Quit(ref Nothing, ref Nothing, ref Nothing); if (pages > 30) { ErrorTipText = "The uploaded file cannot exceed 30pages"; ErrorTipVisible = Visibility.Visible; return; } } catch { } } string newfile = ""; await Task.Run(async delegate { newfile = await ChatGTPAIHelper.fileTranslate(dialog.FileName, fromlanguage, tolanguage); }); if (!string.IsNullOrEmpty(newfile)) { if (File.Exists(newfile)) { if (homeContentViewModel != null) { homeContentViewModel.OpenFile(new string[] { newfile }); return; } } } //newfile code ErrorTipText = newfile; ErrorTipVisible = Visibility.Visible; } } #endregion #region 构架行为 public void OnNavigatedTo(NavigationContext navigationContext) { navigationContext.Parameters.TryGetValue(ParameterNames.HomeContentViewModel, out homeContentViewModel); } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } #endregion } }