using ComPDFKit.Import;
using ComPDFKit.PDFAnnotation;
using ComPDFKit.PDFDocument;
using ComPDFKit.PDFPage;
using ComPDFKitViewer;
using ComPDFKitViewer.AnnotEvent;
using ComPDFKitViewer.PdfViewer;
using PDF_Office.Helper;
using PDF_Office.Model.BOTA;
using PDF_Office.ViewModels.BOTA;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace PDF_Office.Views.BOTA
{
///
/// AnnotationListItem.xaml 的交互逻辑
///
public partial class AnnotationListItem : System.Windows.Controls.UserControl
{
//private Brush strikeoutColor = new SolidColorBrush(Color.FromRgb(0xFF, 0xBB, 0x00));
public AnnotationListItem()
{
InitializeComponent();
}
private void GridIco_Loaded(object sender, RoutedEventArgs e)
{
Grid grid = e.Source as Grid;
var args = grid.DataContext as AnnotationHandlerEventArgs;
AnnotHandlerEventArgs data = args.AnnotHandlerEventArgs;
if (data == null)
{
return;
}
switch (data.EventType)
{
case AnnotArgsType.AnnotFreeText:
BtnAnnotFreeText.Visibility = Visibility.Visible;
TxbMarkUpContent.Foreground = new SolidColorBrush((data as FreeTextAnnotArgs).FontColor);
break;
case AnnotArgsType.AnnotHighlight:
BtnHighlight.Visibility = Visibility.Visible;
PathHighlight.Background = new SolidColorBrush((data as TextHighlightAnnotArgs).Color);
//TxbContext.Text = data.Content;
if (!string.IsNullOrEmpty(TxbContext.Text))
{
TxbContext.Background = new SolidColorBrush((data as TextHighlightAnnotArgs).Color);
}
break;
case AnnotArgsType.AnnotFreehand:
BtnFreeHand.Visibility = Visibility.Visible;
PathFreehand.Fill = new SolidColorBrush((data as FreehandAnnotArgs).InkColor);
ImageContext.Visibility = Visibility.Visible;
TxbContext.Visibility = Visibility.Collapsed;
//var encoder = new PngBitmapEncoder();
//encoder.Frames.Add(BitmapFrame.Create((BitmapSource)ImageContext.Source));
//FileStream file = new FileStream(String.Format($@"C:\Users\oyxh\Desktop\images\PDFText\{data.AnnotIndex}.png"), FileMode.Create);
//encoder.Save(file);
//file.Close();
break;
case AnnotArgsType.AnnotSquiggly://波浪线
AnnotSquiggly.Visibility = Visibility.Visible;
AnnotSquigglycolor.Stroke = new SolidColorBrush((data as TextSquigglyAnnotArgs).Color);
#region TO DO
//TextDecoration mySquiggly = new TextDecoration();
//Pen myPen = new Pen();
//myPen.Brush = new SolidColorBrush((data as TextSquigglyAnnotArgs).Color);
//myPen.Brush.Opacity = 0.8;
//myPen.Thickness = 2;
//myPen.DashStyle = DashStyles.Dash;
//mySquiggly.Pen = myPen;
//mySquiggly.PenThicknessUnit = TextDecorationUnit.FontRecommended;
//TextDecorationCollection myCollection = new TextDecorationCollection();
//myCollection.Add(mySquiggly);
//TxbContext.TextDecorations = myCollection;
#endregion TO DO
break;
case AnnotArgsType.AnnotStamp:
BtnAnnotStamp.Visibility = Visibility.Visible;
break;
case AnnotArgsType.AnnotStrikeout://删除线
BtnAnnotStrikeout.Visibility = Visibility.Visible;
PathStrikeoutyColor.Fill = new SolidColorBrush((data as TextStrikeoutAnnotArgs).Color);
#region to do
TextDecoration myStrikeout = new TextDecoration();
Pen myPen2 = new Pen();
myPen2.Brush = new SolidColorBrush((data as TextStrikeoutAnnotArgs).Color);
myPen2.Brush.Opacity = 0.8;
myPen2.Thickness = 2;
myStrikeout.Pen = myPen2;
myStrikeout.PenOffset = -4;
myStrikeout.PenThicknessUnit = TextDecorationUnit.FontRecommended;
TextDecorationCollection myCollection2 = new TextDecorationCollection();
myCollection2.Add(myStrikeout);
//因为波浪线无法实现 暂时只显示文字 不显示下划线,删除线等
TxbContext.TextDecorations = myCollection2;
#endregion to do
break;
case AnnotArgsType.AnnotSticky://便签
BtnAnnotSticky.Visibility = Visibility;
PathSticky.Fill = new SolidColorBrush((data as StickyAnnotArgs).Color);
break;
case AnnotArgsType.AnnotUnderline:
BtnUnderLine.Visibility = Visibility.Visible;
RectangleUnderline.Fill = new SolidColorBrush((data as TextUnderlineAnnotArgs).Color);
#region TO DO
TextDecoration myUnderline = new TextDecoration();
Pen myPen1 = new Pen();
myPen1.Brush = new SolidColorBrush((data as TextUnderlineAnnotArgs).Color);
myPen1.Brush.Opacity = 0.8;
myPen1.Thickness = 2;
myUnderline.Pen = myPen1;
myUnderline.PenThicknessUnit = TextDecorationUnit.FontRecommended;
TextDecorationCollection myCollection1 = new TextDecorationCollection();
myCollection1.Add(myUnderline);
TxbContext.TextDecorations = myCollection1;
#endregion TO DO
break;
case AnnotArgsType.AnnotLine:
if ((data as LineAnnotArgs).HeadLineType >= (C_LINE_TYPE)1 || (data as LineAnnotArgs).TailLineType >= (C_LINE_TYPE)1)
{
BtnSharpArrow.Visibility = Visibility.Visible;
PathArrow.Fill = new SolidColorBrush((data as LineAnnotArgs).LineColor);
}
else
{
PathSharpLine.Fill = new SolidColorBrush((data as LineAnnotArgs).LineColor);
BtnSharpLine.Visibility = Visibility.Visible;
}
///对于形状注释等只有Note 的处理
if (!string.IsNullOrEmpty(data.Content) && string.IsNullOrEmpty(data.MarkupContent))
{
TxbMarkUpContent.Text = Regex.Replace(data.Content, "[\r\n]", " ");
TxbContext.Text = "";
}
break;
case AnnotArgsType.AnnotSquare:
BtnAnnotSquare.Visibility = Visibility.Visible;
RectAnnotSquare.Stroke = new SolidColorBrush((data as SquareAnnotArgs).LineColor);
RectAnnotSquare.Fill = new SolidColorBrush((data as SquareAnnotArgs).BgColor);
///对于形状注释等只有Note 的处理
if (!string.IsNullOrEmpty(data.Content) && string.IsNullOrEmpty(data.MarkupContent))
{
TxbMarkUpContent.Text = Regex.Replace(data.Content, "[\r\n]", " ");
TxbContext.Text = "";
}
break;
case AnnotArgsType.AnnotCircle:
BtnAnnotCircle.Visibility = Visibility.Visible;
EllipseCircle.Stroke = new SolidColorBrush((data as CircleAnnotArgs).LineColor);
EllipseCircle.Fill = new SolidColorBrush((data as CircleAnnotArgs).BgColor);
///对于形状注释等只有Note 的处理
if (!string.IsNullOrEmpty(data.Content) && string.IsNullOrEmpty(data.MarkupContent))
{
TxbMarkUpContent.Text = Regex.Replace(data.Content, "[\r\n]", " ");
TxbContext.Text = "";
}
break;
case AnnotArgsType.AnnotLink:
BtnAnnotLink.Visibility = Visibility.Visible;
if (data is LinkAnnotArgs linkAnnotArgs)
{
//Dictionary annotAttribsList = new Dictionary();
//annotAttribsList[AnnotAttrib.LinkType] = linkAnnotArgs.LinkType;
//annotAttribsList[AnnotAttrib.LinkUri] = linkAnnotArgs.URI;
//annotAttribsList[AnnotAttrib.LinkDestIndx] = linkAnnotArgs.DestIndex;
//AnnotAttribEvent annotAttribEvent = AnnotAttribEvent.GetAnnotAttribEvent(linkAnnotArgs, annotAttribsList);
if (string.IsNullOrEmpty(linkAnnotArgs.Content))
{
//if(data.)
TxbContext.Text = string.Format($"To Page {linkAnnotArgs.PageIndex}");
}
}
break;
default:
break;
}
}
}
}