using ComPDFKit.PDFAnnotation; using ComPDFKit.PDFDocument; using ComPDFKitViewer; using ComPDFKitViewer.AnnotEvent; using ComPDFKitViewer.PdfViewer; using Dropbox.Api.TeamLog; using Microsoft.Office.Core; using Microsoft.Win32; using PDF_Master.CustomControl; using PDF_Master.EventAggregators; using PDF_Master.Helper; using PDF_Master.Model; using PDF_Master.Model.BOTA; using PDF_Master.Properties; using PDF_Master.ViewModels.BOTA; using PDF_Master.ViewModels.PropertyPanel.AnnotPanel; using PDF_Master.ViewModels.Tools.AnnotManager; using PDF_Master.Views.BOTA; using PDF_Master.Views.PropertyPanel.AnnotPanel; using PDFSettings; using Prism.Mvvm; using Prism.Regions; using Prism.Services.Dialogs; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using static Dropbox.Api.Sharing.ListFileMembersIndividualResult; using ContextMenu = System.Windows.Controls.ContextMenu; using HorizontalAlignment = System.Windows.HorizontalAlignment; using MenuItem = System.Windows.Controls.MenuItem; using OpenFileDialog = Microsoft.Win32.OpenFileDialog; namespace PDF_Master.ViewModels.Tools { //文件说明:初始化注释工具的数据,注释工具,菜单响应事件 public sealed partial class AnnotToolContentViewModel : BindableBase, INavigationAware { #region 初始化 #region 初始化数据 //初始化注释的属性值,并存在本地缓存数据集里 private void InitDefaultValue() { InitToolBtnUI(); } //注释工具按钮初始化时的属性值 private void InitToolBtnUI() { InitAnnotHighlight(); InitAnnotUnderline(); InitAnnotSquiggly(); InitAnnotStrikeout(); } private void InitAnnotHighlight() { var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null && annotate.HighLightColor != Colors.Transparent) { HighLightColor = new SolidColorBrush(annotate.HighLightColor); HighLightOpacity = 1; } else { HighLightColor = new SolidColorBrush(Colors.Red); HighLightOpacity = 1; } } private void InitAnnotUnderline() { var annotate = Settings.Default.AppProperties.Annotate; //避免默认值为透明度 if (annotate != null && annotate.UnderLineColor != Colors.Transparent) { UnderLineColor = new SolidColorBrush(annotate.UnderLineColor); HighLightOpacity = 1; } else { UnderLineColor = new SolidColorBrush(Colors.Red); UnderLineOpacity = 1; } } private void InitAnnotSquiggly() { var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null && annotate.StrikethroughColor != Colors.Transparent) { SquigglyColor = new SolidColorBrush(annotate.StrikethroughColor); SquigglyOpacity = 1; } else { SquigglyColor = new SolidColorBrush(Colors.Red); SquigglyOpacity = 1; } } private void InitAnnotStrikeout() { var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null && annotate.StrikethroughColor != Colors.Transparent) { StrikeoutColor = new SolidColorBrush(annotate.StrikethroughColor); StrikeoutOpacity = 1; } else { StrikeoutColor = new SolidColorBrush(Colors.Red); StrikeoutOpacity = 1; } } //在xaml里引用 public Dictionary GetToolTipDict { get { return ToolTipDict; } } //用来记录选中、创建注释的标识 private void InitToolDict() { ToolExpandDict.Add("SnapshotEdit", AnnotArgsType.SnapshotWithEditTool); ToolExpandDict.Add("HighLight", AnnotArgsType.AnnotHighlight); ToolExpandDict.Add("UnderLine", AnnotArgsType.AnnotUnderline); ToolExpandDict.Add("Squiggly", AnnotArgsType.AnnotSquiggly); ToolExpandDict.Add("Strikeout", AnnotArgsType.AnnotStrikeout); ToolExpandDict.Add("Freehand", AnnotArgsType.AnnotFreehand); ToolExpandDict.Add("Freetext", AnnotArgsType.AnnotFreeText); ToolExpandDict.Add("StickyNote", AnnotArgsType.AnnotSticky); ToolExpandDict.Add("Rect", AnnotArgsType.AnnotSquare); ToolExpandDict.Add("Circle", AnnotArgsType.AnnotCircle); ToolExpandDict.Add("Arrow", AnnotArgsType.AnnotLine); ToolExpandDict.Add("Line", AnnotArgsType.AnnotLine); ToolExpandDict.Add("Link", AnnotArgsType.AnnotLink); } //注释工具按钮悬浮文案 private void InitToolTipDict() { ToolTipDict.Add("Hand", "滚动工具"); ToolTipDict.Add("BtnSelecttool", "内容选择工具"); ToolTipDict.Add("SnapshotEdit", "内容选择工具"); ToolTipDict.Add("HighLight", "高亮" + " | Ctrl+Alt+H"); ToolTipDict.Add("UnderLine", "高亮" + " | Ctrl+Alt+U"); ToolTipDict.Add("Squiggly", "波浪线" + " | Ctrl+Alt+Q"); ToolTipDict.Add("Strikeout", "删除线" + " | Ctrl+Alt+S"); ToolTipDict.Add("Freehand", "手绘"); ToolTipDict.Add("Freetext", "文字"); ToolTipDict.Add("StickyNote", "便签"); ToolTipDict.Add("Rect", "矩形"); ToolTipDict.Add("Circle", "圆"); ToolTipDict.Add("Arrow", "箭头"); ToolTipDict.Add("Line", "线条"); ToolTipDict.Add("Link", "超链接"); ToolTipDict.Add("Stamp", "图章"); ToolTipDict.Add("Image", "图片"); ToolTipDict.Add("Signature", "签名"); ToolTipDict.Add("ShowAnnot", "显示/隐藏注释"); } //便签批注弹窗 private void LoaedStickyNotePopup() { if (PDFViewer == null) return; if (customStickyPopup == null) { customStickyPopup = new StickyNotePopup(); PDFViewer.SetStickyNotePop(customStickyPopup); } } #endregion 初始化数据 #endregion 初始化 #region 注释工具 //注释工具 private void FindAnnotTypeKey(string tag, ref AnnotHandlerEventArgs annotArgs, bool isRightMenuAdd = false) { switch (tag) { case "SnapshotEdit"://内容选择 annotArgs = GetSnapshotEdit(); break; case "HighLight"://字体高亮 annotArgs = GetHighLight(); break; case "UnderLine"://下划线 annotArgs = GetUnderLine(); break; case "Squiggly"://波浪线 annotArgs = GetSquiggly(); break; case "Strikeout"://删除线 annotArgs = GetStrikeout(); break; case "Freehand"://手绘 annotArgs = GetFreehand(); break; case "Freetext"://文本 annotArgs = GetFreetext(); break; case "StickyNote"://便签 annotArgs = GetStickyNote(); break; case "Rect"://矩形 annotArgs = GetRect(); break; case "Circle"://圆 annotArgs = GetCircle(); break; case "Arrow"://箭头 case "Line"://线 annotArgs = GetArrowLine(tag); break; case "Stamp"://图章 //付费锁 if (!App.IsLogin) { dialogs.ShowDialog(DialogNames.IAPCompareDialog); return; } annotArgs = GetStamp(); break; case "Image": annotArgs = GetImage(); break; case "Signature"://签名 //付费锁 if (!App.IsLogin) { dialogs.ShowDialog(DialogNames.IAPCompareDialog); return; } annotArgs = GetSignature(); PDFViewer.SetMouseMode(MouseModes.PanTool);//清空其他注释 break; case "Link"://链接 //付费锁 if (!App.IsLogin) { dialogs.ShowDialog(DialogNames.IAPCompareDialog); return; } propertyPanel.IsAddLink = true; viewContentViewModel.IsRightMenuCreateLink = isRightMenuAdd; annotArgs = GetLink(); break; } if (annotArgs != null) annotArgs.Author = Settings.Default.AppProperties.Description.Author; } //创建,选中,保留上次属性值的注释 /// /// 高亮注释 /// private AnnotHandlerEventArgs GetHighLight(List selectedArgs = null) { TextHighlightAnnotArgs highlightArgs = null; if (selectedArgs == null || selectedArgs.Count == 0) { highlightArgs = new TextHighlightAnnotArgs(); highlightArgs.Transparency = highLightOpacity; highlightArgs.Color = (highLightColor as SolidColorBrush).Color; if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotHighlight] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(highlightArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = highlightArgs.EventType; defaultAnnot.ForgoundColor = (highLightColor as SolidColorBrush).Color; defaultAnnot.Opacity = 1; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } highLightOpacity = highlightArgs.Transparency = defaultAnnot.Opacity; } else { } selectedArgs = new List(); selectedArgs.Add(highlightArgs); } else { highlightArgs = selectedArgs[0] as TextHighlightAnnotArgs; } AddToPropertyPanel("TextAnnotProperty", "HighLight", selectedArgs); return highlightArgs; } /// /// 链接 /// /// 所选中的注释 /// 注释属性列表 public AnnotHandlerEventArgs GetLink(List selectedArgs = null, AnnotAttribEvent annotAttribEvent = null) { LinkAnnotArgs linkArgs = new LinkAnnotArgs(); if (selectedArgs != null && selectedArgs.Count > 0) { linkArgs = selectedArgs[0] as LinkAnnotArgs; } else { linkArgs.URI = string.Empty; linkArgs.LinkType = LINK_TYPE.GOTO; linkArgs.DestIndex = -1; if (linkArgs != null) { selectedArgs = new List(); selectedArgs.Add(linkArgs); CreateAnnotFromSelectPageText(linkArgs); } } AddToPropertyPanel("LinkAnnotProperty", "Link", selectedArgs, annotAttribEvent); return linkArgs; } /// /// 下划线 /// /// private AnnotHandlerEventArgs GetUnderLine(List selectedArgs = null) { TextUnderlineAnnotArgs underlineArgs = null; if (selectedArgs == null || selectedArgs.Count == 0) { underlineArgs = new TextUnderlineAnnotArgs(); underlineArgs.Transparency = UnderLineOpacity; underlineArgs.Color = (UnderLineColor as SolidColorBrush).Color; if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotUnderline] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(underlineArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = underlineArgs.EventType; defaultAnnot.ForgoundColor = (UnderLineColor as SolidColorBrush).Color; defaultAnnot.Opacity = 1; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } UnderLineOpacity = underlineArgs.Transparency = defaultAnnot.Opacity; } selectedArgs = new List(); selectedArgs.Add(underlineArgs); } else { underlineArgs = selectedArgs[0] as TextUnderlineAnnotArgs; } AddToPropertyPanel("TextAnnotProperty", "UnderLine", selectedArgs); return underlineArgs; } /// /// 波浪线 /// /// /// private AnnotHandlerEventArgs GetSquiggly(List selectedArgs = null) { TextSquigglyAnnotArgs squigglyArgs = null; if (selectedArgs == null || selectedArgs.Count == 0) { squigglyArgs = new TextSquigglyAnnotArgs(); squigglyArgs.Transparency = SquigglyOpacity; squigglyArgs.Color = (squigglyColor as SolidColorBrush).Color; if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotSquiggly] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(squigglyArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = squigglyArgs.EventType; defaultAnnot.ForgoundColor = (squigglyColor as SolidColorBrush).Color; defaultAnnot.Opacity = 1; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } SquigglyOpacity = squigglyArgs.Transparency = defaultAnnot.Opacity; } selectedArgs = new List(); selectedArgs.Add(squigglyArgs); } else { squigglyArgs = selectedArgs[0] as TextSquigglyAnnotArgs; } AddToPropertyPanel("TextAnnotProperty", "Squiggly", selectedArgs); return squigglyArgs; } /// /// 删除线 /// /// /// private AnnotHandlerEventArgs GetStrikeout(List selectedArgs = null) { TextStrikeoutAnnotArgs strikeoutArgs = null; if (selectedArgs == null || selectedArgs.Count == 0) { strikeoutArgs = new TextStrikeoutAnnotArgs(); strikeoutArgs.Transparency = strikeoutOpacity; strikeoutArgs.Color = (strikeoutColor as SolidColorBrush).Color; if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotStrikeout] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(strikeoutArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = strikeoutArgs.EventType; defaultAnnot.ForgoundColor = (strikeoutColor as SolidColorBrush).Color; defaultAnnot.Opacity = 1; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } strikeoutArgs.Transparency = defaultAnnot.Opacity; } selectedArgs = new List(); selectedArgs.Add(strikeoutArgs); } else { strikeoutArgs = selectedArgs[0] as TextStrikeoutAnnotArgs; } AddToPropertyPanel("TextAnnotProperty", "Strikeout", selectedArgs); return strikeoutArgs; } /// /// 手绘 /// /// /// private AnnotHandlerEventArgs GetFreehand(List selectedArgs = null) { FreehandAnnotArgs freehandArgs = null; if (selectedArgs == null || selectedArgs.Count == 0) { freehandArgs = new FreehandAnnotArgs(); var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null) { freehandArgs.InkColor = annotate.FreeHandColor; } else { freehandArgs.InkColor = Color.FromRgb(0x38, 0xE0, 0x2E); } if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotFreehand] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(freehandArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = freehandArgs.EventType; defaultAnnot.ForgoundColor = annotate.FreeHandColor; defaultAnnot.Opacity = 1; defaultAnnot.Thickness = 2; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } freehandArgs.Transparency = defaultAnnot.Opacity; freehandArgs.LineWidth = defaultAnnot.Thickness; if (defaultAnnot.DashArray == null || defaultAnnot.DashArray.Count == 0) { freehandArgs.LineDash = DashStyles.Solid; } else { var collect = new DoubleCollection(); foreach (var item in defaultAnnot.DashArray) { collect.Add(item); } if (freehandArgs.LineDash == null) freehandArgs.LineDash = new DashStyle(); freehandArgs.LineDash.Dashes = collect; } } else { freehandArgs = propertyPanel.LastAnnotDict[AnnotArgsType.AnnotFreehand] as FreehandAnnotArgs; } selectedArgs = new List(); selectedArgs.Add(freehandArgs); } else { freehandArgs = selectedArgs[0] as FreehandAnnotArgs; if (NavigatedToFillAndSignVM(selectedArgs, "Freehand")) { return freehandArgs; } } AddToPropertyPanel("FreehandAnnotProperty", "Freehand", selectedArgs); return freehandArgs; } /// /// 文本 /// /// /// private AnnotHandlerEventArgs GetFreetext(List selectedArgs = null) { FreeTextAnnotArgs freetextArgs = null; TextAlignment textAlignment; if (selectedArgs == null || selectedArgs.Count == 0) { freetextArgs = new FreeTextAnnotArgs(); var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null) { freetextArgs.FontColor = annotate.TextAnnoteColor; } else { freetextArgs.FontColor = Colors.Black; } if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotFreeText] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(freetextArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = freetextArgs.EventType; defaultAnnot.ForgoundColor = freetextArgs.FontColor; defaultAnnot.BorderColor = Colors.Transparent; defaultAnnot.BackgroundColor = Colors.Transparent; defaultAnnot.Opacity = 1; defaultAnnot.FontFamily = Settings.Default.AppProperties.Annotate.TextFontFamaily; defaultAnnot.FontSize = 14; defaultAnnot.TextAlign = TextAlignment.Left; defaultAnnot.Thickness = 0; defaultAnnot.NoteText = string.Empty; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } freetextArgs.FontColor = defaultAnnot.ForgoundColor; freetextArgs.LineColor = defaultAnnot.BorderColor; freetextArgs.BgColor = defaultAnnot.BackgroundColor; freetextArgs.Transparency = defaultAnnot.Opacity; freetextArgs.FontFamily = new FontFamily(defaultAnnot.FontFamily); freetextArgs.FontSize = defaultAnnot.FontSize; freetextArgs.FontWeight = defaultAnnot.FontWeight; freetextArgs.FontStyle = defaultAnnot.FontStyle; freetextArgs.LineWidth = defaultAnnot.Thickness; int align = (int)Settings.Default.AppProperties.Annotate.TextAlign; if (align == 0) textAlignment = TextAlignment.Left; else if (align == 1) textAlignment = TextAlignment.Center; else textAlignment = TextAlignment.Right; freetextArgs.Align = textAlignment; } else { FreeTextAnnotArgs freeText = propertyPanel.LastAnnotDict[AnnotArgsType.AnnotFreeText] as FreeTextAnnotArgs; freetextArgs = SetFreetextArgs(freeText); //freetextArgs = SetFreetextArgs(freeText); //freetextArgs.Content = string.Empty; //freetextArgs.TextContent = string.Empty; } if (freetextArgs != null) { selectedArgs = new List(); selectedArgs.Add(freetextArgs); SelectTextCreateAnnot(freetextArgs); } } else { FreeTextAnnotArgs freeText = selectedArgs[0] as FreeTextAnnotArgs; freetextArgs = SetFreetextArgs(freeText); textAlignment = freetextArgs.Align; if (NavigatedToFillAndSignVM(selectedArgs, "Freetext")) { return freetextArgs; } } AddToPropertyPanel("FreetextAnnotProperty", "Freetext", selectedArgs); return freetextArgs; } private FreeTextAnnotArgs SetFreetextArgs(FreeTextAnnotArgs defaultAnnot) { FreeTextAnnotArgs freetextArgs = new FreeTextAnnotArgs(); freetextArgs.FontColor = defaultAnnot.FontColor; freetextArgs.LineColor = defaultAnnot.LineColor; freetextArgs.BgColor = defaultAnnot.BgColor; freetextArgs.Transparency = defaultAnnot.Transparency; freetextArgs.FontFamily = defaultAnnot.FontFamily; freetextArgs.FontSize = defaultAnnot.FontSize; freetextArgs.FontWeight = defaultAnnot.FontWeight; freetextArgs.FontStyle = defaultAnnot.FontStyle; freetextArgs.LineWidth = defaultAnnot.LineWidth; freetextArgs.Align = defaultAnnot.Align; return freetextArgs; } private void SelectTextCreateAnnot(FreeTextAnnotArgs freeText) { List selectList = PDFViewer.GetSelectTextInfo(); if (selectList != null && selectList.Count > 0) { foreach (TextSelectNode selectNode in selectList) { FreeTextAnnotArgs textArgs = new FreeTextAnnotArgs(); Rect clientRect = Rect.Empty; foreach (Rect rawRect in selectNode.RawRect) { clientRect.Union(rawRect); } if (clientRect.IsEmpty == false) { clientRect = new Rect( clientRect.Left / 72D * 96D, clientRect.Top / 72D * 96D, clientRect.Width / 72D * 96D, clientRect.Height / 72D * 96D); textArgs.ClientRect = DpiHelpers.GetDpiRelatedRect(clientRect); //textArgs.Transparency = 1; //textArgs.BgColor = Colors.Transparent; //textArgs.LineColor = Colors.Red; //textArgs.LineWidth = 2; textArgs.Transparency = freeText.Transparency; textArgs.BgColor = freeText.BgColor; textArgs.LineColor = freeText.LineColor; textArgs.LineWidth = freeText.LineWidth; textArgs.TextContent = selectNode.SelectText; PDFViewer.CreatePageAnnot(selectNode.PageIndex, textArgs); } break; } } } //获取选中文字内容的区域大小,以及内容内容所在的页码 private Tuple DrawRectCreateAnnot() { List selectList = PDFViewer.GetSelectTextInfo(); Rect clientRect = Rect.Empty; int pageIndex = -1; if (selectList != null && selectList.Count > 0) { pageIndex = selectList[0].PageIndex; } if (selectList != null && selectList.Count > 0) { foreach (TextSelectNode selectNode in selectList) { foreach (Rect rawRect in selectNode.RawRect) { clientRect.Union(rawRect); } int dpi = DpiHelpers.Dpi; if (clientRect.IsEmpty == false) { clientRect = new Rect( clientRect.Left / 72D * dpi, clientRect.Top / 72D * dpi, clientRect.Width / 72D * dpi, clientRect.Height / 72D * dpi); } break; } } if (clientRect != Rect.Empty && pageIndex > -1) { return new Tuple(pageIndex, clientRect); } return null; } //根据选中的文本内容,来创建指定大小的注释。 private void CreateAnnotFromSelectPageText(AnnotHandlerEventArgs annotArgs) { //点击注释工具,在阅读页根据选中的文本内容,创建注释矩形大小 var drawRectTuple = DrawRectCreateAnnot(); if (drawRectTuple != null) { annotArgs.ClientRect = drawRectTuple.Item2; PDFViewer.CreatePageAnnot(drawRectTuple.Item1, annotArgs); } } //Event导航到填写与签名的属性面板 private bool NavigatedToFillAndSignVM(List annots, string tag) { if (viewContentViewModel.FillAndSign != null && viewContentViewModel.FillAndSign.Count > 0 && annots != null && annots.Count > 0) { var annotFillAndSign = viewContentViewModel.FillAndSign.FirstOrDefault(temp => temp.PageIndex == annots[0].PageIndex && temp.AnnotIndex == annots[0].AnnotIndex); if (annotFillAndSign != null) { this.events.GetEvent().Publish(new FillAndSigntEventArgs { Action = tag, AppUnicode = App.mainWindowViewModel.SelectedItem.Unicode, Annots = annots }); return true; } } return false; } private void FromFillAndSign(FillAndSigntEventArgs obj) { if (obj != null) { if (string.IsNullOrEmpty(obj.Action) == false) { if (obj.Action == "Clear") { viewContentViewModel.AnnotSignatures.Clear(); } } } } /// /// 便签 /// /// /// private AnnotHandlerEventArgs GetStickyNote(List selectedArgs = null) { StickyAnnotArgs stickyAnnotArgs = new StickyAnnotArgs(); if (selectedArgs == null || selectedArgs.Count == 0) { var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null) { stickyAnnotArgs.Color = annotate.NoteAnnoteColor; } else { stickyAnnotArgs.Color = Color.FromRgb(0xFF, 0x81, 0x33); } if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotSticky] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(stickyAnnotArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = stickyAnnotArgs.EventType; defaultAnnot.NoteText = string.Empty; defaultAnnot.Opacity = 1; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } stickyAnnotArgs.Transparency = defaultAnnot.Opacity; } else { stickyAnnotArgs = propertyPanel.LastAnnotDict[AnnotArgsType.AnnotSticky] as StickyAnnotArgs; stickyAnnotArgs.Content = string.Empty; stickyAnnotArgs.StickyNote = string.Empty; } if (stickyAnnotArgs != null) { selectedArgs = new List(); selectedArgs.Add(stickyAnnotArgs); } } else { stickyAnnotArgs = selectedArgs[0] as StickyAnnotArgs; } List stickyAnnotArgsList = new List(); if (stickyAnnotArgs != null) stickyAnnotArgsList.Add(stickyAnnotArgs); AddToPropertyPanel("StickyNoteProperty", "StickyNote", selectedArgs); return stickyAnnotArgs; } /// /// 矩形 /// /// /// private AnnotHandlerEventArgs GetRect(List selectedArgs = null) { SquareAnnotArgs squareArgs = null; if (selectedArgs == null || selectedArgs.Count == 0) { squareArgs = new SquareAnnotArgs(); var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null) { squareArgs.BgColor = annotate.RectangleFillColor; squareArgs.LineColor = annotate.RectangleBorderColor; } else { squareArgs.LineColor = Colors.Red; squareArgs.BgColor = Colors.Red; } if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotSquare] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(squareArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = squareArgs.EventType; defaultAnnot.Thickness = 1; defaultAnnot.Opacity = 1; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } squareArgs.LineWidth = defaultAnnot.Thickness; squareArgs.Transparency = defaultAnnot.Opacity; if (defaultAnnot.DashArray == null || defaultAnnot.DashArray.Count == 0) { squareArgs.LineDash = DashStyles.Solid; } else { var collect = new DoubleCollection(); foreach (var item in defaultAnnot.DashArray) { collect.Add(item); } if (squareArgs.LineDash == null) squareArgs.LineDash = new DashStyle(); squareArgs.LineDash.Dashes = collect; } } else { squareArgs = propertyPanel.LastAnnotDict[AnnotArgsType.AnnotSquare] as SquareAnnotArgs; } if (squareArgs != null) { selectedArgs = new List(); selectedArgs.Add(squareArgs); CreateAnnotFromSelectPageText(squareArgs); } } else { squareArgs = selectedArgs[0] as SquareAnnotArgs; } AddToPropertyPanel("SharpsAnnotProperty", "Rect", selectedArgs); return squareArgs; } /// /// 圆 /// /// /// private AnnotHandlerEventArgs GetCircle(List selectedArgs = null) { CircleAnnotArgs circleAnnotArgs = null; if (selectedArgs == null || selectedArgs.Count == 0) { circleAnnotArgs = new CircleAnnotArgs(); var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null) { circleAnnotArgs.LineColor = annotate.CircleBorderColor; circleAnnotArgs.BgColor = annotate.CircleFillColor; } else { circleAnnotArgs.LineColor = Colors.Red; circleAnnotArgs.BgColor = Colors.Red; } if (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotCircle] == null) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(circleAnnotArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = circleAnnotArgs.EventType; defaultAnnot.Thickness = 1; defaultAnnot.Opacity = 1; defaultAnnot.NoteText = string.Empty; defaultAnnot.DashArray = null; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } circleAnnotArgs.LineWidth = defaultAnnot.Thickness; circleAnnotArgs.Transparency = defaultAnnot.Opacity; if (defaultAnnot.DashArray == null || defaultAnnot.DashArray.Count == 0) { circleAnnotArgs.LineDash = DashStyles.Solid; } else { var collect = new DoubleCollection(); foreach (var item in defaultAnnot.DashArray) { collect.Add(item); } if (circleAnnotArgs.LineDash == null) circleAnnotArgs.LineDash = new DashStyle(); circleAnnotArgs.LineDash.Dashes = collect; } } else { circleAnnotArgs = propertyPanel.LastAnnotDict[AnnotArgsType.AnnotCircle] as CircleAnnotArgs; } if (circleAnnotArgs != null) { selectedArgs = new List(); selectedArgs.Add(circleAnnotArgs); } } else { circleAnnotArgs = selectedArgs[0] as CircleAnnotArgs; } AddToPropertyPanel("SharpsAnnotProperty", "Circle", selectedArgs); return circleAnnotArgs; } /// /// 箭头 线 /// /// /// /// private AnnotHandlerEventArgs GetArrowLine(string TagStr, List selectedArgs = null) { LineAnnotArgs lineArgs = new LineAnnotArgs(); if (selectedArgs == null || selectedArgs.Count == 0) { var annotate = Settings.Default.AppProperties.Annotate; if (annotate != null) { lineArgs.LineColor = annotate.LineColor; } else { lineArgs.LineColor = Colors.Red; } lineArgs.LineColor = Colors.Red; lineArgs.HeadLineType = C_LINE_TYPE.LINETYPE_NONE; bool isLastAnnot = false; if (TagStr == "Line") { lineArgs.TailLineType = C_LINE_TYPE.LINETYPE_NONE; isLastAnnot = (propertyPanel.LastAnnotDict[AnnotArgsType.AnnotLine] != null ? true : false); } else { lineArgs.TailLineType = C_LINE_TYPE.LINETYPE_ARROW; isLastAnnot = (propertyPanel.LastArrowAnnot != null ? true : false); } if (isLastAnnot == false) { var defaultAnnot = SettingHelper.GetAnnotDefaultProperty(lineArgs.EventType); if (defaultAnnot == null) { defaultAnnot = new DefaultAnnotProperty(); defaultAnnot.AnnotToolType = lineArgs.EventType; defaultAnnot.Thickness = 1; defaultAnnot.Opacity = 1; defaultAnnot.NoteText = string.Empty; defaultAnnot.DashArray = null; SettingHelper.SetAnnotDefaultProperty(defaultAnnot); Settings.Default.Save(); } lineArgs.LineDash = DashStyles.Solid; lineArgs.LineWidth = defaultAnnot.Thickness; lineArgs.Transparency = defaultAnnot.Opacity; if (defaultAnnot.DashArray == null || defaultAnnot.DashArray.Count == 0) { lineArgs.LineDash = DashStyles.Solid; } else { var collect = new DoubleCollection(); foreach (var item in defaultAnnot.DashArray) { collect.Add(item); } if (lineArgs.LineDash == null) lineArgs.LineDash = new DashStyle(); lineArgs.LineDash.Dashes = collect; } } else { if (lineArgs.TailLineType == C_LINE_TYPE.LINETYPE_ARROW) { lineArgs = propertyPanel.LastArrowAnnot as LineAnnotArgs; } else { lineArgs = propertyPanel.LastAnnotDict[AnnotArgsType.AnnotLine] as LineAnnotArgs; } } if (lineArgs != null) { selectedArgs = new List(); selectedArgs.Add(lineArgs); } } else { lineArgs = selectedArgs[0] as LineAnnotArgs; } AddToPropertyPanel("SharpsAnnotProperty", TagStr, selectedArgs); return lineArgs; } /// /// 图章 /// /// private AnnotHandlerEventArgs GetStamp() { StampAnnotArgs stampAnnotArgs = new StampAnnotArgs(); stampAnnotArgs.Opacity = 1; stampAnnotArgs.StampText = "APPROVED"; stampAnnotArgs.Type = StampType.STANDARD_STAMP; List stampAnnotArgsList = new List(); if (stampAnnotArgs != null) stampAnnotArgsList.Add(stampAnnotArgs); AddToPropertyPanel("StampAnnotProperty", null, stampAnnotArgsList); return stampAnnotArgs; } /// /// 签名 /// /// private AnnotHandlerEventArgs GetSignature() { AddToPropertyPanel("SignatureAnnotProperty"); return null; } private AnnotHandlerEventArgs GetImage() { StampAnnotArgs stampArgs = new StampAnnotArgs(); stampArgs.Opacity = 1; stampArgs.Type = StampType.IMAGE_STAMP; OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;"; if (openFileDialog.ShowDialog() == true) { stampArgs.ImagePath = openFileDialog.FileName; } List stampArgsList = new List(); if (stampArgs != null) stampArgsList.Add(stampArgs); AddToPropertyPanel("ImageAnnotProperty", null, stampArgsList); return stampArgs; } /// /// 内容选择 /// /// /// private AnnotHandlerEventArgs GetSnapshotEdit() { SnapshotEditToolArgs snapshotArgs = new SnapshotEditToolArgs(); //SnapshotEditMenuViewModel snapshotEditMenuViewModel = new SnapshotEditMenuViewModel(); snapshotArgs.ControlPointColor = Colors.White; snapshotArgs.BgColor = Color.FromArgb(0x99, 0x00, 0x00, 0x00); snapshotArgs.LineColor = Color.FromArgb(0xFF, 0x47, 0x7E, 0xDE); SnapshotEditMenuViewModel.SnapToolArgs = snapshotArgs; SnapshotEditMenuViewModel.PDFViewer = PDFViewer; SnapshotEditMenuViewModel.SnapToolEvent -= SnapshotEditMenuViewModel_SnapToolEvent; SnapshotEditMenuViewModel.SnapToolEvent += SnapshotEditMenuViewModel_SnapToolEvent; #region to do //SnapshotEditMenu snapMenu = new SnapshotEditMenu(); //snapshotArgs.ToolPanel = snapMenu; //SnapshotEditMenuViewModel snapshotEditMenuViewModel = (SnapshotEditMenuViewModel)snapMenu.DataContext; //snapshotEditMenuViewModel.SnapToolArgs = snapshotArgs; //snapshotEditMenuViewModel.PDFViewer = PDFViewer; //snapshotEditMenuViewModel.ToggleBtn = annotBtn; //snapshotEditMenuViewModel.SnapToolEvent += SnapshotEditMenuViewModel_SnapToolEvent; //SnapshotEditMenuViewModel = snapshotEditMenuViewModel; #endregion to do return snapshotArgs; } #endregion 注释工具 #region 菜单 private bool InBookModeSetIsEnabled(MenuItem menuItem) { if (viewContentViewModel.mainViewModel.IsBookMode) { menuItem.IsEnabled = false; return true; } else { menuItem.IsEnabled = true; return false; } } private void ExportPicture_MenuItemClick() { //图片提取 try { List imageList = new List(); Dictionary> imageDict = PDFViewer?.GetSelectedImages(); foreach (int pageIndex in imageDict.Keys) { imageList = imageDict[pageIndex]; } string path = PDFViewer.Document.FileName; System.Windows.Forms.FolderBrowserDialog folderDialog = new FolderBrowserDialog(); if (folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) { int i = 1; int pagenum = 1; string choosePath = folderDialog.SelectedPath; string sPath = choosePath + "\\" + path + "_Extract Image"; sPath = GetExportPathName(sPath); if (!Directory.Exists(sPath)) { Directory.CreateDirectory(sPath); } if (Directory.Exists(sPath)) { foreach (System.Drawing.Bitmap image in imageList) { foreach (var item in imageDict.Keys) { pagenum = item; } string filename = path + "_" + "Page" + (pagenum + 1).ToString() + "_" + GetNum(i); string savePath = System.IO.Path.Combine(sPath, filename + ".jpg"); image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg); i++; } System.Diagnostics.Process.Start("explorer", "/select,\"" + sPath + "\""); } } } catch (Exception ex) { } } public string GetExportPathName(string path) { int i = 1; string outpath = path; while (Directory.Exists(outpath)) { outpath = path + $"({i.ToString()})"; i++; } return outpath; } private string GetNum(int num) { if (num % 10 < 1) { return "00" + num.ToString(); } if (num % 10 >= 1 && num % 10 < 10) { return "0" + num.ToString(); } else { return num.ToString(); } } #endregion 菜单 } }