using ComPDFKitViewer; using ComPDFKitViewer.PdfViewer; using Microsoft.Win32; using PDF_Master.CustomControl.CompositeControl; using PDF_Master.Helper; using PDF_Master.Model; using PDF_Master.Model.AnnotPanel; using PDF_Master.Model.PropertyPanel.AnnotPanel; using PDFSettings; using Prism.Commands; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; namespace PDF_Master.ViewModels.PropertyPanel.PDFEdit { public class TextEditPropertyViewModel : PDFEditVM, INavigationAware { #region private bool isSelectedEmpty; public bool IsSelectedEmpty { get { return isSelectedEmpty; } set { SetProperty(ref isSelectedEmpty, value); } } private ComPDFKit.PDFPage.Edit.TextAlignType _textAlign; public ComPDFKit.PDFPage.Edit.TextAlignType TextAlign { get { return _textAlign; } set { _textAlign = value; } } #endregion #region Command #region 文本Command public DelegateCommand AddTextCommand { get; set; } public DelegateCommand AddImgCommand { get; set; } public DelegateCommand SelectedColorCommand { get; set; } public DelegateCommand SelectedFontStyleCommand { get; set; } public DelegateCommand FontSizeChangedCommand { get; set; } public DelegateCommand TextAlignCheckedCommand { get; set; } //进入属性面板编辑 public DelegateCommand EditTextModeCommand { get; set; } public DelegateCommand CustomFontStyleCommand { get; set; } public DelegateCommand ReDefineFontStyleCommand { get; set; } public DelegateCommand RestoreDefaultStyleCommand { get; set; } public DelegateCommand LayoutAlignCheckedCommand { get; set; } #endregion #endregion #region 初始化 public TextEditPropertyViewModel() { InitVariable(); InitCommand(); } private void InitVariable() { InitBaseVariable(); } private void InitCommand() { AddTextCommand = new DelegateCommand(AddText); AddImgCommand = new DelegateCommand(AddImg); SelectedColorCommand = new DelegateCommand(SelectedColor); SelectedFontStyleCommand = new DelegateCommand(SelectedFontStyle); FontSizeChangedCommand = new DelegateCommand(FontSizeChanged); TextAlignCheckedCommand = new DelegateCommand(TextAlignChecked); EditTextModeCommand = new DelegateCommand(EditTextMode); CustomFontStyleCommand = new DelegateCommand(CustomFontStyle_Click); ReDefineFontStyleCommand = new DelegateCommand(ReDefineFontStyle); RestoreDefaultStyleCommand = new DelegateCommand(RestoreDefaultStyle); LayoutAlignCheckedCommand = new DelegateCommand(LayoutAlignChecked); } #endregion #region 文本处理 private void AddText() { PDFViewer.SetPDFEditCreateType(ComPDFKit.PDFPage.CPDFEditType.EditText); } private void AddImg() { PDFViewer.SetPDFEditCreateType(ComPDFKit.PDFPage.CPDFEditType.EditImage); } private void EditTextMode() { } private void CustomFontStyle_Click() { if(CurrentPresetFont != null) { ContextMenu menu; if (CurrentPresetFont.ValueStr == "custom") { menu = SelectAnnotContextMenu(false); } else { menu = SelectAnnotContextMenu(true); } if (menu != null) { menu.IsOpen = true; } } } private void ReDefineFontStyle() { var item = PresetFontList.FirstOrDefault(temp => temp.mTag == CurrentPresetFont.ValueStr); if (CurrentFontFamily.ValueStr == "Bold") { item.mFontStyle = FontStyles.Normal; item.mFontWeight = FontWeights.Bold; } else if (CurrentFontFamily.ValueStr == "Regular") { item.mFontStyle = FontStyles.Normal; item.mFontWeight = FontWeights.Normal; } else { item.mFontStyle = FontStyles.Italic; item.mFontWeight = FontWeights.Bold; } item.mFontSize = (int)CurrentFontSize.Value; } private void RestoreDefaultStyle() { var item = PresetFontList.FirstOrDefault(temp => temp.mTag == CurrentPresetFont.ValueStr); } private void LayoutAlignChecked(object obj) { if(obj != null) { if (obj != null) { switch ((string)obj) { case "AlignLeft": PDFViewer.SetPDFEditAligment(AlignModes.AlignLeft); break; case "AlignHorizonCenter": PDFViewer.SetPDFEditAligment(AlignModes.AlignHorizonCenter); break; case "AlignRight": PDFViewer.SetPDFEditAligment(AlignModes.AlignRight); break; case "DistributeHorizontal": PDFViewer.SetPDFEditAligment(AlignModes.DistributeHorizontal); break; case "AlignTop": PDFViewer.SetPDFEditAligment(AlignModes.AlignTop); break; case "AlignVerticalCenter": PDFViewer.SetPDFEditAligment(AlignModes.AlignVerticalCenter); break; case "AlignBottom": PDFViewer.SetPDFEditAligment(AlignModes.AlignBottom); break; case "DistributeVertical": PDFViewer.SetPDFEditAligment(AlignModes.DistributeVertical); break; } } } } private void TextAlignChecked(object obj) { if ((string)obj != null && TextEditEvent != null) { switch ((string)obj) { case "AlignLeft": TextEditEvent.TextAlign = ComPDFKit.PDFPage.Edit.TextAlignType.AlignLeft; break; case "AlignCenter": TextEditEvent.TextAlign = ComPDFKit.PDFPage.Edit.TextAlignType.AlignMiddle; break; case "AlignRight": TextEditEvent.TextAlign = ComPDFKit.PDFPage.Edit.TextAlignType.AlignRight; break; case "Align": TextEditEvent.TextAlign = ComPDFKit.PDFPage.Edit.TextAlignType.AlignNone; break; } TextAlign = TextEditEvent.TextAlign; TextEditEvent.UpdatePDFEditByEventArgs(); } } private void SelectedColor(object obj) { if (obj != null) { var colorValue = (Color)obj; if (colorValue != null) { SelectColor = new SolidColorBrush(colorValue); } } } private void SelectedFontStyle(object obj) { if (obj != null && (PresetFontItem)obj != null) { var item = (PresetFontItem)obj; } } private void FontSizeChanged(object obj) { if (obj != null) { var item = (ComboBoxItem)obj; var content = (string)item.Content; if (content != null) { var intData = int.Parse(content); //TextFontSize = intData; } } } #endregion #region 布局处理 private void ImgAlignChecked(object obj) { if (obj != null) { switch ((string)obj) { case "AlignLeft": PDFViewer.SetPDFEditAligment(AlignModes.AlignLeft); break; case "AlignHorizonCenter": PDFViewer.SetPDFEditAligment(AlignModes.AlignHorizonCenter); break; case "AlignRight": PDFViewer.SetPDFEditAligment(AlignModes.AlignRight); break; case "DistributeHorizontal": PDFViewer.SetPDFEditAligment(AlignModes.DistributeHorizontal); break; case "AlignTop": PDFViewer.SetPDFEditAligment(AlignModes.AlignTop); break; case "AlignVerticalCenter": PDFViewer.SetPDFEditAligment(AlignModes.AlignVerticalCenter); break; case "AlignBottom": PDFViewer.SetPDFEditAligment(AlignModes.AlignBottom); break; case "DistributeVertical": PDFViewer.SetPDFEditAligment(AlignModes.DistributeVertical); break; } } } private void ReLoadLayoutAlign(int count) { if (count >= 2) IsLayoutAlign = true; else IsLayoutAlign = false; if (count >= 3) IsLayoutAvgAlign = true; else IsLayoutAvgAlign = false; } #endregion #region 右键菜单 //点击空白处时 private ContextMenu EmptyStateMenu(object sender) { var popMenu = App.Current.FindResource("NoneMenu") as ContextMenu; CustomPopMenu customMenu = new CustomPopMenu(popMenu, sender); //粘贴 customMenu.SetMenuBinding(0, ApplicationCommands.Paste); //添加文本 customMenu.SetMenuBinding(1, AddTextCommand); //添加图像 customMenu.SetMenuBinding(2, AddImgCommand); return popMenu; } //选中文字的框 private ContextMenu SelectTextBorder(object sender) { var popMenu = App.Current.FindResource("SelectTextMenu") as ContextMenu; CustomPopMenu customMenu = new CustomPopMenu(popMenu, sender); //编辑 customMenu.SetMenuBinding(0, EditTextModeCommand); //复制 customMenu.SetMenuBinding(1, ApplicationCommands.Copy); //剪切 customMenu.SetMenuBinding(2, ApplicationCommands.Cut); //粘贴 customMenu.SetMenuBinding(3, ApplicationCommands.Paste); //删除 customMenu.SetMenuBinding(4, ApplicationCommands.Delete); customMenu.SetVisibilityProperty(6, false); return popMenu; } //选中文字内容 private ContextMenu SelectTextContent(object sender) { var popMenu = App.Current.FindResource("SelectContentMenu") as ContextMenu; CustomPopMenu customMenu = new CustomPopMenu(popMenu, sender); //复制 customMenu.SetMenuBinding(0, ApplicationCommands.Copy); //剪切 customMenu.SetMenuBinding(1, ApplicationCommands.Cut); //粘贴 customMenu.SetMenuBinding(2, ApplicationCommands.Paste); //粘贴并匹配样式 customMenu.SetVisibilityProperty(3, false); //删除 customMenu.SetMenuBinding(4, ApplicationCommands.Delete); //全部选定 customMenu.SetMenuBinding(5, ApplicationCommands.SelectAll); return popMenu; } #endregion #region 编辑PDF内容触发的事件 /// /// 右键菜单的事件 /// private void PDFViewer_PDFEditCommandHandler(object sender, PDFEditCommand e) { if (e == null) return; switch (e.CommandType) { case CommandType.Context: if (e.EditType == ComPDFKit.PDFPage.CPDFEditType.None) { e.PopupMenu = EmptyStateMenu(sender); } else if (e.EditType == ComPDFKit.PDFPage.CPDFEditType.EditText) { //文字编辑 if (e.PressOnBorder == true) { e.PopupMenu = SelectTextBorder(sender); } if (e.PressOnSelectedText == true) { e.PopupMenu = SelectTextContent(sender); } } break; default: e.DoCommand(); break; } if (e.PopupMenu != null) { e.Handle = true; } } private ContextMenu SelectAnnotContextMenu(bool isEnable) { var popMenu = App.Current.FindResource("CustomFontStyleFlyoutMenu") as ContextMenu; if (popMenu != null && popMenu.Items.Count == 2) { //用所选部分重新定义 MenuItem menuItem = popMenu.Items[0] as MenuItem; menuItem.IsEnabled = isEnable; menuItem.Command = ReDefineFontStyleCommand; //恢复默认预设样式 menuItem = popMenu.Items[1] as MenuItem; menuItem.IsEnabled = isEnable; menuItem.Command = RestoreDefaultStyleCommand; } return popMenu; } #region 全局 public event EventHandler ClearCheckedAglin; #endregion #endregion protected List TextEditEventList; public void OnNavigatedTo(NavigationContext navigationContext) { navigationContext.Parameters.TryGetValue(ParameterNames.PDFViewer, out PDFViewer); navigationContext.Parameters.TryGetValue>(ParameterNames.AnnotEvent, out TextEditEventList); if (PDFViewer != null) { if (TextEditEventList != null && TextEditEventList.Count > 0) { TextEditEvent = TextEditEventList[0]; GetPDFEdit(); if (TextEditEventList.Count > 1) IsSelectedEmpty = true; else IsSelectedEmpty = false; if (TextEditEventList.Count == 2) { IsLayoutAlign = true; IsLayoutAvgAlign = false; } else if(TextEditEventList.Count >2) { IsLayoutAlign = true; IsLayoutAvgAlign = true; } else { IsLayoutAlign = false; IsLayoutAvgAlign = false; } } PDFViewer.PDFEditCommandHandler -= PDFViewer_PDFEditCommandHandler; PDFViewer.PDFEditCommandHandler += PDFViewer_PDFEditCommandHandler; ChangedValue -= FontMode_ChangedValue; ChangedValue += FontMode_ChangedValue; IsCanSave = true; } } private void FontMode_ChangedValue(object sender, FontSetModeType e) { if(sender != null) { switch(e) { case FontSetModeType.PresetFontStyes: if(PresetFontList != null && sender is string == true) { var item = PresetFontList.FirstOrDefault(temp => temp.mTag == (string)sender); if (item != null && TextEditEvent != null) { if(TextEditEventList.Count == 1 && IsSelectedEmpty == false) { TextEditEvent.FontFamily = item.mFontFamily; TextEditEvent.FontSize = item.mFontSize; TextEditEvent.FontWeight = item.mFontWeight; TextEditEvent.FontStyle = item.mFontStyle; TextEditEvent.UpdatePDFEditByEventArgs(); } else { foreach (var itemlist in TextEditEventList) { itemlist.FontFamily = item.mFontFamily; itemlist.FontSize = item.mFontSize; itemlist.FontWeight = item.mFontWeight; itemlist.FontStyle = item.mFontStyle; itemlist.UpdatePDFEditByEventArgs(); } } } } break; case FontSetModeType.FontFamilys: if(sender is string == true) { TextEditEvent.FontFamily = new FontFamily((string)sender); TextEditEvent.UpdatePDFEditByEventArgs(); } break; case FontSetModeType.FontSizes: if (sender is double == true && (double)sender > 0 && TextEditEvent.FontSize > 0) { TextEditEvent.FontSize = (double)sender; TextEditEvent.UpdatePDFEditByEventArgs(); } break; case FontSetModeType.FontWeight_Style: UpdateFontWeight_Style(); TextEditEvent.FontWeight = FontWeightItem; TextEditEvent.FontStyle = FontStyleItem; TextEditEvent.UpdatePDFEditByEventArgs(); break; case FontSetModeType.FontColor: if(sender is Color == true) { var setColor = (Color)sender; var eventColor = TextEditEvent.FontColor; bool isok = eventColor.A != setColor.A || eventColor.B != setColor.B || eventColor.G != setColor.G || eventColor.R != setColor.R; if(isok) { TextEditEvent.FontColor = setColor; TextEditEvent.UpdatePDFEditByEventArgs(); } } break; case FontSetModeType.TextAlignment: break; } } } private void GetPDFEdit() { if (TextEditEvent != null && TextEditEventList.Count == 1) { SelectColor = new SolidColorBrush(TextEditEvent.FontColor); GetCurrentFontSize((int)TextEditEvent.FontSize); if(TextEditEvent.FontFamily != null) GetCurrentFontFamily(TextEditEvent.FontFamily.ToString(), TextEditEvent.FontFamily.ToString()); GetFontWeights_Style(TextEditEvent.FontStyle, TextEditEvent.FontWeight); TextAlign = TextEditEvent.TextAlign; } } public bool IsNavigationTarget(NavigationContext navigationContext){ return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { IsCanSave = false; TextEditEvent = null; IsSelectedEmpty = false; ClearCheckedAglin?.Invoke(null, null); PDFViewer.PDFEditCommandHandler -= PDFViewer_PDFEditCommandHandler; ChangedValue -= FontMode_ChangedValue; } } }