using ComPDFKit.PDFDocument;
using ComPDFKit.PDFPage;
using compdfkit_tools.Edit;
using compdfkit_tools.Helper;
using compdfkit_tools.PDFControl;
using ComPDFKitViewer;
using ComPDFKitViewer.PdfViewer;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Input;
namespace edit_ctrl_demo
{
///
/// MainWindow.xaml 的交互逻辑
///
public partial class MainWindow : Window,INotifyPropertyChanged
{
///
/// 是否能够撤销
///
public bool CanUndo
{
get
{
if (pdfViewControl != null&& pdfViewControl.PDFView!=null)
{
return pdfViewControl.PDFView.UndoManager.CanUndo;
}
return false;
}
}
///
/// 是否能够重做
///
public bool CanRedo
{
get
{
if (pdfViewControl != null && pdfViewControl.PDFView != null)
{
return pdfViewControl.PDFView.UndoManager.CanRedo;
}
return false;
}
}
///
/// 上一次的PDF编辑对象
///
private PDFEditEvent lastPDFEditEvent = null;
///
/// 缩放比例
///
private PDFViewControl passwordViewer;
private PDFViewControl pdfViewControl;
private double[] zoomLevelList = { 1f, 8f, 12f, 25, 33f, 50, 66f, 75, 100, 125, 150, 200, 300, 400, 600, 800, 1000 };
public MainWindow()
{
InitializeComponent();
Loaded += MainWindow_Loaded;
DataContext = this;
}
///
/// 属性更改事件
///
public event PropertyChangedEventHandler PropertyChanged;
///
///触发属性更改事件通知
///
protected void OnPropertyChanged([CallerMemberName] string name = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
LoadDefaultDocument();
BindZoomLevel();
if(pdfViewControl!=null)
{
pdfViewControl.PDFView.PDFEditActiveHandler += PDFView_PDFEditActiveHandler;
pdfViewControl.PDFView.UndoManager.PropertyChanged += UndoManager_PropertyChanged;
pdfViewControl.PDFView.PDFEditCommandHandler += PDFView_PDFEditCommandHandler;
}
}
private void BindZoomLevel()
{
foreach (double zoomLevel in zoomLevelList)
{
ComboBoxItem zoomItem = new ComboBoxItem();
zoomItem.Content = zoomLevel + "%";
ZoomComboBox.Items.Add(zoomItem);
}
}
private void LoadDocument()
{
pdfViewControl.PDFView?.Load();
PDFGrid.Child = pdfViewControl;
pdfViewControl.PDFView.InfoChanged -= PdfViewer_InfoChanged;
pdfViewControl.PDFView.InfoChanged += PdfViewer_InfoChanged;
PasswordUI.Closed += PasswordUI_Closed;
PasswordUI.Canceled += PasswordUI_Canceled;
PasswordUI.Confirmed += PasswordUI_Confirmed;
UIElement currentBotaTool = GetBotaTool();
if (currentBotaTool is CPDFSearchControl)
{
((CPDFSearchControl)currentBotaTool).InitWithPDFViewer(pdfViewControl.PDFView);
}
if (currentBotaTool is CPDFThumbnailControl)
{
((CPDFThumbnailControl)currentBotaTool).InitWithPDFViewer(pdfViewControl.PDFView);
((CPDFThumbnailControl)currentBotaTool).ThumbLoaded = false;
((CPDFThumbnailControl)currentBotaTool).LoadThumb();
}
if (currentBotaTool is CPDFBookmarkControl)
{
((CPDFBookmarkControl)currentBotaTool).InitWithPDFViewer(pdfViewControl.PDFView);
((CPDFBookmarkControl)currentBotaTool).LoadBookmark();
}
ZoomTextBox.Text = string.Format("{0}", (int)(pdfViewControl.PDFView.ZoomFactor * 100)) + "%";
SetEditMode();
}
private void PasswordUI_Confirmed(object sender, string e)
{
if (passwordViewer != null && passwordViewer.PDFView != null && passwordViewer.PDFView.Document != null)
{
passwordViewer.PDFView.Document.UnlockWithPassword(e);
if (passwordViewer.PDFView.Document.IsLocked == false)
{
PasswordUI.SetShowError("", Visibility.Collapsed);
PasswordUI.ClearPassword();
PasswordUI.Visibility = Visibility.Collapsed;
PopupBorder.Visibility = Visibility.Collapsed;
pdfViewControl = passwordViewer;
LoadDocument();
}
else
{
PasswordUI.SetShowError("error", Visibility.Visible);
}
}
}
private void PasswordUI_Canceled(object sender, EventArgs e)
{
PopupBorder.Visibility = Visibility.Collapsed;
PasswordUI.Visibility = Visibility.Collapsed;
}
private void PasswordUI_Closed(object sender, EventArgs e)
{
PopupBorder.Visibility = Visibility.Collapsed;
PasswordUI.Visibility = Visibility.Collapsed;
}
private void PdfViewer_InfoChanged(object sender, KeyValuePair e)
{
if (e.Key == "PageNum")
{
PageRangeText.Text = string.Format("{0}/{1}", e.Value, pdfViewControl.PDFView.Document.PageCount);
}
if (e.Key == "Zoom")
{
ZoomTextBox.Text = string.Format("{0}", (int)((double)e.Value * 100)) + "%";
}
}
///
/// 检查缩放比例
///
private double CheckZoomLevel(double zoom, bool IsGrowth)
{
double standardZoom = 100;
if (zoom <= 0.01)
{
return 0.01;
}
if (zoom >= 10)
{
return 10;
}
zoom *= 100;
for (int i = 0; i < zoomLevelList.Length - 1; i++)
{
if (zoom > zoomLevelList[i] && zoom <= zoomLevelList[i + 1] && IsGrowth)
{
standardZoom = zoomLevelList[i + 1];
break;
}
if (zoom >= zoomLevelList[i] && zoom < zoomLevelList[i + 1] && !IsGrowth)
{
standardZoom = zoomLevelList[i];
break;
}
}
return standardZoom / 100;
}
///
/// 文字编辑和图片编辑右键点击处理
///
private void PDFView_PDFEditCommandHandler(object sender, PDFEditCommand e)
{
if (e == null)
{
return;
}
if(e.EditType==CPDFEditType.EditText)
{
e.Handle = true;
PDFEditTextContextMenu(sender,e);
}
if(e.EditType==CPDFEditType.EditImage)
{
e.Handle = true;
PDFEditImageContextMenu(sender, e);
}
}
///
/// 撤销重做状态更新事件通知
///
private void UndoManager_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
OnPropertyChanged(e.PropertyName);
}
///
/// 文字或图片块选中事件
///
private void PDFView_PDFEditActiveHandler(object sender, PDFEditEvent e)
{
PDFEditEvent tempEvent = lastPDFEditEvent;
lastPDFEditEvent = e;
if (e == null)
{
PropertyContainer.Child= null;
PropertyContainer.Visibility= Visibility.Collapsed;
return;
}
if (Mouse.RightButton==MouseButtonState.Pressed)
{
return;
}
if (e.EditType == CPDFEditType.EditText)
{
PDFTextEditControl textEditControl = new PDFTextEditControl();
textEditControl.SetPDFTextEditData(e);
PropertyContainer.Child = textEditControl;
PropertyContainer.Visibility = Visibility.Visible;
return;
}
if (e.EditType == CPDFEditType.EditImage && pdfViewControl!=null)
{
UIElement pageView=sender as UIElement;
if(pageView!=null)
{
pageView.MouseLeftButtonUp += PageView_MouseLeftButtonUp;
}
return;
}
}
private void PageView_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
UIElement pageView = sender as UIElement;
if (pageView != null)
{
pageView.MouseLeftButtonUp -= PageView_MouseLeftButtonUp;
}
if(lastPDFEditEvent!=null && lastPDFEditEvent.EditType==CPDFEditType.EditImage)
{
PDFImageEditControl imageEditControl = new PDFImageEditControl();
imageEditControl.InitWithPDFViewer(pdfViewControl.PDFView);
imageEditControl.SetPDFImageEditData(lastPDFEditEvent);
PropertyContainer.Child = imageEditControl;
PropertyContainer.Visibility = Visibility.Visible;
}
}
///
/// 加载显示默认文档
///
private void LoadDefaultDocument()
{
string defaultFilePath = "..\\..\\..\\..\\developer_guide_windows.pdf";
pdfViewControl = new PDFViewControl();
pdfViewControl.PDFView.InitDocument(defaultFilePath);
LoadDocument();
}
///
/// 搜索工具点击处理
///
private void SearchToolButton_Click(object sender, RoutedEventArgs e)
{
UIElement botaTool = GetBotaTool();
if (botaTool == null || !(botaTool is CPDFSearchControl))
{
CPDFSearchControl searchControl = new CPDFSearchControl();
if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
{
searchControl.InitWithPDFViewer(pdfViewControl.PDFView);
}
SetBotaTool(searchControl);
}
ExpandBotaTool(SearchToolButton.IsChecked == true);
ClearToolState(SearchToolButton);
}
///
/// 缩略图列表点击处理
///
private void ThumbToolButton_Click(object sender, RoutedEventArgs e)
{
UIElement botaTool = GetBotaTool();
if (botaTool == null || !(botaTool is CPDFThumbnailControl))
{
CPDFThumbnailControl thumbControl = new CPDFThumbnailControl();
if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
{
thumbControl.InitWithPDFViewer(pdfViewControl.PDFView);
thumbControl.LoadThumb();
}
SetBotaTool(thumbControl);
}
ExpandBotaTool(ThumbToolButton.IsChecked == true);
ClearToolState(ThumbToolButton);
}
///
/// 书签列表点击处理
///
private void BookmarkToolButtonn_Click(object sender, RoutedEventArgs e)
{
UIElement botaTool = GetBotaTool();
if (botaTool == null || !(botaTool is CPDFBookmarkControl))
{
CPDFBookmarkControl bookmarkControl = new CPDFBookmarkControl();
if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
{
bookmarkControl.InitWithPDFViewer(pdfViewControl.PDFView);
bookmarkControl.LoadBookmark();
}
SetBotaTool(bookmarkControl);
}
ExpandBotaTool(BookmarkToolButton.IsChecked == true);
ClearToolState(BookmarkToolButton);
}
///
/// 大纲列表处理
///
private void OutlineToolButton_Click(object sender, RoutedEventArgs e)
{
UIElement botaTool = GetBotaTool();
if (botaTool == null || !(botaTool is CPDFOutlineControl))
{
CPDFOutlineControl outlineControl = new CPDFOutlineControl();
if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
{
outlineControl.InitWithPDFViewer(pdfViewControl.PDFView);
}
SetBotaTool(outlineControl);
}
ExpandBotaTool(OutlineToolButton.IsChecked == true);
ClearToolState(OutlineToolButton);
}
///
/// 设置Bota工具内容
///
///
private void SetBotaTool(UIElement newChild)
{
BotaToolContainer.Child = newChild;
}
///
/// 获取Bota工具
///
///
private UIElement GetBotaTool()
{
return BotaToolContainer.Child;
}
///
/// 展开Bota工具
///
///
private void ExpandBotaTool(bool isExpand)
{
BotaToolContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
}
///
/// 清除左边工具栏状态
///
private void ClearToolState(UIElement ignoreTool)
{
foreach (UIElement child in BotaSideTool.Children)
{
if (child != ignoreTool && child is ToggleButton buttonTool)
{
buttonTool.IsChecked = false;
}
}
}
private void ToolExpand_Click(object sender, RoutedEventArgs e)
{
ToggleButton expandBtn = sender as ToggleButton;
if (expandBtn != null)
{
bool isExpand = expandBtn.IsChecked == true;
ExpandLeftPanel(isExpand);
if (isExpand)
{
ThumbToolButton.IsChecked = isExpand;
ThumbToolButton_Click(ThumbToolButton, new RoutedEventArgs());
}
}
}
private void ExpandSearchBtn_Click(object sender, RoutedEventArgs e)
{
ExpandLeftPanel(true);
SearchToolButton.IsChecked = true;
SearchToolButton_Click(SearchToolButton, new RoutedEventArgs());
}
private void ExpandLeftPanel(bool isExpand)
{
ExpandToolContainer.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
Splitter.Visibility = isExpand ? Visibility.Visible : Visibility.Collapsed;
if (isExpand)
{
BodyGrid.ColumnDefinitions[0].Width = new GridLength(260);
BodyGrid.ColumnDefinitions[1].Width = new GridLength(15);
}
else
{
BodyGrid.ColumnDefinitions[0].Width = new GridLength(0);
BodyGrid.ColumnDefinitions[1].Width = new GridLength(0);
}
}
private void Border_MouseEnter(object sender, MouseEventArgs e)
{
FloatPageTool.Visibility = Visibility.Visible;
}
private void PDFGrid_MouseMove(object sender, MouseEventArgs e)
{
FloatPageTool.Visibility = Visibility.Collapsed;
}
private void ViewSettingBtn_Click(object sender, RoutedEventArgs e)
{
ToggleButton toggleButton = sender as ToggleButton;
if (toggleButton != null)
{
if (toggleButton.IsChecked == true)
{
CPDFDisplaySettingsControl displayPanel = new CPDFDisplaySettingsControl();
displayPanel.InitWithPDFViewer(pdfViewControl.PDFView);
PropertyContainer.Child = displayPanel;
PropertyContainer.Visibility = Visibility.Visible;
}
else
{
PropertyContainer.Child = null;
PropertyContainer.Visibility = Visibility.Collapsed;
}
}
}
private void ZoomComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBoxItem selectItem = ZoomComboBox.SelectedItem as ComboBoxItem;
if (selectItem != null && selectItem.Content != null && pdfViewControl != null)
{
if (double.TryParse(selectItem.Content.ToString().TrimEnd('%'), out double zoomLevel))
{
pdfViewControl.PDFView.Zoom(zoomLevel / 100D);
ZoomTextBox.Text = string.Format("{0}", (int)(pdfViewControl.PDFView.ZoomFactor * 100)) + "%";
}
}
}
private void ZoomInBtn_Click(object sender, RoutedEventArgs e)
{
if (pdfViewControl != null)
{
double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor + 0.01, true);
pdfViewControl.PDFView.Zoom(newZoom);
ZoomTextBox.Text = string.Format("{0}", (int)(newZoom * 100)) + "%";
}
}
private void ZoomOutBtn_Click(object sender, RoutedEventArgs e)
{
if (pdfViewControl != null)
{
double newZoom = CheckZoomLevel(pdfViewControl.PDFView.ZoomFactor - 0.01, false);
pdfViewControl.PDFView.Zoom(newZoom);
ZoomTextBox.Text = string.Format("{0}", (int)(newZoom * 100)) + "%";
}
}
private void NextPageBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
pdfViewControl.PDFView?.GoToPage(pdfViewControl.PDFView.CurrentIndex + 1);
}
private void PrevPageBorder_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
pdfViewControl.PDFView?.GoToPage(pdfViewControl.PDFView.CurrentIndex - 1);
}
private void PageInfoBtn_Click(object sender, RoutedEventArgs e)
{
PasswordUI.Visibility = Visibility.Collapsed;
FileInfoUI.Visibility = Visibility.Visible;
FileInfoControl.InitWithPDFViewer(pdfViewControl.PDFView);
PopupBorder.Visibility = Visibility.Visible;
}
private void FileInfoCloseBtn_Click(object sender, RoutedEventArgs e)
{
PopupBorder.Visibility = Visibility.Collapsed;
}
private void OpenFile_Click(object sender, RoutedEventArgs e)
{
try
{
string filePath = CommonHelper.GetFilePathOrEmpty();
if (!string.IsNullOrEmpty(filePath) && pdfViewControl != null)
{
passwordViewer = new PDFViewControl();
passwordViewer.PDFView.InitDocument(filePath);
if (passwordViewer.PDFView.Document == null)
{
MessageBox.Show("Open File Failed");
return;
}
if (passwordViewer.PDFView.Document.IsLocked)
{
PasswordUI.SetShowText(System.IO.Path.GetFileName(filePath) + " password encrypted.");
PasswordUI.ClearPassword();
PopupBorder.Visibility = Visibility.Visible;
PasswordUI.Visibility = Visibility.Visible;
}
else
{
pdfViewControl = passwordViewer;
LoadDocument();
}
}
}
catch (Exception ex)
{
}
}
private void SaveFileBtn_Click(object sender, RoutedEventArgs e)
{
if (pdfViewControl != null && pdfViewControl.PDFView != null && pdfViewControl.PDFView.Document != null)
{
try
{
CPDFDocument pdfDoc = pdfViewControl.PDFView.Document;
if (pdfDoc.WriteToLoadedPath())
{
return;
}
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.Filter = "(*.pdf)|*.pdf";
saveDialog.DefaultExt = ".pdf";
saveDialog.OverwritePrompt = true;
if (saveDialog.ShowDialog() == true)
{
pdfDoc.WriteToFilePath(saveDialog.FileName);
}
}
catch (Exception ex)
{
}
}
}
///
/// 文字编辑模式
///
private void PDFTextEditButton_Click(object sender, RoutedEventArgs e)
{
ToggleButton senderBtn=sender as ToggleButton;
if(senderBtn != null && pdfViewControl!=null)
{
ClearPDFEditState(senderBtn);
if (senderBtn.IsChecked == true)
{
pdfViewControl.PDFView?.SetMouseMode(MouseModes.PanTool);
pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText);
pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditText);
pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
pdfViewControl.PDFView?.ReloadDocument();
}
else
{
pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
}
}
}
///
/// 图片编辑模式
///
private void PDFImageEditButton_Click(object sender, RoutedEventArgs e)
{
ToggleButton senderBtn = sender as ToggleButton;
if (senderBtn != null && pdfViewControl!=null)
{
ClearPDFEditState(senderBtn);
senderBtn.IsChecked = false;
pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditImage|CPDFEditType.EditText);
pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
pdfViewControl.PDFView?.ReloadDocument();
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
if (openFileDialog.ShowDialog() == true)
{
pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.EditImage);
pdfViewControl.PDFView?.AddPDFEditImage(openFileDialog.FileName);
}
}
}
///
/// 清除编辑相关按钮选中状态
///
private void ClearPDFEditState(ToggleButton ignoreBtn=null)
{
List clearBtnList = new List()
{
PDFTextEditButton,
PDFImageEditButton
};
foreach (ToggleButton item in clearBtnList)
{
if(ignoreBtn==item)
{
continue;
}
item.IsChecked = false;
}
}
///
/// 撤销操作
///
private void UndoBtn_Click(object sender, RoutedEventArgs e)
{
if(pdfViewControl!=null && pdfViewControl.PDFView!=null)
{
pdfViewControl.PDFView.UndoManager?.Undo();
}
}
///
/// 重做操作
///
private void RedoBtn_Click(object sender, RoutedEventArgs e)
{
if (pdfViewControl != null && pdfViewControl.PDFView != null)
{
pdfViewControl.PDFView.UndoManager?.Redo();
}
}
///
/// 文字编辑右键菜单
///
private void PDFEditTextContextMenu(object sender,PDFEditCommand editCommand)
{
editCommand.PopupMenu = new ContextMenu();
if (lastPDFEditEvent != null)
{
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "复制", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "剪切", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "删除", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "粘贴", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
MenuItem propertyMenu = new MenuItem();
propertyMenu.Header = "属性";
propertyMenu.Click += (o, p) =>
{
if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditText)
{
PDFTextEditControl textEditControl = new PDFTextEditControl();
textEditControl.SetPDFTextEditData(lastPDFEditEvent);
PropertyContainer.Child = textEditControl;
}
};
editCommand.PopupMenu.Items.Add(propertyMenu);
}
else
{
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "粘贴", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
if(editCommand.TextAreaCopied)
{
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "粘贴样式", Command = CustomCommands.PasteMatchStyle, CommandTarget = (UIElement)sender });
}
}
}
///
/// 图片编辑右键菜单
///
private void PDFEditImageContextMenu(object sender, PDFEditCommand editCommand)
{
editCommand.PopupMenu = new ContextMenu();
if(lastPDFEditEvent!=null)
{
MenuItem rotateLeftMenu = new MenuItem();
rotateLeftMenu.Header = "左旋转";
rotateLeftMenu.Click += (o, p) =>
{
if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
{
lastPDFEditEvent.Rotate = -90;
lastPDFEditEvent.UpdatePDFEditByEventArgs();
}
};
editCommand.PopupMenu.Items.Add(rotateLeftMenu);
MenuItem rotateRightMenu = new MenuItem();
rotateRightMenu.Header = "右旋转";
rotateRightMenu.Click += (o, p) =>
{
if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
{
lastPDFEditEvent.Rotate = 90;
lastPDFEditEvent.UpdatePDFEditByEventArgs();
}
};
editCommand.PopupMenu.Items.Add(rotateRightMenu);
MenuItem replaceMenu = new MenuItem();
replaceMenu.Header = "替换";
replaceMenu.Click += (o, p) =>
{
if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image Files(*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp;";
if (openFileDialog.ShowDialog() == true)
{
lastPDFEditEvent.ReplaceImagePath = openFileDialog.FileName;
lastPDFEditEvent.UpdatePDFEditByEventArgs();
pdfViewControl.PDFView?.ClearSelectPDFEdit();
}
}
};
editCommand.PopupMenu.Items.Add(replaceMenu);
MenuItem exportMenu = new MenuItem();
exportMenu.Header = "导出";
exportMenu.Click += (o, p) =>
{
if (pdfViewControl != null && pdfViewControl.PDFView!=null)
{
Dictionary> imageDict = pdfViewControl.PDFView.GetSelectedImages();
if (imageDict != null && imageDict.Count > 0)
{
System.Windows.Forms.FolderBrowserDialog folderBrowser = new System.Windows.Forms.FolderBrowserDialog();
if (folderBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
string choosePath = folderBrowser.SelectedPath;
string openPath = choosePath;
try
{
foreach (int pageIndex in imageDict.Keys)
{
List imageList = imageDict[pageIndex];
foreach (Bitmap image in imageList)
{
string savePath = System.IO.Path.Combine(choosePath, Guid.NewGuid() + ".jpg");
image.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);
openPath = savePath;
}
}
Process.Start("explorer", "/select,\"" + openPath + "\"");
}
catch (Exception ex)
{
}
}
}
}
};
editCommand.PopupMenu.Items.Add(exportMenu);
MenuItem opacityMenu = new MenuItem();
opacityMenu.Header = "透明度";
editCommand.PopupMenu.Items.Add(opacityMenu);
AppendOpacityMenu(opacityMenu);
MenuItem horizonMirror = new MenuItem();
horizonMirror.Header = "水平镜像";
horizonMirror.Click += (o, p) =>
{
if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
{
lastPDFEditEvent.HorizontalMirror = true;
lastPDFEditEvent.UpdatePDFEditByEventArgs();
}
};
editCommand.PopupMenu.Items.Add(horizonMirror);
MenuItem verticalMirror = new MenuItem();
verticalMirror.Header = "垂直镜像";
verticalMirror.Click += (o, p) =>
{
if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
{
lastPDFEditEvent.VerticalMirror = true;
lastPDFEditEvent.UpdatePDFEditByEventArgs();
}
};
editCommand.PopupMenu.Items.Add(verticalMirror);
MenuItem cropMenu = new MenuItem();
cropMenu.Header = "裁剪";
cropMenu.Click += (o, p) =>
{
if (lastPDFEditEvent != null && lastPDFEditEvent.EditType == CPDFEditType.EditImage)
{
lastPDFEditEvent.ClipImage = true;
lastPDFEditEvent.UpdatePDFEditByEventArgs();
}
};
editCommand.PopupMenu.Items.Add(cropMenu);
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "复制", Command = ApplicationCommands.Copy, CommandTarget = (UIElement)sender });
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "剪切", Command = ApplicationCommands.Cut, CommandTarget = (UIElement)sender });
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "删除", Command = ApplicationCommands.Delete, CommandTarget = (UIElement)sender });
}
else
{
if(Clipboard.ContainsImage())
{
editCommand.PopupMenu.Items.Add(new MenuItem() { Header = "粘贴", Command = ApplicationCommands.Paste, CommandTarget = (UIElement)sender });
}
}
}
///
/// 图片编辑透明度二级菜单
///
private void AppendOpacityMenu(MenuItem parentMenu)
{
List opacityList = new List()
{
25,50,75,100
};
foreach(int opacity in opacityList)
{
MenuItem opacityMenu = new MenuItem();
opacityMenu.Header = string.Format("{0}%", opacity);
opacityMenu.Click += (o, p) =>
{
if(lastPDFEditEvent != null && lastPDFEditEvent.EditType==CPDFEditType.EditImage)
{
lastPDFEditEvent.Transparency = (int) Math.Ceiling(opacity * 255 / 100D);
lastPDFEditEvent.UpdatePDFEditByEventArgs();
}
};
parentMenu.Items.Add(opacityMenu);
}
}
///
/// 进入文字和图片编辑
///
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
SetEditMode();
}
private void SetEditMode()
{
ClearPDFEditState(null);
if (pdfViewControl != null && ViewComboBox != null)
{
if (ViewComboBox.SelectedIndex == 0)
{
PDFEditTool.Visibility = Visibility.Collapsed;
pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.None);
pdfViewControl.PDFView?.SetMouseMode(MouseModes.PanTool);
pdfViewControl.PDFView?.ReloadDocument();
if (PropertyContainer != null)
{
PropertyContainer.Child = null;
}
return;
}
if (ViewComboBox.SelectedIndex == 1)
{
PDFEditTool.Visibility = Visibility.Visible;
pdfViewControl.PDFView?.SetPDFEditType(CPDFEditType.EditText | CPDFEditType.EditImage);
pdfViewControl.PDFView?.SetPDFEditCreateType(CPDFEditType.None);
pdfViewControl.PDFView?.SetMouseMode(MouseModes.PDFEdit);
pdfViewControl.PDFView?.ReloadDocument();
}
}
}
}
}