using ComPDFKit.PDFAnnotation;
using ComPDFKitViewer;
using ComPDFKitViewer.AnnotEvent;
using Microsoft.Win32;
using PDF_Office.CustomControl;
using PDF_Office.Helper;
using PDF_Office.Properties;
using PDFSettings;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
namespace PDF_Office.ViewModels.Tools
{
public sealed partial class AnnotToolContentViewModel : BindableBase, INavigationAware
{
#region 初始化
private void BindingEvent()
{
propertyPanel.DataChanged += AnnotPropertyPanel_DataChanged;
propertyPanel.DefaultStored += AnnotProperty_DefaultStored;
propertyPanel.AnnotTypeChanged += AnnotPropertyPanel_AnnotTypeChanged;
}
private void InitDefaultValue()
{
InitAnnotHighlight();
InitAnnotUnderline();
InitAnnotSquiggly();
InitAnnotStrikeout();
}
private void InitAnnotHighlight()
{
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotHighlight);
if (annotProperty == null)
{
annotProperty = new DefaultAnnotProperty();
annotProperty.AnnotToolType = AnnotArgsType.AnnotHighlight;
annotProperty.BackgroundColor = Color.FromRgb(0xFF, 0xBB, 0x00);
annotProperty.ForgoundColor = Color.FromRgb(0xFF, 0xBB, 0x00);
annotProperty.Opacity = 0.5;
SettingHelper.SetAnnotDefaultProperty(annotProperty);
}
else
{
HighLightColor = new SolidColorBrush(annotProperty.BackgroundColor);
HighLightOpacity = annotProperty.Opacity;
}
}
private void InitAnnotUnderline()
{
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotUnderline);
if (annotProperty == null)
{
annotProperty = new DefaultAnnotProperty();
annotProperty.AnnotToolType = AnnotArgsType.AnnotUnderline;
annotProperty.BackgroundColor = Color.FromRgb(0xFF, 0xBB, 0x00);
annotProperty.ForgoundColor = Color.FromRgb(0xFF, 0xBB, 0x00);
annotProperty.Opacity = 0.5;
SettingHelper.SetAnnotDefaultProperty(annotProperty);
}
else
{
UnderLineColor = new SolidColorBrush(annotProperty.BackgroundColor);
UnderLineOpacity = annotProperty.Opacity;
}
}
private void InitAnnotSquiggly()
{
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotSquiggly);
if (annotProperty == null)
{
annotProperty = new DefaultAnnotProperty();
annotProperty.AnnotToolType = AnnotArgsType.AnnotSquiggly;
annotProperty.BackgroundColor = Color.FromRgb(0xFF, 0xBB, 0x00);
annotProperty.ForgoundColor = Color.FromRgb(0xFF, 0xBB, 0x00);
annotProperty.Opacity = 0.5;
SettingHelper.SetAnnotDefaultProperty(annotProperty);
}
else
{
SquigglyColor = new SolidColorBrush(annotProperty.BackgroundColor);
SquigglyOpacity = annotProperty.Opacity;
}
}
private void InitAnnotStrikeout()
{
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotStrikeout);
if (annotProperty == null)
{
annotProperty = new DefaultAnnotProperty();
annotProperty.AnnotToolType = AnnotArgsType.AnnotStrikeout;
annotProperty.BackgroundColor = Color.FromRgb(0xFF, 0xBB, 0x00);
annotProperty.ForgoundColor = Color.FromRgb(0xFF, 0xBB, 0x00);
annotProperty.Opacity = 0.5;
SettingHelper.SetAnnotDefaultProperty(annotProperty);
}
else
{
StrikeoutColor = new SolidColorBrush(annotProperty.BackgroundColor);
StrikeoutOpacity = annotProperty.Opacity;
}
}
#endregion
#region 注释工具
///
/// 高亮注释
///
///
private AnnotHandlerEventArgs GetHighLight(TextHighlightAnnotArgs selectedhighlightArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
TextHighlightAnnotArgs highlightArgs = null;
if(selectedhighlightArgs == null)
{
highlightArgs = new TextHighlightAnnotArgs();
highlightArgs.Color = Color.FromRgb(0xFF, 0xBB, 0x00);
highlightArgs.Transparency = 0.5;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotHighlight);
if (annotProperty != null)
{
highlightArgs.Color = annotProperty.ForgoundColor;
highlightArgs.Transparency = annotProperty.Opacity;
highlightArgs.Content = annotProperty.NoteText;
}
}
else
{
highlightArgs = selectedhighlightArgs;
}
annotAttribsList[AnnotAttrib.Color] = highlightArgs.Color;
annotAttribsList[AnnotAttrib.Transparency] = highlightArgs.Transparency;
annotAttribsList[AnnotAttrib.NoteText] = string.Empty;
AddToPropertyPanel("TextAnnotProperty", "HighLight", highlightArgs, annotAttribsList);
return highlightArgs;
}
private AnnotHandlerEventArgs GetUnderLine(TextUnderlineAnnotArgs selectedunderlineArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
TextUnderlineAnnotArgs underlineArgs = null;
if (selectedunderlineArgs == null)
{
underlineArgs = new TextUnderlineAnnotArgs();
underlineArgs.Color = Color.FromRgb(0x12, 0xFD, 0xFF);
underlineArgs.Transparency = 1;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotUnderline);
if (annotProperty != null)
{
underlineArgs.Color = annotProperty.ForgoundColor;
underlineArgs.Transparency = annotProperty.Opacity;
underlineArgs.Content = annotProperty.NoteText;
}
}
else
{
underlineArgs = selectedunderlineArgs;
}
annotAttribsList[AnnotAttrib.Color] = underlineArgs.Color;
annotAttribsList[AnnotAttrib.Transparency] = underlineArgs.Transparency;
annotAttribsList[AnnotAttrib.NoteText] = string.Empty;
AddToPropertyPanel("TextAnnotProperty", "UnderLine", underlineArgs, annotAttribsList);
return underlineArgs;
}
private AnnotHandlerEventArgs GetSquiggly(TextSquigglyAnnotArgs selectedsquigglyArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
TextSquigglyAnnotArgs squigglyArgs = null;
if (selectedsquigglyArgs == null)
{
squigglyArgs = new TextSquigglyAnnotArgs();
squigglyArgs.Color = Color.FromRgb(0xFF, 0x87, 0x16);
squigglyArgs.Transparency = 1;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotSquiggly);
if (annotProperty != null)
{
squigglyArgs.Color = annotProperty.ForgoundColor;
squigglyArgs.Transparency = annotProperty.Opacity;
squigglyArgs.Content = annotProperty.NoteText;
}
}
else
{
squigglyArgs = selectedsquigglyArgs;
}
annotAttribsList[AnnotAttrib.Color] = squigglyArgs.Color;
annotAttribsList[AnnotAttrib.Transparency] = squigglyArgs.Transparency;
annotAttribsList[AnnotAttrib.NoteText] = string.Empty;
AddToPropertyPanel("TextAnnotProperty", "Squiggly", squigglyArgs, annotAttribsList);
return squigglyArgs;
}
private AnnotHandlerEventArgs GetStrikeout(TextStrikeoutAnnotArgs selectedstrikeoutArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
TextStrikeoutAnnotArgs strikeoutArgs = null;
if(selectedstrikeoutArgs == null)
{
strikeoutArgs = new TextStrikeoutAnnotArgs();
strikeoutArgs.Color = Color.FromRgb(0xFF, 0x3B, 0x30);
strikeoutArgs.Transparency = 1;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotStrikeout);
if (annotProperty != null)
{
strikeoutArgs.Color = annotProperty.ForgoundColor;
strikeoutArgs.Transparency = annotProperty.Opacity;
strikeoutArgs.Content = annotProperty.NoteText;
}
}
else
{
strikeoutArgs = selectedstrikeoutArgs;
}
annotAttribsList[AnnotAttrib.Color] = strikeoutArgs.Color;
annotAttribsList[AnnotAttrib.Transparency] = strikeoutArgs.Transparency;
annotAttribsList[AnnotAttrib.NoteText] = string.Empty;
AddToPropertyPanel("TextAnnotProperty", "Strikeout", strikeoutArgs, annotAttribsList);
return strikeoutArgs;
}
private AnnotHandlerEventArgs GetFreehand(FreehandAnnotArgs selectedfreehandArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
FreehandAnnotArgs freehandArgs = null;
if(selectedfreehandArgs == null)
{
freehandArgs = new FreehandAnnotArgs();
freehandArgs.InkColor = Color.FromRgb(0x38, 0xE0, 0x2E);
freehandArgs.Transparency = 1;
freehandArgs.LineWidth = 1;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotFreehand);
if (annotProperty != null)
{
freehandArgs.InkColor = annotProperty.ForgoundColor;
freehandArgs.Transparency = annotProperty.Opacity;
freehandArgs.LineWidth = annotProperty.Thickness;
freehandArgs.Content = annotProperty.NoteText;
}
}
else
{
freehandArgs = selectedfreehandArgs;
}
annotAttribsList[AnnotAttrib.Color] = freehandArgs.InkColor;
annotAttribsList[AnnotAttrib.Transparency] = freehandArgs.Transparency;
annotAttribsList[AnnotAttrib.Thickness] = freehandArgs.LineWidth;
annotAttribsList[AnnotAttrib.NoteText] = freehandArgs.Content;
AddToPropertyPanel("FreehandAnnotProperty", "Freehand", freehandArgs, annotAttribsList);
return freehandArgs;
}
private AnnotHandlerEventArgs GetFreetext(FreeTextAnnotArgs selectedfreetextArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
FreeTextAnnotArgs freetextArgs = null;
TextAlignment textAlignment;
if (selectedfreetextArgs == null)
{
freetextArgs = new FreeTextAnnotArgs();
freetextArgs.Align = TextAlignment.Left;
freetextArgs.BgColor = Colors.Transparent;
freetextArgs.FontFamily = new FontFamily(Settings.Default.AppProperties.Annotate.TextFontFamaily);
freetextArgs.FontColor = Colors.Black;
freetextArgs.FontSize = 14;
freetextArgs.Transparency = 1;
freetextArgs.LineColor = Colors.Black;
freetextArgs.LineWidth = 0;
freetextArgs.TextContent = string.Empty;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotFreeText);
if (annotProperty != null)
{
freetextArgs.Align = annotProperty.TextAlign;
freetextArgs.BgColor = annotProperty.BackgroundColor;
freetextArgs.FontFamily = new FontFamily(annotProperty.FontFamily);
freetextArgs.FontColor = annotProperty.ForgoundColor;
freetextArgs.FontSize = annotProperty.FontSize;
freetextArgs.Transparency = annotProperty.Opacity;
freetextArgs.LineColor = annotProperty.BorderColor;
freetextArgs.LineWidth = annotProperty.Thickness;
freetextArgs.TextContent = annotProperty.NoteText;
freetextArgs.FontWeight = annotProperty.FontWeight;
freetextArgs.FontStyle = annotProperty.FontStyle;
}
int align = Settings.Default.AppProperties.Annotate.TextAlign;
if (align == 0)
textAlignment = TextAlignment.Left;
else if (align == 1)
textAlignment = TextAlignment.Center;
else
textAlignment = TextAlignment.Right;
}
else
{
freetextArgs = selectedfreetextArgs;
textAlignment = freetextArgs.Align;
}
annotAttribsList[AnnotAttrib.Color] = freetextArgs.LineColor;
annotAttribsList[AnnotAttrib.FillColor] = freetextArgs.BgColor;
annotAttribsList[AnnotAttrib.Thickness] = freetextArgs.LineWidth;
annotAttribsList[AnnotAttrib.Transparency] = freetextArgs.Transparency;
annotAttribsList[AnnotAttrib.FontColor] = freetextArgs.FontColor;
annotAttribsList[AnnotAttrib.FontSize] = freetextArgs.FontSize;
annotAttribsList[AnnotAttrib.FontFamily] = freetextArgs.FontFamily;
annotAttribsList[AnnotAttrib.FontStyle] = freetextArgs.FontStyle;
annotAttribsList[AnnotAttrib.FontWeight] = freetextArgs.FontWeight;
annotAttribsList[AnnotAttrib.TextAlign] = textAlignment;
annotAttribsList[AnnotAttrib.NoteText] = freetextArgs.TextContent;
AddToPropertyPanel("FreetextAnnotProperty", "Freetext", freetextArgs, annotAttribsList);
return freetextArgs;
}
private AnnotHandlerEventArgs GetStickyNote()
{
Dictionary annotAttribsList = new Dictionary();
StickyAnnotArgs stickyAnnotArgs = new StickyAnnotArgs();
stickyAnnotArgs.Color = Color.FromRgb(0xFF, 0x81, 0x33);
stickyAnnotArgs.StickyNote = string.Empty;
stickyAnnotArgs.Transparency = 1;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotSticky);
if (annotProperty != null)
{
stickyAnnotArgs.Color = annotProperty.ForgoundColor;
stickyAnnotArgs.StickyNote = annotProperty.NoteText;
stickyAnnotArgs.Transparency = annotProperty.Opacity;
}
annotAttribsList[AnnotAttrib.Color] = stickyAnnotArgs.Color;
annotAttribsList[AnnotAttrib.Transparency] = stickyAnnotArgs.Transparency;
annotAttribsList[AnnotAttrib.NoteText] = stickyAnnotArgs.StickyNote;
AddToPropertyPanel("FreetextAnnotProperty", "StickyNote", stickyAnnotArgs, annotAttribsList);
return stickyAnnotArgs;
}
private AnnotHandlerEventArgs GetRect(SquareAnnotArgs selectedsquareArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
SquareAnnotArgs squareArgs = null;
if(selectedsquareArgs == null)
{
squareArgs = new SquareAnnotArgs();
squareArgs.LineColor = Colors.Red;
squareArgs.BgColor = Colors.Transparent;
squareArgs.LineWidth = 1;
squareArgs.Transparency = 1;
squareArgs.LineDash = DashStyles.Solid;
squareArgs.Content = string.Empty;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotSquare);
if (annotProperty != null)
{
squareArgs.LineColor = annotProperty.BorderColor;
squareArgs.BgColor = annotProperty.BackgroundColor;
if (annotProperty.DashArray == null || annotProperty.DashArray.Count == 0)
{
squareArgs.LineDash = DashStyles.Solid;
}
else
{
DashStyle dash = new DashStyle();
foreach (var offset in annotProperty.DashArray)
{
dash.Dashes.Add(offset);
}
squareArgs.LineDash = dash;
}
squareArgs.LineWidth = annotProperty.Thickness;
squareArgs.Transparency = annotProperty.Opacity;
squareArgs.Content = annotProperty.NoteText;
}
}
else
{
squareArgs = selectedsquareArgs;
}
annotAttribsList[AnnotAttrib.Color] = squareArgs.LineColor;
annotAttribsList[AnnotAttrib.FillColor] = squareArgs.BgColor;
annotAttribsList[AnnotAttrib.LineStyle] = squareArgs.LineDash;
annotAttribsList[AnnotAttrib.Thickness] = squareArgs.LineWidth;
annotAttribsList[AnnotAttrib.Transparency] = squareArgs.Transparency;
annotAttribsList[AnnotAttrib.NoteText] = squareArgs.Content;
AddToPropertyPanel("SharpsAnnotProperty", "Rect", squareArgs, annotAttribsList);
return squareArgs;
}
private AnnotHandlerEventArgs GetCircle(CircleAnnotArgs selectedcircleAnnotArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
CircleAnnotArgs circleAnnotArgs = null;
if(selectedcircleAnnotArgs == null)
{
circleAnnotArgs = new CircleAnnotArgs();
circleAnnotArgs.LineColor = Colors.Red;
circleAnnotArgs.BgColor = Colors.Transparent;
circleAnnotArgs.LineWidth = 1;
circleAnnotArgs.Transparency = 1;
circleAnnotArgs.LineDash = DashStyles.Solid;
circleAnnotArgs.Content = string.Empty;
DefaultAnnotProperty annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotCircle);
if (annotProperty != null)
{
circleAnnotArgs.LineColor = annotProperty.BorderColor;
circleAnnotArgs.BgColor = annotProperty.BackgroundColor;
if (annotProperty.DashArray == null || annotProperty.DashArray.Count == 0)
{
circleAnnotArgs.LineDash = DashStyles.Solid;
}
else
{
DashStyle dash = new DashStyle();
foreach (var offset in annotProperty.DashArray)
{
dash.Dashes.Add(offset);
}
circleAnnotArgs.LineDash = dash;
}
circleAnnotArgs.LineWidth = annotProperty.Thickness;
circleAnnotArgs.Transparency = annotProperty.Opacity;
circleAnnotArgs.Content = annotProperty.NoteText;
}
}
else
{
circleAnnotArgs = selectedcircleAnnotArgs;
}
annotAttribsList[AnnotAttrib.Color] = circleAnnotArgs.LineColor;
annotAttribsList[AnnotAttrib.FillColor] = circleAnnotArgs.BgColor;
annotAttribsList[AnnotAttrib.LineStyle] = circleAnnotArgs.LineDash;
annotAttribsList[AnnotAttrib.Thickness] = circleAnnotArgs.LineWidth;
annotAttribsList[AnnotAttrib.Transparency] = circleAnnotArgs.Transparency;
annotAttribsList[AnnotAttrib.NoteText] = circleAnnotArgs.Content;
AddToPropertyPanel("SharpsAnnotProperty", "Circle", circleAnnotArgs, annotAttribsList);
return circleAnnotArgs;
}
private AnnotHandlerEventArgs GetArrowLine(string TagStr,LineAnnotArgs selectedLineAnnotArgs = null)
{
Dictionary annotAttribsList = new Dictionary();
LineAnnotArgs lineArgs = new LineAnnotArgs();
if(selectedLineAnnotArgs == null)
{
lineArgs.LineColor = Colors.Red;
lineArgs.HeadLineType = C_LINE_TYPE.LINETYPE_NONE;
if (TagStr == "Line")
{
lineArgs.TailLineType = C_LINE_TYPE.LINETYPE_NONE;
}
else
{
lineArgs.TailLineType = C_LINE_TYPE.LINETYPE_ARROW;
}
lineArgs.LineDash = DashStyles.Solid;
lineArgs.LineWidth = 1;
lineArgs.Transparency = 1;
lineArgs.Content = string.Empty;
}
else
{
lineArgs = selectedLineAnnotArgs;
}
DefaultAnnotProperty annotProperty = null;
if (TagStr == "Line")
{
annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotLine, "Line");
if (annotProperty != null)
{
annotProperty.HeadLineType = C_LINE_TYPE.LINETYPE_NONE;
annotProperty.TailLineType = C_LINE_TYPE.LINETYPE_NONE;
}
}
else
{
annotProperty = SettingHelper.GetAnnotDefaultProperty(AnnotArgsType.AnnotLine, "Arrow");
}
if (annotProperty != null)
{
lineArgs.LineColor = annotProperty.BorderColor;
lineArgs.HeadLineType = annotProperty.HeadLineType;
lineArgs.TailLineType = annotProperty.TailLineType;
DashStyle dash = new DashStyle();
foreach (var offset in annotProperty.DashArray)
{
dash.Dashes.Add(offset);
}
lineArgs.LineDash = dash;
lineArgs.LineWidth = annotProperty.Thickness;
lineArgs.Transparency = annotProperty.Opacity;
lineArgs.Content = annotProperty.NoteText;
}
annotAttribsList[AnnotAttrib.Color] = lineArgs.LineColor;
annotAttribsList[AnnotAttrib.LineStart] = lineArgs.HeadLineType;
annotAttribsList[AnnotAttrib.LineEnd] = lineArgs.TailLineType;
annotAttribsList[AnnotAttrib.LineStyle] = lineArgs.LineDash;
annotAttribsList[AnnotAttrib.Thickness] = lineArgs.LineWidth;
annotAttribsList[AnnotAttrib.Transparency] = lineArgs.Transparency;
annotAttribsList[AnnotAttrib.NoteText] = lineArgs.Content;
AddToPropertyPanel("SharpsAnnotProperty", TagStr, lineArgs, annotAttribsList);
return lineArgs;
}
private AnnotHandlerEventArgs GetStamp()
{
AddToPropertyPanel("StampAnnotProperty");
return null;
}
private AnnotHandlerEventArgs GetSignature()
{
AddToPropertyPanel("SignatureAnnotProperty");
return null;
}
private AnnotHandlerEventArgs GetImage(CustomIconToggleBtn annotBtn)
{
Dictionary annotAttribsList = new Dictionary();
annotBtn.IsChecked = false;
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;
}
AddToPropertyPanel("ImageAnnotProperty", null, stampArgs, annotAttribsList);
return stampArgs;
}
///
/// 导航到同一个注释xaml时,需要区分某个注释;比如高亮、删除线、下划线
///
/// 对应的注释面板
/// 导航到同一个注释xaml时,需要区分某个注释;比如高亮、删除线、下划线
/// 注释
/// 更改注释属性的键值对,更改值后会自动记录undoRedo容器里
private void AddToPropertyPanel(string viewContent, string toolTag = null, AnnotHandlerEventArgs annot = null, Dictionary annotAttribsList = null)
{
if (string.IsNullOrEmpty(toolTag) == false)
{
if (!ToolExpandDict.ContainsKey(toolTag))
{
ToolExpandDict[toolTag] = true;
}
}
if (annot != null)
propertyPanel.annot = annot;
if (annotAttribsList != null)
propertyPanel.AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annotAttribsList);
if (string.IsNullOrEmpty(viewContent) == false)
viewContentViewModel.SelectedPrpoertyPanel(viewContent, propertyPanel);
}
#endregion
}
}