using ComPDFKit.PDFAnnotation; using ComPDFKit.PDFDocument; using ComPDFKitViewer; using ComPDFKitViewer.AnnotEvent; using ComPDFKitViewer.PdfViewer; using DotNetSpeech; using ImTools; using Microsoft.Win32; using PDF_Master.CustomControl; using PDF_Master.EventAggregators; using PDF_Master.Helper; using PDF_Master.Model; using PDF_Master.Model.AnnotPanel; using PDF_Master.Model.BOTA; using PDF_Master.Properties; using PDF_Master.ViewModels.BOTA; using PDF_Master.ViewModels.PropertyPanel; using PDF_Master.ViewModels.PropertyPanel.AnnotPanel; using PDF_Master.ViewModels.Tools.AnnotManager; using PDF_Master.Views; using PDF_Master.Views.BOTA; using PDF_Master.Views.PropertyPanel.AnnotPanel; using PDFReader_WPF.Helper; using PDFSettings; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.Diagnostics; using System.Drawing.Imaging; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Annotations; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using static Dropbox.Api.Paper.PaperDocPermissionLevel; using ContextMenu = System.Windows.Controls.ContextMenu; using KeyEventArgs = System.Windows.Input.KeyEventArgs; using MenuItem = System.Windows.Controls.MenuItem; namespace PDF_Master.ViewModels.Tools { public sealed partial class AnnotToolContentViewModel : BindableBase, INavigationAware { #region 初始化 public AnnotToolContentViewModel(IRegionManager regionManager, IEventAggregator eventAggregator, IDialogService dialogService) { region = regionManager; events = eventAggregator; dialogs = dialogService; InitCommand(); InitDefaultValue(); InitToolDict(); InitToolTipDict(); InitPopMenu(); SubscribeEvent(); AnnotContainerBorderColor(); } //注释容器选中边框的颜色 private void AnnotContainerBorderColor() { var pen = new Pen(new SolidColorBrush(Color.FromArgb(0xFF, 0x17, 0x70, 0xF4)), 1); CommonDrawData.ActiveBrush = new SolidColorBrush(Color.FromArgb(0xFF, 0x17, 0x70, 0xF4)); CommonDrawData.ActivePen = pen; } //事件聚合器 private void SubscribeEvent() { Unicode = App.mainWindowViewModel.SelectedItem.Unicode; events.GetEvent().Subscribe(FromFillAndSign, e => e.AppUnicode == Unicode); } private void InitPopMenu() { InitSelectHightAnnotMenu(); InitSelectFreeHandAnnotMenu(); InitSelectFreeTextAnnotMenu(); InitSelectStrickNoteAnnotMenu(); InitSelectShapeAnnotMenu(); InitSelectLinkAnnotMenu(); InitSelectStampAnnotMenu(); InitSelectMultiAnnotMenu(); } private void InitCommand() { MyToolsCommand = new DelegateCommand(BtnMyTools_Click); SetAddAnnotationCommand = new DelegateCommand(AddAnnotation_Click); AddBookMarkCommand = new DelegateCommand(AddBookMark_Click); PropertyRegionName = Guid.NewGuid().ToString(); HandCommand = new DelegateCommand(Hand_Click); ShowOrHiddenAnnotCommand = new DelegateCommand(ShowOrHiddenAnnot_Click); GlobalCommands.BookMarkCommand.RegisterCommand(AddBookMarkCommand); #region 注释 - 右键菜单 //公共command AnnotDefaultValue_MenuCommand = new DelegateCommand(AnnotDefaultValues_Menu); AnnotColorPalette_MenuCommand = new DelegateCommand(AnnotColorPalette_Menu); AnnotAddNoteText_MenuCommand = new DelegateCommand(AnnotAddNoteText_Menu); //高亮、下划线、删除 HightAnnotCopyText_MenuCommand = new DelegateCommand(HightAnnotCopyText_Menu); //手绘 FreeHandLineStyle_MenuCommand = new DelegateCommand(FreeHandLineStyle_Menu); //文本 FreeTextFontFamily_MenuCommand = new DelegateCommand(FreeTextFontFamily_Menu); FreeTextAglin_MenuCommand = new DelegateCommand(FreeTextAglin_Menu); //便签 StrikeNoteEditStrike_MenuCommand = new DelegateCommand(StrikeNoteEditStrike_Menu); //形状 ShapeLineStyle_MenuCommand = new DelegateCommand(ShapeLineStyle_Menu); ShapeLineDirect_MenuCommand = new DelegateCommand(ShapeLineDirect_Menu); //图章 StampExportPicture_MenuCommand = new DelegateCommand(StampExportPicture_Menu); //链接 Link_MenuCommand = new DelegateCommand(Link_Menu); #endregion 注释 - 右键菜单 } #endregion 初始化 #region 注释工具栏 -》Command实现 private void ShowOrHiddenAnnot_Click(CustomIconToggleBtn annotBtn) { if (annotBtn == null || annotBtn.Tag == null) return; PDFViewer.SetDrawAnnot((bool)annotBtn.IsChecked); PDFViewer.ReloadVisibleAnnots(); bool isTabItemAnnotation = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemAnnotation"); if (annotBtn.IsChecked == true) { ViewContentViewModel.IsHiddenAnnot = false; if (ViewContentViewModel.OpenBOTA == true && isTabItemAnnotation == true) { AnnotationContentViewModel viewModel = GetAnnotationContentViewModel(bOTAContentViewModel, out AnnotationContent annotation); viewModel.DisplayAnnot(); } } else { ViewContentViewModel.IsHiddenAnnot = true; PDFViewer.ClearSelectAnnots(); if (ViewContentViewModel.OpenBOTA == true && isTabItemAnnotation == true) { AnnotationContentViewModel viewModel = GetAnnotationContentViewModel(bOTAContentViewModel, out AnnotationContent annotation); viewModel.HiddenAnnot(); } } //bota缩略图刷新 页面 events.GetEvent().Publish(new PageEditNotifyEventArgs(App.mainWindowViewModel.SelectedItem.Unicode)); } //手型工具 private void Hand_Click() { DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Scroll"); HandToolIsCheckedEvent(BtnHandIsChecked); if (BtnHandIsChecked) { //其余注释工具 取消选中 StrAnnotToolChecked = ""; BtnLinkIsChecked = false; BtnSelecttoolIsChecked = false; ViewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null); } } //手型工具按钮选中或取消 private void HandToolIsCheckedEvent(bool isChecked) { if (isChecked == false) { if (PDFViewer == null) { return; } //鼠标框选多选注释 if (PDFViewer.MouseMode != MouseModes.AnnotCreate) { PDFViewer.SetMouseMode(MouseModes.AnnotCreate); var annotArgs = new SelectToolArgs(); PDFViewer.SetToolParam(annotArgs); } else { PDFViewer.SetMouseMode(MouseModes.PanTool); } } else { //鼠标滚动页面 PDFViewer.SetMouseMode(MouseModes.Scroll); PDFViewer.SetToolParam(new AnnotHandlerEventArgs()); } } //点击注释工具 private void BtnMyTools_Click(CustomIconToggleBtn annotBtn) { if (PDFViewer == null || annotBtn == null || annotBtn.Tag == null) return; //if(viewContentViewModel.OpenBOTA==false) this.events.GetEvent().Publish(new CleanSelectAllArgs() { Unicode = App.mainWindowViewModel.SelectedItem.Unicode, IsCleanSelectAll = true }); //不创建注释,属于注释模板 Dictionary dictVar = new Dictionary(); dictVar.Add("isTemplateAnnot", false); dictVar.Add("isSnapshotEdit", false); AnnotHandlerEventArgs annotArgs = null; var tag = annotBtn.Tag.ToString(); ToolsSelectonDataTracking(tag); ViewContentViewModel.IsSelectedTextAddLink = false; if (annotBtn.IsChecked == true) { PropertyPanel.AnnotSelect = StrAnnotToolChecked; PropertyPanel.IsSharpAnnotSelected = true; PropertyPanel.IsFreeHandSelected = true; PropertyPanel.SaveLastAnnot(); PDFViewer.DisableClearSelectAnnot(false); PDFViewer.ClearSelectAnnots(); PDFViewer.ToolManager.DisableStickyCreate = false; PropertyPanel.annot = null; PropertyPanel.AnnotEvents = null; PropertyPanel.AnnotEvent = null; PropertyPanel.annotlists = null; MyToolCheckedDoing(dictVar, tag); FindAnnotTypeKey(tag, ref annotArgs); if (annotArgs != null && tag != "Stamp") { //设置点击页面会创建对应选中注释工具的注释 annotArgs.Author = Settings.Default.AppProperties.Description.Author; PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(annotArgs); } else { var f = PDFViewer.MouseMode; //2023/4/6 设置Stamp刚进入时点击view出现空的选中方框 //PDFViewer.SetMouseMode(MouseModes.None); //解决 注释 工具 图章,不选中其他注释的bug PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(new SelectToolArgs()); } if (PropertyPanel.IsSelectedTextAddLink) { PropertyPanel.IsSelectedTextAddLink = false; PDFViewer.SelectAnnotation(PropertyPanel.annot.PageIndex, PropertyPanel.annot.AnnotIndex); } if (PropertyPanel.IsSelectedTextAddShape) { PropertyPanel.IsSelectedTextAddShape = false; PDFViewer.SelectAnnotation(PropertyPanel.annot.PageIndex, PropertyPanel.annot.AnnotIndex); } } else { UncheckAnnot(); } if (dictVar["isTemplateAnnot"] == false && annotArgs == null) { //当不是注释模板,且无创建注释时,属性面板显示为空内容 HandToolIsCheckedEvent(false); ViewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null); } else { if (dictVar["isSnapshotEdit"] == true) { ShowPropertyPanel(false); } else { ShowPropertyPanel((bool)annotBtn.IsChecked); } } } /// /// 工具选项卡切换埋点 /// /// private void ToolsSelectonDataTracking(string tag) { switch (tag) { case "SnapshotEdit": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_ContentSelection"); break; case "HighLight": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Highlight"); break; case "UnderLine": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Underline"); break; case "Strikeout": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Strikethrough"); break; case "Freehand": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Draw"); break; case "Freetext": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Text"); break; case "StickyNote": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Note"); break; case "Rect": DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Shape"); break; case "Link": DataTrackingHelper.SetSendInformation(DataTrackingHelper.EventType.Purchase_Annotation, DataTrackingHelper.EntryPathKeyType.SubTbr_Annotation); DataTrackingHelper.AddFirstAndSecondaryPath(DataTrackingHelper.FirstPath.Home, DataTrackingHelper.SecondaryPath.Link); DataTrackingHelper.IsClearEntryPath = true; DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Link"); break; case "Stamp": DataTrackingHelper.SetSendInformation(DataTrackingHelper.EventType.Purchase_Annotation, DataTrackingHelper.EntryPathKeyType.SubTbr_Annotation); DataTrackingHelper.AddFirstAndSecondaryPath(DataTrackingHelper.FirstPath.Home, DataTrackingHelper.SecondaryPath.Stamp); DataTrackingHelper.IsClearEntryPath = true; DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Stamp"); break; case "Signature": DataTrackingHelper.SetSendInformation(DataTrackingHelper.EventType.Purchase_Annotation, DataTrackingHelper.EntryPathKeyType.SubTbr_Annotation); DataTrackingHelper.AddFirstAndSecondaryPath(DataTrackingHelper.FirstPath.Home, DataTrackingHelper.SecondaryPath.Sign); DataTrackingHelper.IsClearEntryPath = true; DataTrackingHelper.SendEvent(DataTrackingHelper.EventType.SubTbr_Annotation, "SubTbr_Btn", "Btn_SubTbr_Sign"); break; } } private void UncheckAnnot() { //取消选中注释工具按钮后,恢复到未编辑注释的状态 PropertyPanel.IsAddLink = false; //PropertyPanel.IsLocationLink = false; PDFViewer.DisableClearSelectAnnot(false); PDFViewer.ClearSelectAnnots(); PDFViewer.ToolManager.EnableClickCreate = false; PDFViewer.SetMouseMode(MouseModes.PanTool); ShowPropertyPanel(false); if (string.IsNullOrEmpty(StrAnnotToolChecked)) { events.GetEvent().Publish(new LinkAnnotTipCloseArgs() { UniCode = App.mainWindowViewModel.SelectedItem.Unicode }); } } //选中注释工具按钮时,处理的一些系列事情 private void MyToolCheckedDoing(Dictionary dict, string tag) { if (BtnHandIsChecked) BtnHandIsChecked = false; //选中取消问题待优化 2023/4/4 if (BtnSelecttoolIsChecked && tag != "SnapshotEdit") BtnSelecttoolIsChecked = false; PDFViewer.ClearSelectAnnots(); //选中内容选择工具按钮 if (tag == "SnapshotEdit") { dict["isSnapshotEdit"] = true; } else if (tag == "Signature" || tag == "Stamp") { //选中签名、图章工具按钮 dict["isTemplateAnnot"] = true; } //超链接工具 //if (tag != "Link") // BtnLinkIsChecked = false; //else // StrAnnotToolChecked = "Link"; if (tag != "Link") { events.GetEvent().Publish(new LinkAnnotTipCloseArgs() { UniCode = App.mainWindowViewModel.SelectedItem.Unicode }); //if (region.Regions.ContainsRegionWithName(viewContentViewModel.TipContentRegionName)) //{ // var views = region.Regions[viewContentViewModel.TipContentRegionName].Views; // Views.TipContent.LinkAnnotTip isHas = (Views.TipContent.LinkAnnotTip)views.FindFirst(q => q is Views.TipContent.LinkAnnotTip); // if (isHas != null) // { // viewContentViewModel.TipVisible = System.Windows.Visibility.Collapsed; // (isHas.DataContext as LinkAnnotPropertyViewModel).BtnLocationIsChecked = false; // } //} } if (tag == "Rect" || tag == "Circle" || tag == "Arrow" || tag == "Line") { //新建形状注释,设置默认大小 PDFViewer.ToolManager.EnableClickCreate = true; PDFViewer.ToolManager.ClickCreateWidth = 140; PDFViewer.ToolManager.ClickCreateHeight = 140; } else { PDFViewer.ToolManager.EnableClickCreate = false; } } #endregion 注释工具栏 -》Command实现 #region BOTA public AnnotationContentViewModel GetAnnotationContentViewModel(BOTAContentViewModel bOTAContentViewModel, out AnnotationContent annotation) { AnnotationContentViewModel viewModel = null; annotation = null; if (bOTAContentViewModel != null) { if (region.Regions.ContainsRegionWithName(bOTAContentViewModel.BOTAContentRegionName)) { var views = region.Regions[bOTAContentViewModel.BOTAContentRegionName].Views; foreach (var item in views) { if (item is AnnotationContent annotation1) { annotation = annotation1; viewModel = annotation1.DataContext as AnnotationContentViewModel; break; } } } } return viewModel; } /// /// 判断Bota的TabItem是否已显示 /// /// /// /// /// public bool IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, string tabItemText) { bool isTabItem = false; bOTAContentViewModel = null; bOTAContent = null; if (region.Regions.ContainsRegionWithName(ViewContentViewModel.BOTARegionName)) { var views = region.Regions[ViewContentViewModel.BOTARegionName].Views; var model = views.FirstOrDefault(q => q is BOTAContent); if (model is BOTAContent bOTAContent1) { bOTAContent = bOTAContent1; bOTAContentViewModel = bOTAContent.DataContext as BOTAContentViewModel; if (bOTAContentViewModel.CurrentBar == tabItemText) { isTabItem = true; } } } return isTabItem; } private void Select_Click(object sender, RoutedEventArgs e) { if (ViewContentViewModel.OpenBOTA == false) { ViewContentViewModel.OpenBOTA = true; } bool isBook = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemSearch"); if (isBook == false) { bOTAContent.TabItemSearch.IsSelected = true; } } #endregion BOTA #region 阅读页右键菜单 /// /// 空白处-右键菜单-添加注释 /// /// private void AddAnnotation_Click(object sender) { ViewContentViewModel.IsSelectedTextAddLink = false; if (sender is MenuItem menuItem) { StrAnnotToolChecked = ""; AnnotHandlerEventArgs annotHandler = null; string str = menuItem.Tag.ToString(); ViewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null); PropertyPanel.IsAddLink = false; PDFViewer.SetMouseMode(MouseModes.PanTool); ViewContentViewModel.IsRightMenuCreateLink = false; IsNoSelectMenu = true; isRightMenuAddAnnot = false; if (str == AddAnnotType.AnnotFreehand.ToString()) { isRightMenuAddAnnot = true; annotHandler = GetFreehand(); } if (str == AddAnnotType.AnnotFreeText.ToString()) { annotHandler = GetFreetext(); } if (str == AddAnnotType.AnnotSticky.ToString()) { annotHandler = GetStickyNote(); GetCurrentAnnot = annotHandler as StickyAnnotArgs; customStickyPopup.GetCurrentAnnot = GetCurrentAnnot; customStickyPopup.GetPDFViewer = PDFViewer; customStickyPopup.AnnotToolContentVM = this; } if (str == AddAnnotType.AnnotSquare.ToString()) { annotHandler = GetRect(); } if (str == AddAnnotType.AnnotCircle.ToString()) { annotHandler = GetCircle(); } if (str == AddAnnotType.AnnotArrow.ToString()) { annotHandler = GetArrowLine("Arrow"); } if (str == AddAnnotType.AnnotLine.ToString()) { annotHandler = GetArrowLine("Line"); } if (str == AddAnnotType.AnnotLink.ToString()) { PropertyPanel.IsAddLink = true; ViewContentViewModel.IsRightMenuCreateLink = true; annotHandler = GetLink(); } if (str == AddAnnotType.AnnotStamp.ToString()) { annotHandler = GetStamp(); } if (str == AddAnnotType.AnnotAutograph.ToString()) { annotHandler = GetSignature(); } if (annotHandler != null) { //是否展开右侧面板 =>否(链接、图章、签名除外) if (str == AddAnnotType.AnnotLink.ToString() || str == AddAnnotType.AnnotStamp.ToString() || str == AddAnnotType.AnnotAutograph.ToString() ) { ShowPropertyPanel(true); } else { ShowPropertyPanel(false); } annotHandler.Author = Settings.Default.AppProperties.Description.Author; PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(annotHandler); } } } /// /// 选择文本、图片,右键菜单 /// /// /// private void AnnotToolMenu_Click(object sender, RoutedEventArgs e) { ViewContentViewModel.IsSelectedTextAddLink = false; if (sender is MenuItem clickMenu && clickMenu.CommandParameter is AnnotCommandArgs) { AnnotCommandArgs annotCommand = clickMenu.CommandParameter as AnnotCommandArgs; switch (clickMenu.Tag.ToString()) { case "HighLight"://字体高亮 TextHighlightAnnotArgs highlightArgs = (TextHighlightAnnotArgs)GetHighLight(); highlightArgs.ClientRect = annotCommand.TextRect; highlightArgs.Content = annotCommand.Text; highlightArgs.Author = Settings.Default.AppProperties.Description.Author; PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(highlightArgs); PDFViewer.SetMouseMode(MouseModes.PanTool); ViewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null); break; case "UnderLine"://下划线 TextUnderlineAnnotArgs underlineArgs = (TextUnderlineAnnotArgs)GetUnderLine(); underlineArgs.ClientRect = annotCommand.TextRect; underlineArgs.Content = annotCommand.Text; underlineArgs.Author = Settings.Default.AppProperties.Description.Author; PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(underlineArgs); PDFViewer.SetMouseMode(MouseModes.PanTool); ViewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null); break; case "Strikeout"://删除线 TextStrikeoutAnnotArgs strikeoutArgs = (TextStrikeoutAnnotArgs)GetStrikeout(); strikeoutArgs.ClientRect = annotCommand.TextRect; strikeoutArgs.Content = annotCommand.Text; strikeoutArgs.Author = Settings.Default.AppProperties.Description.Author; PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(strikeoutArgs); PDFViewer.SetMouseMode(MouseModes.PanTool); ViewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null); break; case "Freetext"://文本 FreeTextAnnotArgs textArgs = (FreeTextAnnotArgs)GetFreetext(); textArgs.ClientRect = annotCommand.TextRect; //textArgs.Transparency = 1; //textArgs.BgColor = Colors.Transparent; //textArgs.LineColor = Colors.Red; //textArgs.LineWidth = 2; textArgs.TextContent = annotCommand.Text; PDFViewer.CreatePageAnnot(annotCommand.PageIndex, textArgs); break; case "StickyNote"://便签 StickyAnnotArgs stickyAnnotArgs = (StickyAnnotArgs)GetStickyNote(); //stickyAnnotArgs.ClientRect = annotCommand.TextRect; List textSelectNodes = PDFViewer.GetSelectTextInfo(); //stickyAnnotArgs.ClientRect = new Rect(textSelectNodes[0].StartPoint.X, annotCommand.TextRect.Y - annotCommand.TextRect.Height, annotCommand.TextRect.Width, annotCommand.TextRect.Height); Rect rect = annotCommand.TextRectList[0]; #region to do 转dpi //int dpi = DpiHelpers.Dpi; //double x = rect.X / 72D * dpi; //double y = (rect.Y - rect.Height) / 72D * dpi; //double width = rect.Width / 72D * dpi; //double height = rect.Height / 72D * dpi; #endregion to do 转dpi //stickyAnnotArgs.ClientRect = new Rect(x, y, width, height); //stickyAnnotArgs.ClientRect = new Rect(rect.X, rect.Y - rect.Height, rect.Width, rect.Height); stickyAnnotArgs.ClientRect = rect; //PDFViewer.CreatePageAnnot(annotCommand.PageIndex, stickyAnnotArgs); NavigationParameters param = new NavigationParameters(); param.Add(ParameterNames.PDFViewer, PDFViewer); param.Add(ParameterNames.StickyAnnotArgs, stickyAnnotArgs); param.Add(ParameterNames.ViewContentViewModel, ViewContentViewModel); param.Add(ParameterNames.AnnotCommandArgs, annotCommand); System.Windows.Controls.ContentControl window = null; if (PDFViewer.Parent as ContentControl != null) { window = PDFViewer.Parent as ContentControl; } else { window = App.Current.MainWindow; } var point = Mouse.GetPosition(window); ViewContentViewModel.NotePopupVisible = Visibility.Visible; ViewContentViewModel.CanvasNoteLeft = point.X; ViewContentViewModel.CanvasNoteBottom = point.Y; if (point.Y > window.ActualHeight / 2) { ViewContentViewModel.CanvasNoteBottom = point.Y - window.ActualHeight / 2; } ViewContentViewModel.IsNoteAdd = true; region.RequestNavigate(ViewContentViewModel.NotePopupRegionName, "StickyNotePopup", param); //stickyAnnotArgs.Author = Settings.Default.AppProperties.Description.Author; //PDFViewer.SetMouseMode(MouseModes.AnnotCreate); //PDFViewer.SetToolParam(stickyAnnotArgs); //PDFViewer.SetMouseMode(MouseModes.PanTool); break; case "Rect"://矩形 SquareAnnotArgs squareAnnotArgs = (SquareAnnotArgs)GetRect(); squareAnnotArgs.ClientRect = annotCommand.TextRect; PDFViewer.CreatePageAnnot(annotCommand.PageIndex, squareAnnotArgs); break; case "Circle"://圆 CircleAnnotArgs circleAnnotArgs = (CircleAnnotArgs)GetCircle(); circleAnnotArgs.ClientRect = annotCommand.TextRect; PDFViewer.CreatePageAnnot(annotCommand.PageIndex, circleAnnotArgs); break; case "Line"://线 LineAnnotArgs lineAnnotArgs = (LineAnnotArgs)GetArrowLine(clickMenu.Tag.ToString()); lineAnnotArgs.ClientRect = annotCommand.TextRect; lineAnnotArgs.LinePoints.Add(new Point(annotCommand.TextRect.Left, annotCommand.TextRect.Top)); lineAnnotArgs.LinePoints.Add(new Point(annotCommand.TextRect.Right, annotCommand.TextRect.Bottom)); PDFViewer.CreatePageAnnot(annotCommand.PageIndex, lineAnnotArgs); break; case "Link"://链接 //添加付费拦截锁 if (!ServiceHelper.IAPBeforeFunction()) { return; } LinkAnnotArgs linkArgs = new LinkAnnotArgs(); linkArgs.ClientRect = annotCommand.TextRect; linkArgs.URI = string.Empty; linkArgs.LinkType = LINK_TYPE.GOTO; //linkArgs.DestIndex = annotCommand.PageIndex; //PDFViewer.CreatePageAnnot(annotCommand.PageIndex, linkArgs); List lists = new List(); lists.Add(linkArgs); PropertyPanel.IsAddLink = true; ViewContentViewModel.IsRightMenuSelectedTextAddLink = true; AnnotHandlerEventArgs annotArgs = GetLink(lists); PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(annotArgs); ViewContentViewModel.IsPropertyOpen = true; //PDFViewer.SelectAnnotation(linkArgs.PageIndex, linkArgs.AnnotIndex); break; case "OutLine": bool isTabItemAnnotation = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemOutLine"); if (isTabItemAnnotation == false) { bOTAContent.TabItemOutLine.IsSelected = true; } OutLineControlViewModel outLineControlViewModel = GetOutLineControlViewModel(bOTAContentViewModel, out OutLineControl outLineControl); if (outLineControlViewModel != null && outLineControl != null) { string str = null; if (!string.IsNullOrEmpty(annotCommand.Text)) { str = annotCommand.Text; } #region 选择图片 //if (string.IsNullOrEmpty(annotCommand.Text)) //{ // str = (annotCommand.PageIndex + 1).ToString(); //} //else //{ // str = annotCommand.Text; //} #endregion 选择图片 outLineControl.AddOutlineNode(str); } break; case "ExportPicture": ExportPicture_MenuItemClick(); break; } if (clickMenu.Tag.ToString() != "Link") { ExitAnnotationTool(); } //ShowPropertyPanel(false); } } private void PageDisplay(ItemCollection items) { foreach (var item in items) { if (item is MenuItem menuItem) { menuItem.IsCheckable = false; menuItem.Click -= PageDisplay_Click; menuItem.Click += PageDisplay_Click; } } } private void PageDisplay_Click(object sender, RoutedEventArgs e) { if (sender is MenuItem menuItem) { switch (menuItem.Tag.ToString()) { case "SingleView": PDFViewer.ChangeViewMode(ViewMode.Single); break; case "SingleContinueView": PDFViewer.ChangeViewMode(ViewMode.SingleContinuous); break; case "DoubleView": PDFViewer.ChangeViewMode(ViewMode.Double); break; case "DoubleContinueView": PDFViewer.ChangeViewMode(ViewMode.DoubleContinuous); break; case "BookMode": PDFViewer.ChangeViewMode(ViewMode.Book); break; } } } private void ViewZoom(ItemCollection items) { foreach (var item in items) { if (item is MenuItem menuItem) { //switch (PDFViewer.ModeFit) //{ // case FitMode.FitWidth: // break; // case FitMode.FitHeight: // break; // case FitMode.FitSize: // break; // case FitMode.FitFree: // break; // default: // break; //} menuItem.IsCheckable = false; menuItem.Click -= ViewZoom_Click; menuItem.Click += ViewZoom_Click; } } } private void ViewZoom_Click(object sender, RoutedEventArgs e) { if (sender is MenuItem menuItem) { switch (menuItem.Tag.ToString()) { case "FitWidth": PDFViewer.ChangeFitMode(FitMode.FitWidth); break; case "FitHeight": PDFViewer.ChangeFitMode(FitMode.FitHeight); break; case "FitSize": PDFViewer.ChangeFitMode(FitMode.FitSize); break; case "enlarge": double newZoom = ViewContentViewModel.CheckZoomLevel((PDFViewer.ZoomFactor + 0.01), true); PDFViewer.Zoom(newZoom); break; case "narrow": newZoom = ViewContentViewModel.CheckZoomLevel((PDFViewer.ZoomFactor + -0.01), false); PDFViewer.Zoom(newZoom); break; } } } private void UnReadModel_Click(object sender, RoutedEventArgs e) { ViewContentViewModel.Off_ReadModel(); } private void ReadModel_Click(object sender, RoutedEventArgs e) { ViewContentViewModel.On_ReadMode(); } private void SetToolMode(ItemCollection items) { foreach (var item in items) { if (item is MenuItem menuItem) { menuItem.IsCheckable = false; menuItem.Click -= ToolMode_Click; menuItem.Click += ToolMode_Click; } } } private void ToolMode_Click(object sender, RoutedEventArgs e) { if (sender is MenuItem menuItem) { switch (menuItem.Tag.ToString()) { case "default": StrAnnotToolChecked = ""; PDFViewer.SetMouseMode(MouseModes.PanTool); HandToolIsCheckedEvent(false); BtnHandIsChecked = false; ShowPropertyPanel(false); break; case "roll": StrAnnotToolChecked = ""; HandToolIsCheckedEvent(true); BtnHandIsChecked = true; ShowPropertyPanel(false); break; case "content": AnnotHandlerEventArgs annotHandler = GetSnapshotEdit(); BtnSelecttoolIsChecked = true; if (annotHandler != null) { annotHandler.Author = Settings.Default.AppProperties.Description.Author; PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(annotHandler); ShowPropertyPanel(false); } break; default: break; } } } private void DelBookMark_Click(object sender, RoutedEventArgs e) { CheckBOTAState(out BOTAContentViewModel bOTAContentVM, out BOTAContent bOTA); if (ViewContentViewModel.mainViewModel.IsBookMode == false) { if (bOTAContentVM != null && bOTA != null) { BookmarkContentViewModel bookmarkContentViewModel = GetBookmarkContentViewModel(bOTAContentVM, out BookmarkContent bookmark); int index = PDFViewer.CurrentIndex; //检测是否已存在相同数据 if (PDFViewer.Document == null) return; if (PDFViewer.Document.GetBookmarkList().Count <= 0) return; CPDFBookmark list = PDFViewer.Document.GetBookmarkList().FirstOrDefault(q => q.PageIndex == index); if (bookmarkContentViewModel != null && bookmark != null && bOTA != null && list != null) { bookmarkContentViewModel.DeleteCommand.Execute(list); isAddBookMark = bookmarkContentViewModel.isAddBookMark; } } } else { this.events.GetEvent().Publish(new BookMarkArgs() { Unicode = App.mainWindowViewModel.SelectedItem.Unicode, IsReadMode = true }); } } private void CheckBOTAState(out BOTAContentViewModel bOTAContentVM, out BOTAContent bOTA) { if (ViewContentViewModel.OpenBOTA == false) { ViewContentViewModel.OpenBOTA = true; } bool isBook = IsBOTATabItemShow(out bOTAContentVM, out bOTA, "TabItemBookMark"); if (isBook == false) { bOTA.TabItemBookMark.IsSelected = true; } } private void AddBookMark_Click() { CheckBOTAState(out BOTAContentViewModel bOTAContentVM, out BOTAContent bOTA); if (ViewContentViewModel.mainViewModel.IsBookMode == false) { //if (viewContentViewModel.mainViewModel.IsBookMode) //{ // this.events.GetEvent().Publish(new ReadModeBOTAShowArgs() { Unicode = App.mainWindowViewModel.SelectedItem.Unicode, IsBOTAShow = true }); //} if (bOTAContentVM != null && bOTA != null) { AddBookMark(bOTAContentVM, bOTA); } //if (viewContentViewModel.mainViewModel.IsBookMode) //{ // AddBookMark(bOTAContentVM, bOTA); //} } else { this.events.GetEvent().Publish(new BookMarkArgs() { Unicode = App.mainWindowViewModel.SelectedItem.Unicode, IsReadMode = true }); } } private void AddBookMark(BOTAContentViewModel bOTAContentVM, BOTAContent bOTA) { BookmarkContentViewModel bookmarkContentViewModel = GetBookmarkContentViewModel(bOTAContentVM, out BookmarkContent bookmark); if (bookmarkContentViewModel != null && bookmark != null && bOTA != null) { //bookmarkContentViewModel.AddBookmarkCommand.Execute(bookmark.BookMarkListView); bookmark.BtnAddBookmark_Click(null, null); isAddBookMark = bookmarkContentViewModel.isAddBookMark; return; } } private BookmarkContentViewModel GetBookmarkContentViewModel(BOTAContentViewModel bOTAContentViewModel, out BookmarkContent bookmark) { BookmarkContentViewModel viewModel = null; bookmark = null; if (bOTAContentViewModel != null) { if (region.Regions.ContainsRegionWithName(bOTAContentViewModel.BOTAContentRegionName)) { var views = region.Regions[bOTAContentViewModel.BOTAContentRegionName].Views; foreach (var item in views) { if (item is BookmarkContent bookmark1) { bookmark = bookmark1; viewModel = bookmark1.DataContext as BookmarkContentViewModel; break; } } } } return viewModel; } private OutLineControlViewModel GetOutLineControlViewModel(BOTAContentViewModel bOTAContentViewModel, out OutLineControl outLineControl) { OutLineControlViewModel viewModel = null; outLineControl = null; if (bOTAContentViewModel != null) { if (region.Regions.ContainsRegionWithName(bOTAContentViewModel.BOTAContentRegionName)) { var views = region.Regions[bOTAContentViewModel.BOTAContentRegionName].Views; foreach (var item in views) { if (item is OutLineControl outLineControl1) { outLineControl = outLineControl1; viewModel = outLineControl1.DataContext as OutLineControlViewModel; break; } } } } return viewModel; } private void DisplayAnnot_Click(object sender, RoutedEventArgs e) { ViewContentViewModel.IsHiddenAnnot = false; PDFViewer.SetDrawAnnot(true); PDFViewer.ReloadVisibleAnnots(); BtnShowAnnotIsChecked = true; bool isTabItemAnnotation = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemAnnotation"); if (ViewContentViewModel.OpenBOTA == true && isTabItemAnnotation == true) { AnnotationContentViewModel viewModel = GetAnnotationContentViewModel(bOTAContentViewModel, out AnnotationContent annotation); viewModel.DisplayAnnot(); } //bota缩略图刷新 页面 events.GetEvent().Publish(new PageEditNotifyEventArgs(App.mainWindowViewModel.SelectedItem.Unicode)); } private void HiddenAnnot_Click(object sender, RoutedEventArgs e) { ViewContentViewModel.IsHiddenAnnot = true; PDFViewer.ClearSelectAnnots(); PDFViewer.SetDrawAnnot(false); PDFViewer.ReloadVisibleAnnots(); BtnShowAnnotIsChecked = false; bool isTabItemAnnotation = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemAnnotation"); if (ViewContentViewModel.OpenBOTA == true && isTabItemAnnotation == true) { AnnotationContentViewModel viewModel = GetAnnotationContentViewModel(bOTAContentViewModel, out AnnotationContent annotation); viewModel.HiddenAnnot(); } //bota缩略图刷新 页面 events.GetEvent().Publish(new PageEditNotifyEventArgs(App.mainWindowViewModel.SelectedItem.Unicode)); } private void SetAddAnnotation(ItemCollection items) { var separator = items[items.Count - 4]; InBookModeSetIsHidden(separator); foreach (var item in items) { if (item is MenuItem menuItem) { string str = menuItem.Tag.ToString(); if (str == AddAnnotType.AnnotLink.ToString() || str == AddAnnotType.AnnotStamp.ToString() || str == AddAnnotType.AnnotAutograph.ToString() ) { InBookModeSetIsHidden(menuItem); } menuItem.CommandParameter = item; menuItem.Command = SetAddAnnotationCommand; } } } //private void AddLink_Click(object sender, RoutedEventArgs e) //{ // var args = PDFViewer.ToolManager.CurrentAnnotArgs; // BtnLinkIsChecked = true; //} #endregion 阅读页右键菜单 #region 注释右键菜单事件 //高亮、下划线、删除 private void HightAnnotCopyText_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as AnnotHandlerEventArgs; if (annot != null) { System.Windows.Clipboard.SetText(annot.MarkupContent); } } } /// /// 更改为当前注释属性默认值 /// /// private void AnnotDefaultValues_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as AnnotHandlerEventArgs; if (annot != null) { if (annot is TextHighlightAnnotArgs textHighlight) { var color = textHighlight.Color; HighLightColor = new SolidColorBrush(color); Settings.Default.AppProperties.Annotate.HighLightColor = color; var hightlight = GetAnnotDefault(AnnotArgsType.AnnotHighlight); hightlight.ForgoundColor = color; hightlight.Opacity = textHighlight.Transparency; SettingHelper.SetAnnotDefaultProperty(hightlight); if (StrAnnotToolChecked == "HighLight") { TextHighlightAnnotArgs annotArgs = new TextHighlightAnnotArgs() { Color = textHighlight.Color, Transparency = textHighlight.Transparency }; PDFViewer.SetToolParam(annotArgs); } } else if (annot is TextUnderlineAnnotArgs textUnderline) { var color = textUnderline.Color; UnderLineColor = new SolidColorBrush(color); Settings.Default.AppProperties.Annotate.UnderLineColor = color; var Underline = GetAnnotDefault(AnnotArgsType.AnnotUnderline); Underline.ForgoundColor = color; Underline.Opacity = textUnderline.Transparency; SettingHelper.SetAnnotDefaultProperty(Underline); if (StrAnnotToolChecked == "UnderLine") { TextUnderlineAnnotArgs annotArgs = new TextUnderlineAnnotArgs() { Color = textUnderline.Color, Transparency = textUnderline.Transparency }; PDFViewer.SetToolParam(annotArgs); } } else if (annot is TextStrikeoutAnnotArgs textStrikeout) { var color = textStrikeout.Color; StrikeoutColor = new SolidColorBrush(color); Settings.Default.AppProperties.Annotate.StrikethroughColor = color; var Strikeout = GetAnnotDefault(AnnotArgsType.AnnotStrikeout); Strikeout.ForgoundColor = color; Strikeout.Opacity = textStrikeout.Transparency; SettingHelper.SetAnnotDefaultProperty(Strikeout); if (StrAnnotToolChecked == "Strikeout") { TextStrikeoutAnnotArgs annotArgs = new TextStrikeoutAnnotArgs() { Color = textStrikeout.Color, Transparency = textStrikeout.Transparency }; PDFViewer.SetToolParam(annotArgs); } } else if (annot is FreehandAnnotArgs freeHand) { //var freeHand = annot as FreehandAnnotArgs; var color = freeHand.InkColor; Settings.Default.AppProperties.Annotate.FreeHandColor = color; var FreehandDefault = GetAnnotDefault(AnnotArgsType.AnnotFreehand); FreehandDefault.ForgoundColor = color; FreehandDefault.Opacity = freeHand.Transparency; FreehandDefault.Thickness = freeHand.LineWidth; var isSolid = AnnotTransfer.IsSolidStyle(freeHand.LineDash); if (isSolid) { FreehandDefault.DashArray = null; } else { FreehandDefault.DashArray = new List(); foreach (var item in freeHand.LineDash.Dashes) { FreehandDefault.DashArray.Add(item); } } SettingHelper.SetAnnotDefaultProperty(FreehandDefault); if (StrAnnotToolChecked == "Freehand") { FreehandAnnotArgs annotArgs = new FreehandAnnotArgs() { InkColor = freeHand.InkColor, Transparency = freeHand.Transparency, LineWidth = freeHand.LineWidth, LineDash = freeHand.LineDash }; PDFViewer.SetToolParam(annotArgs); } } else if (annot is FreeTextAnnotArgs freeText) { //var freeText = annot as FreeTextAnnotArgs; Settings.Default.AppProperties.Annotate.TextAnnoteColor = freeText.FontColor; Settings.Default.AppProperties.Annotate.TextFontFamaily = freeText.FontName; Settings.Default.AppProperties.Annotate.TextAlign = freeText.Align; var FreeTextDefalut = GetAnnotDefault(AnnotArgsType.AnnotFreeText); FreeTextDefalut.ForgoundColor = freeText.FontColor; FreeTextDefalut.FontFamily = freeText.FontName; FreeTextDefalut.TextAlign = freeText.Align; FreeTextDefalut.FontSize = freeText.FontSize; FreeTextDefalut.FontWeight = freeText.IsBold ? FontWeights.Bold : FontWeights.Normal; FreeTextDefalut.FontStyle = freeText.IsItalic ? FontStyles.Italic : FontStyles.Normal; FreeTextDefalut.BackgroundColor = freeText.BgColor; FreeTextDefalut.Opacity = (annot as FreeTextAnnotArgs).Transparency; SettingHelper.SetAnnotDefaultProperty(FreeTextDefalut); if (StrAnnotToolChecked == "Freetext") { FreeTextAnnotArgs freeTextAnnotArgs = new FreeTextAnnotArgs() { FontColor = freeText.FontColor, FontName = freeText.FontName, Align = freeText.Align, FontSize = freeText.FontSize, IsBold = freeText.IsBold, IsItalic = freeText.IsItalic, BgColor = freeText.BgColor, Transparency = (annot as FreeTextAnnotArgs).Transparency }; PDFViewer.SetToolParam(freeTextAnnotArgs); } } else if (annot is StickyAnnotArgs stickyAnnotArgs) { var color = stickyAnnotArgs.Color; Settings.Default.AppProperties.Annotate.NoteAnnoteColor = color; var StickyDefalut = GetAnnotDefault(AnnotArgsType.AnnotSticky); StickyDefalut.ForgoundColor = color; StickyDefalut.NoteIcon = stickyAnnotArgs.IconName; SettingHelper.SetAnnotDefaultProperty(StickyDefalut); if (StrAnnotToolChecked == "StickyNote") { StickyAnnotArgs annotArgs = new StickyAnnotArgs() { Color = stickyAnnotArgs.Color, IconName = stickyAnnotArgs.IconName, Transparency = stickyAnnotArgs.Transparency, Author = Settings.Default.AppProperties.Description.Author }; PDFViewer.SetToolParam(annotArgs); } } else if (annot is SquareAnnotArgs squareAnnot) { //var square = annot as SquareAnnotArgs; var bgColor = squareAnnot.BgColor; Settings.Default.AppProperties.Annotate.RectangleFillColor = bgColor; var borderColor = squareAnnot.LineColor; Settings.Default.AppProperties.Annotate.RectangleBorderColor = borderColor; var SquareDefalut = GetAnnotDefault(AnnotArgsType.AnnotSquare); SquareDefalut.BorderColor = borderColor; SquareDefalut.BackgroundColor = bgColor; SquareDefalut.Opacity = squareAnnot.Transparency; SquareDefalut.Thickness = squareAnnot.LineWidth; var isSolid = AnnotTransfer.IsSolidStyle(squareAnnot.LineDash); if (isSolid) { SquareDefalut.DashArray = null; } else { SquareDefalut.DashArray = new List(); foreach (var item in squareAnnot.LineDash.Dashes) { SquareDefalut.DashArray.Add(item); } } SettingHelper.SetAnnotDefaultProperty(SquareDefalut); if (PropertyPanel.SharpsAnnot == "Rect" && StrAnnotToolChecked == "Rect") { SquareAnnotArgs annotArgs = new SquareAnnotArgs() { BgColor = squareAnnot.BgColor, LineColor = squareAnnot.LineColor, Transparency = squareAnnot.Transparency, LineWidth = squareAnnot.LineWidth, LineDash = squareAnnot.LineDash }; PDFViewer.SetToolParam(annotArgs); } } else if (annot is CircleAnnotArgs circleAnnot) { //var circle = annot as CircleAnnotArgs; var bgColor = circleAnnot.BgColor; Settings.Default.AppProperties.Annotate.CircleFillColor = bgColor; var borderColor = circleAnnot.LineColor; Settings.Default.AppProperties.Annotate.CircleBorderColor = borderColor; var CircleDefalut = GetAnnotDefault(AnnotArgsType.AnnotCircle); CircleDefalut.BorderColor = borderColor; CircleDefalut.BackgroundColor = bgColor; CircleDefalut.Opacity = circleAnnot.Transparency; CircleDefalut.Thickness = circleAnnot.LineWidth; var isSolid = AnnotTransfer.IsSolidStyle(circleAnnot.LineDash); if (isSolid) { CircleDefalut.DashArray = null; } else { CircleDefalut.DashArray = new List(); foreach (var item in circleAnnot.LineDash.Dashes) { CircleDefalut.DashArray.Add(item); } } SettingHelper.SetAnnotDefaultProperty(CircleDefalut); if (PropertyPanel.SharpsAnnot == "Circle" && StrAnnotToolChecked == "Rect") { CircleAnnotArgs annotArgs = new CircleAnnotArgs() { BgColor = circleAnnot.BgColor, LineColor = circleAnnot.LineColor, Transparency = circleAnnot.Transparency, LineWidth = circleAnnot.LineWidth, LineDash = circleAnnot.LineDash }; PDFViewer.SetToolParam(annotArgs); } } else if (annot is LineAnnotArgs lineAnnotArgs) { var color = lineAnnotArgs.LineColor; var lineDefalut = GetAnnotDefault(AnnotArgsType.AnnotLine); //箭头 if (lineAnnotArgs.HeadLineType >= (C_LINE_TYPE)1 || lineAnnotArgs.TailLineType >= (C_LINE_TYPE)1) { Settings.Default.AppProperties.Annotate.ArrowColor = color; lineDefalut.HeadLineType = lineAnnotArgs.HeadLineType; lineDefalut.TailLineType = lineAnnotArgs.TailLineType; if (PropertyPanel.SharpsAnnot == "Arrow" && StrAnnotToolChecked == "Rect") { LineAnnotArgs annotArgs = new LineAnnotArgs() { LineColor = lineAnnotArgs.LineColor, Transparency = lineAnnotArgs.Transparency, LineWidth = lineAnnotArgs.LineWidth, LineDash = lineAnnotArgs.LineDash, HeadLineType = lineAnnotArgs.HeadLineType, TailLineType = lineAnnotArgs.TailLineType }; PDFViewer.SetToolParam(annotArgs); } } else { Settings.Default.AppProperties.Annotate.LineColor = color; if (PropertyPanel.SharpsAnnot == "Line" && StrAnnotToolChecked == "Rect") { LineAnnotArgs annotArgs = new LineAnnotArgs() { LineColor = lineAnnotArgs.LineColor, Transparency = lineAnnotArgs.Transparency, LineWidth = lineAnnotArgs.LineWidth, LineDash = lineAnnotArgs.LineDash, HeadLineType = lineAnnotArgs.HeadLineType, TailLineType = lineAnnotArgs.TailLineType }; PDFViewer.SetToolParam(annotArgs); } } lineDefalut.BorderColor = color; lineDefalut.Opacity = lineAnnotArgs.Transparency; lineDefalut.Thickness = lineAnnotArgs.LineWidth; var isSolid = AnnotTransfer.IsSolidStyle(lineAnnotArgs.LineDash); if (isSolid) { lineDefalut.DashArray = null; } else { lineDefalut.DashArray = new List(); foreach (var item in lineAnnotArgs.LineDash.Dashes) { lineDefalut.DashArray.Add(item); } } SettingHelper.SetAnnotDefaultProperty(lineDefalut); //if ((PropertyPanel.SharpsAnnot == "Arrow" || PropertyPanel.SharpsAnnot == "Line") && StrAnnotToolChecked == "Rect") //{ // LineAnnotArgs annotArgs = new LineAnnotArgs() // { // LineColor = lineAnnotArgs.LineColor, // Transparency = lineAnnotArgs.Transparency, // LineWidth = lineAnnotArgs.LineWidth, // LineDash = lineAnnotArgs.LineDash, // HeadLineType = lineAnnotArgs.HeadLineType, // TailLineType = lineAnnotArgs.TailLineType // }; // PDFViewer.SetToolParam(annotArgs); //} } Settings.Default.Save(); PropertyPanel.annot = annot; PropertyPanel.SaveLastAnnot(); } } } private DefaultAnnotProperty GetAnnotDefault(AnnotArgsType annotArgsType) { var Annot = SettingHelper.GetAnnotDefaultProperty(annotArgsType); if (Annot == null) { Annot = new DefaultAnnotProperty(); Annot.AnnotToolType = annotArgsType; } return Annot; } private System.Windows.Controls.Primitives.Popup popup = null; //更改颜色 private async void AnnotColorPalette_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as AnnotHandlerEventArgs; if (annot != null) { var item = new ColorDropBoxPop(); item.DataContext = menu; item.ColorSelected -= AnnotMenu_ColorSelected; item.ColorSelected += AnnotMenu_ColorSelected; if (popup == null) popup = new System.Windows.Controls.Primitives.Popup(); ContentControl window = null; if (PDFViewer.Parent as ContentControl != null) window = PDFViewer.Parent as ContentControl; else window = App.Current.MainWindow; popup.Child = item; popup.PlacementRectangle = new Rect(Mouse.GetPosition(window), new Size(item.Width, item.Height)); popup.Placement = System.Windows.Controls.Primitives.PlacementMode.MousePoint; popup.PlacementTarget = window; popup.IsOpen = true; Window parentWnd = Window.GetWindow(App.Current.MainWindow); if (parentWnd != null) { parentWnd.MouseDown -= parentWnd_MouseDown; parentWnd.MouseDown += parentWnd_MouseDown; } while (popup.IsOpen) await Task.Delay(20); parentWnd.MouseDown -= parentWnd_MouseDown; popup = null; } } } private void parentWnd_MouseDown(object sender, MouseButtonEventArgs e) { var ui = Mouse.DirectlyOver as FrameworkElement; if (ui != null) { if (popup != null) { popup.IsOpen = false; } } } private void AnnotMenu_ColorSelected(object sender, Color e) { if (sender != null) { var menu = (sender as FrameworkElement).DataContext as CusMenuItem; if (menu == null) return; var annot = menu.Parameter as AnnotHandlerEventArgs; if (annot != null) { if (annot is FreehandAnnotArgs || annot is StickyAnnotArgs || annot is LineAnnotArgs) { var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); AnnotEvent?.UpdateAttrib(AnnotAttrib.Color, e); AnnotEvent?.UpdateAnnot(); } else if (annot is FreeTextAnnotArgs) { var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); if (menu.tag.ToString() == "FontColor") AnnotEvent?.UpdateAttrib(AnnotAttrib.FontColor, e); else AnnotEvent?.UpdateAttrib(AnnotAttrib.FillColor, e); AnnotEvent?.UpdateAnnot(); } else if (annot is SquareAnnotArgs || annot is CircleAnnotArgs) { var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); if (menu.tag.ToString() == "FillColor") AnnotEvent?.UpdateAttrib(AnnotAttrib.FillColor, e); else AnnotEvent?.UpdateAttrib(AnnotAttrib.Color, e); AnnotEvent?.UpdateAnnot(); } else if (annot is TextHighlightAnnotArgs || annot is TextUnderlineAnnotArgs || annot is TextStrikeoutAnnotArgs) { var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); AnnotEvent?.UpdateAttrib(AnnotAttrib.Color, e); AnnotEvent?.UpdateAnnot(); } } } } //添加笔记 private void AnnotAddNoteText_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as AnnotHandlerEventArgs; PopAnnotNoteText(annot); } } private void PopAnnotNoteText(AnnotHandlerEventArgs annot) { if (annot != null) { AnnotationHandlerEventArgs args = new AnnotationHandlerEventArgs(); args.ClientRect = annot.ClientRect; args.AnnotHandlerEventArgs = annot; args.PageIndex = annot.PageIndex; args.AnnotIndex = annot.AnnotIndex; args.EventType = annot.EventType; args.CreateTime = annot.CreateTime; args.UpdateTime = annot.UpdateTime; args.Content = annot.Content; args.MarkupContent = annot.MarkupContent; args.Author = annot.Author; args.Locked = annot.Locked; args.ReadOnly = annot.ReadOnly; args.FormField = annot.FormField; args.Document = PDFViewer.Document; DialogParameters value = new DialogParameters(); value.Add(ParameterNames.Annotation, args); dialogs.ShowDialog(DialogNames.AddAnnotationDialog, value, e => { if (e.Result == ButtonResult.OK && e.Parameters != null) { PDFViewer.UndoManager.CanSave = true; if (e.Parameters.ContainsKey(ParameterNames.Annotation) && e.Parameters.ContainsKey(ParameterNames.AnnotEvent)) { AnnotationHandlerEventArgs annotation = e.Parameters.GetValue(ParameterNames.Annotation); //RefreshOneListItem(annotation.AnnotHandlerEventArgs); events.GetEvent().Publish(new RefreshAnnotArgs() { Unicode = App.mainWindowViewModel.SelectedItem.Unicode, Annotation = annotation }); } } }); } } //手绘 private void FreeHandLineStyle_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as FreehandAnnotArgs; if (annot != null) { var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); if (menu.tag.ToString() == "Solid") { AnnotEvent?.UpdateAttrib(AnnotAttrib.LineStyle, AnnotTransfer.GetLineDashStyle(true)); } else { AnnotEvent?.UpdateAttrib(AnnotAttrib.LineStyle, AnnotTransfer.GetLineDashStyle(false)); } AnnotEvent?.UpdateAnnot(); } } } //文本 private void FreeTextFontFamily_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as AnnotHandlerEventArgs; if (annot != null) { var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); AnnotEvent?.UpdateAttrib(AnnotAttrib.FontName, menu.tag.ToString()); AnnotEvent?.UpdateAnnot(); } } } private void FreeTextAglin_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as AnnotHandlerEventArgs; var tag = menu.control.Tag; if (annot != null && tag != null) { var strTag = tag.ToString(); var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); if (strTag == "Left") { AnnotEvent?.UpdateAttrib(AnnotAttrib.TextAlign, TextAlignment.Left); } else if (strTag == "Center") { AnnotEvent?.UpdateAttrib(AnnotAttrib.TextAlign, TextAlignment.Center); } else if (strTag == "Right") { AnnotEvent?.UpdateAttrib(AnnotAttrib.TextAlign, TextAlignment.Right); } else if (strTag == "Justify") { AnnotEvent?.UpdateAttrib(AnnotAttrib.TextAlign, TextAlignment.Justify); } AnnotEvent?.UpdateAnnot(); } } } //便签 private void StrikeNoteEditStrike_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as AnnotHandlerEventArgs; if (annot != null) { var sticky = annot as StickyAnnotArgs; sticky.PopupEditWnd(); #region 设计重新调整,阅读页空白处,右键菜单,添加链接需要显示,其他和pro mac一样的效果,不显示属性栏 //isRightMenuAddAnnot = false; #endregion 设计重新调整,阅读页空白处,右键菜单,添加链接需要显示,其他和pro mac一样的效果,不显示属性栏 } } } //形状 private void ShapeLineStyle_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as AnnotHandlerEventArgs; var tag = menu.control.Tag; if (annot != null && tag != null) { var strTag = tag.ToString(); var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); if (strTag == "Solid") { var dashStyle = AnnotTransfer.GetLineDashStyle(true); AnnotEvent?.UpdateAttrib(AnnotAttrib.LineStyle, dashStyle); } else { var dashStyle = AnnotTransfer.GetLineDashStyle(false); AnnotEvent?.UpdateAttrib(AnnotAttrib.LineStyle, dashStyle); } AnnotEvent?.UpdateAnnot(); } } } private void ShapeLineDirect_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as LineAnnotArgs; var tag = menu.control.Tag; if (annot != null && tag != null) { var strTag = tag.ToString(); var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer); if (strTag == "Ver") { annot.SetLineVertical(); } else { annot.SetLineHorizontal(); } } } } private void Link_Menu(object obj) { if (obj is CusMenuItem menuItem) { if (menuItem.Parameter is LinkAnnotArgs linkAnnotArgs) { var result = PDFViewer.RemovePageAnnot(linkAnnotArgs.PageIndex, linkAnnotArgs.AnnotIndex); if (result) { ViewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null); bool isTabItemAnnotation = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemAnnotation"); if (isTabItemAnnotation) { AnnotationContentViewModel viewModel = GetAnnotationContentViewModel(bOTAContentViewModel, out AnnotationContent annotation); if (viewModel != null) { viewModel.DeleteModifiedAnnot(linkAnnotArgs.PageIndex, linkAnnotArgs.AnnotIndex); } } } } } } //图章 private void StampExportPicture_Menu(object obj) { if (obj as CusMenuItem != null) { var menu = obj as CusMenuItem; var annot = menu.Parameter as StampAnnotArgs; if (annot != null) { Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog(); var format = menu.tag.ToString(); if (format == "PDF") dlg.Filter = "PDF|*.pdf"; else dlg.Filter = format + "|*." + format.ToLower(); dlg.DefaultExt = "." + menu.tag.ToString().ToLower(); dlg.FileName = PDFViewer.Document.FileName; if (dlg.ShowDialog() == true) { var stampPicture = dlg.FileName; if (menu.tag.ToString() == "PDF") { try { var writeStamp = annot.GetStampDrawing(); var tempDoc = new CPDFViewer(); tempDoc.CreateDocument(); if (tempDoc.Document == null) { AlertsMessage alertsMessage = new AlertsMessage(); alertsMessage.ShowDialog("", App.MainPageLoader.GetString("Create PDF failed"), App.ServiceLoader.GetString("Text_ok")); return; } byte[] buffer = new byte[writeStamp.PixelWidth * writeStamp.PixelHeight * 4]; writeStamp.CopyPixels(buffer, writeStamp.PixelWidth * 4, 0); tempDoc.Document.InsertPage(0, writeStamp.PixelWidth, writeStamp.PixelHeight, buffer, CPDFDocumentImageMode.CPDFDocumentImageModeScaleAspectFit); var result = tempDoc.Document.WriteToFilePath(dlg.FileName); if (result) { } } catch { } #region //之前的方法1 //var encoder = new PngBitmapEncoder(); //encoder.Frames.Add(BitmapFrame.Create(writeStamp)); //using (var memoryStream = new MemoryStream()) //{ // encoder.Save(memoryStream); // buffer = memoryStream.ToArray(); //} //tempDoc.Document.InsertPage(0, writeStamp.PixelWidth, writeStamp.PixelHeight, buffer, CPDFDocumentImageMode.CPDFDocumentImageModeScaleAspectFit); //var result = tempDoc.Document.WriteToFilePath(dlg.FileName); //if (result) //{ //} //之前的方法2 //string imagePath = SaveImage(writeStamp); //if (CreateFile(imagePath, tempDoc)) //{ // bool result = tempDoc.Document.WriteToFilePath(dlg.FileName); //} #endregion 注释右键菜单事件 } else { var writeStamp = annot.GetStampDrawing(); using (FileStream stream5 = new FileStream(stampPicture, FileMode.Create)) { PngBitmapEncoder encoder5 = new PngBitmapEncoder(); encoder5.Frames.Add(BitmapFrame.Create(writeStamp)); encoder5.Save(stream5); } } CommonHelper.ExplorerFile(dlg.FileName); } } } } private string SaveImage(WriteableBitmap wtbBmp) { string isSave = null; if (wtbBmp == null) { return isSave; } try { DirectoryInfo tempfolder = new DirectoryInfo(Path.Combine(App.CurrentPath, "Temp")); string strpath = Path.Combine(tempfolder.FullName, DateTime.Now.ToString("yyyyMMddfff") + ".jpg"); if (!File.Exists(tempfolder.FullName)) { Directory.CreateDirectory(tempfolder.FullName); } using (FileStream stream = new FileStream(strpath, FileMode.Create)) { JpegBitmapEncoder bitmapEncoder = new JpegBitmapEncoder(); bitmapEncoder.Frames.Add(BitmapFrame.Create(wtbBmp)); bitmapEncoder.Save(stream); isSave = strpath; } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); isSave = null; } return isSave; } public bool CreateFile(string imagePath = null, CPDFViewer saveToPDFViewer = null) { string fileName = null; //saveToPDFViewer.CreateDocument(); //if (saveToPDFViewer.Document == null) //{ // AlertsMessage alertsMessage = new AlertsMessage(); // alertsMessage.ShowDialog("", App.MainPageLoader.GetString("Create PDF failed"), App.ServiceLoader.GetString("Text_ok")); // return false; //} if (string.IsNullOrEmpty(imagePath)) { fileName = "Blank Page.pdf"; //默认插入595*842 大小的页面 saveToPDFViewer.Document.InsertPage(0, 595, 842, null); } else { fileName = imagePath.Substring(imagePath.LastIndexOf("\\") + 1, imagePath.LastIndexOf(".") - imagePath.LastIndexOf("\\") - 1) + ".pdf"; System.Drawing.Bitmap pic = new System.Drawing.Bitmap(imagePath); int width = pic.Size.Width; int height = pic.Size.Height; string ex = System.IO.Path.GetExtension(imagePath); //其他格式或者名称中含空格的图片 在本地先转存一下 if ((ex != ".jpg" && ex != ".jpeg") || !Uri.IsWellFormedUriString(imagePath, UriKind.Absolute)) { //将其他格式图片转换成jpg string folderPath = Path.GetTempPath(); if (File.Exists(folderPath)) { File.Delete(folderPath); } DirectoryInfo tempfolder = new DirectoryInfo(folderPath); if (!tempfolder.Exists) { tempfolder.Create(); } string targetPath = System.IO.Path.Combine(folderPath, Guid.NewGuid().ToString()); imagePath = targetPath; pic.Save(targetPath, ImageFormat.Jpeg); } pic.Dispose(); var result = saveToPDFViewer.Document.InsertPage(0, width, height, imagePath); if (!result) { AlertsMessage alertsMessage = new AlertsMessage(); alertsMessage.ShowDialog("", App.MainPageLoader.GetString("Create PDF failed"), App.ServiceLoader.GetString("Text_ok")); return false; } } return true; } #endregion 注释右键菜单事件 #region 快捷键 private void ShortCut_KeyDown(object sender, KeyEventArgs e) { //之前取消逻辑 // if (KeyEventsHelper.IsSingleKey(Key.Escape)) // { // if (StrAnnotToolChecked != "Freetext") // { // ExitAnnotationTool(); // } // else if (StrAnnotToolChecked == "Freetext") // { // if (PDFViewer.ToolManager.CurrentAnnotArgs is FreeTextAnnotArgs textAnnotArgs) // { // if (PDFViewer.ToolManager.HasTool) // { // PDFViewer.RemoveTool(true); // } // else // { // ExitAnnotationTool(); // } // } // } // } // if (e.Key == Key.Escape) { if (PropertyPanel != null) { PropertyPanel.IsAddLink = false; } if (PDFViewer != null) { if (PDFViewer.GetSelectImageCount() > 0) { IsSelectImage = true; PDFViewer.ClearImage(); } if (PDFViewer.MouseMode == MouseModes.AnnotCreate) { if (PDFViewer.ToolManager != null && PDFViewer.ToolManager.CurrentAnnotArgs != null) { AnnotHandlerEventArgs annotArgs = PDFViewer.ToolManager.CurrentAnnotArgs; switch (annotArgs.EventType) { case AnnotArgsType.AnnotErase: case AnnotArgsType.AnnotLine: case AnnotArgsType.AnnotSquare: case AnnotArgsType.AnnotCircle: //case AnnotArgsType.AnnotSticky: Trace.WriteLine(StrAnnotToolChecked); if (PDFViewer.ToolManager.HasTool) { PDFViewer.RemoveTool(false); IsCreateAnnot = true; } else { ExitAnnotationTool(); } break; case AnnotArgsType.AnnotFreeText: if (PDFViewer.ToolManager.HasTool == false) { ExitAnnotationTool(); } else { PDFViewer.RemoveTool(true); } break; case AnnotArgsType.AnnotSticky: if (PDFViewer.ToolManager.HasTool) { //PDFViewer.RemoveTool(false); events.GetEvent().Subscribe(UnStickyNote, q => q.Unicode == Unicode); } else { ExitAnnotationTool(); } break; case AnnotArgsType.AnnotHighlight: case AnnotArgsType.AnnotUnderline: case AnnotArgsType.AnnotStrikeout: case AnnotArgsType.AnnotStamp: case AnnotArgsType.AnnotFreehand: ExitAnnotationTool(); break; case AnnotArgsType.AnnotLink: //ExitAnnotationTool(); if (PDFViewer.ToolManager.HasTool) { PDFViewer.RemoveTool(false); } ExitAnnotationTool(); events.GetEvent().Publish(new LinkAnnotTipCloseArgs() { UniCode = App.mainWindowViewModel.SelectedItem.Unicode }); break; case AnnotArgsType.AnnotSelectTool: //if(viewContentViewModel.mainViewModel.IsBookMode==false) //{ // ExitAnnotationTool(false); //} BottomToolContent bottomTool = null; BottomToolContentViewModel bottomToolVM = ViewContentViewModel.GetBottomToolContentVM(ref bottomTool); if (bottomToolVM != null) { if (bottomToolVM.IsShowViewModular) { ExitAnnotationTool(false); } else { ExitAnnotationTool(); } } else { ExitAnnotationTool(); } break; } } } else { //避免编辑功能ESC快捷键冲突 if (PDFViewer.MouseMode != MouseModes.PDFEdit) { ExitAnnotationTool(); } } } } else if (KeyEventsHelper.IsModifierKey(ModifierKeys.Shift, Key.None)) { //按住Shift等比缩放 } else if (e.Key == Key.F && e.KeyboardDevice.Modifiers == ModifierKeys.Control) { if (ViewContentViewModel.OpenBOTA == false) { ViewContentViewModel.OpenBOTA = true; } bool isBook = IsBOTATabItemShow(out BOTAContentViewModel bOTAContentViewModel, out BOTAContent bOTAContent, "TabItemSearch"); if (isBook == false) { bOTAContent.TabItemSearch.IsSelected = true; } } AnnotToolCtrlAltKey(); } private void UnStickyNote(StickyNoteArgs obj) { if (PDFViewer.MouseMode == MouseModes.AnnotCreate) { if (PDFViewer.ToolManager != null && PDFViewer.ToolManager.CurrentAnnotArgs != null) { if (string.IsNullOrEmpty(obj.Text)) { PDFViewer.RemoveTool(false); } else { } } } } public void ExitAnnotationTool(bool isShow = true) { if (isShow) { ViewContentViewModel.IsReadModeShow = false; ViewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null); ShowPropertyPanel(false); } else { ViewContentViewModel.IsReadModeShow = true; } PDFViewer.SetMouseMode(MouseModes.AnnotCreate); var annotArgs = new SelectToolArgs(); PDFViewer.SetToolParam(annotArgs); //PDFViewer.SetMouseMode(MouseModes.PanTool); PDFViewer.DisableClearSelectAnnot(false); PDFViewer.ClearSelectAnnots(); StrAnnotToolChecked = ""; BtnHandIsChecked = false; } /// /// 按下Ctrl + Alt + 序列键,响应注释工具 /// private void AnnotToolCtrlAltKey() { var tuple = GetCtrlAltKey(); if (tuple != null && PDFViewer != null) { //进入快捷键时清除选中 PDFViewer.ClearSelectAnnots(); if (tuple.Item1 == Key.L) BtnLinkIsChecked = false; if (tuple.Item2 == "Eraser") { CreateEraseArgs(); StrAnnotToolChecked = "Freehand"; return; } AnnotHandlerEventArgs annotArgs = null; //注释 快捷键 第一次选中对应的,第二次取消选中 if (StrAnnotToolChecked == tuple.Item2) { StrAnnotToolChecked = ""; UncheckAnnot(); } else { StrAnnotToolChecked = tuple.Item2; FindAnnotTypeKey(tuple.Item2, ref annotArgs); if (annotArgs != null && tuple.Item2 != "Stamp") { annotArgs.Author = Settings.Default.AppProperties.Description.Author; PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(annotArgs); PDFViewer.ToolManager.EnableClickCreate = false; } else { //2023/4/6 设置Stamp刚进入时点击view出现空的选中方框 //PDFViewer.SetMouseMode(MouseModes.None); //解决 注释 工具 图章,不选中注释的bug PDFViewer.SetMouseMode(MouseModes.AnnotCreate); PDFViewer.SetToolParam(new SelectToolArgs()); } } } } private Tuple GetCtrlAltKey() { Dictionary AnnotToolDir = new Dictionary(); AnnotToolDir.Add(Key.H, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.H)); AnnotToolDir.Add(Key.U, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.U)); AnnotToolDir.Add(Key.S, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.S)); AnnotToolDir.Add(Key.P, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.P)); AnnotToolDir.Add(Key.E, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.E)); AnnotToolDir.Add(Key.T, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.T)); AnnotToolDir.Add(Key.N, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.N)); AnnotToolDir.Add(Key.R, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.R)); AnnotToolDir.Add(Key.O, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.O)); AnnotToolDir.Add(Key.A, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.A)); AnnotToolDir.Add(Key.L, KeyEventsHelper.IsModifierKey(ModifierKeys.Control | ModifierKeys.Alt, Key.L)); Key key = Key.None; foreach (var item in AnnotToolDir.Keys) { if (AnnotToolDir[item] == true) { key = item; break; } } if (key == Key.None) return null; var tag = ""; if (key == Key.H || key == Key.U || key == Key.S) { //判断是否选中文字 //var str = PDFViewer.GetSelectedText(); //if (string.IsNullOrEmpty(str) == false) { if (key == Key.H) tag = "HighLight"; else if (key == Key.U) tag = "UnderLine"; else if (key == Key.S) tag = "Strikeout"; } //else //{ // return null; //} } else { if (AnnotToolDir[Key.P]) tag = "Freehand"; else if (AnnotToolDir[Key.T]) tag = "Freetext"; else if (AnnotToolDir[Key.N]) tag = "StickyNote"; else if (AnnotToolDir[Key.R]) tag = "RectKey"; else if (AnnotToolDir[Key.O]) tag = "Circle"; else if (AnnotToolDir[Key.A]) tag = "Arrow"; else if (AnnotToolDir[Key.L]) tag = "Line"; else if (AnnotToolDir[Key.E]) tag = "Eraser"; } if (tag == "") return null; return new Tuple(key, tag); } #endregion 快捷键 #region Navigation public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { StrAnnotToolChecked = ""; //UnBindingPDFViewerHandler(); //UnBindingEvent(); } public void OnNavigatedTo(NavigationContext navigationContext) { //链接 框 的 样式 SolidColorBrush solidColorBrush = new SolidColorBrush(System.Windows.Media.Color.FromArgb(50, 23, 112, 244)); SolidColorBrush solidColorPen = new SolidColorBrush(System.Windows.Media.Color.FromRgb(23, 112, 244)); CommonDrawData.LinkPen = new System.Windows.Media.Pen(solidColorPen, 0); CommonDrawData.LinkBrush = solidColorBrush; CommonDrawData.LinkAreaSelectPen = new System.Windows.Media.Pen(solidColorBrush, 0); CommonDrawData.LinkAreaSelectBrush = solidColorBrush; ViewContentViewModel viewModel; navigationContext.Parameters.TryGetValue(ParameterNames.ViewContentViewModel, out viewModel); navigationContext.Parameters.TryGetValue(ParameterNames.PDFViewer, out PDFViewer); ViewContentViewModel = viewModel; if (ViewContentViewModel != null) { OpenFileInfo = ViewContentViewModel.OpenFileInfo; ViewContentViewModel.PropertyChanged -= ViewContentViewModel_PropertyChanged; ViewContentViewModel.PropertyChanged += ViewContentViewModel_PropertyChanged; } if (PDFViewer != null) { BindingPDFViewerHandler(); BindingEvent(); LoaedStickyNotePopup(); //获取当前是否为滚动状态 // BtnHandIsChecked = (PDFViewer.MouseMode == MouseModes.Scroll ? true : false); BtnHandIsChecked = false; HandToolIsCheckedEvent(false); } } #endregion Navigation } }