liyijie 2 tahun lalu
induk
melakukan
3933f7f3ed

TEMPAT SAMPAH
PDF Office/ComPDFKit.Desk.dll


+ 22 - 2
PDF Office/EventAggregators/EditToolsEvent.cs

@@ -1,4 +1,5 @@
-using PDF_Office.Model.EditTools.Background;
+using ComPDFKitViewer.PdfViewer;
+using PDF_Office.Model.EditTools.Background;
 using PDF_Office.Model.EditTools.Watermark;
 using PDFSettings;
 using Prism.Events;
@@ -11,6 +12,12 @@ using System.Threading.Tasks;
 namespace PDF_Office.EventAggregators
 {
 
+    public enum EnumCloseMode
+    {
+        StatusConfirm,
+        StatusCancel,
+    }
+
     public enum EnumTemplateListOrCreate
     {
         StatusNone = -1,
@@ -31,6 +38,12 @@ namespace PDF_Office.EventAggregators
         StatusText,
         StatusFile
     }
+    public enum EnumDelete
+    {
+        StatusCreate,
+        StatusDeleteAll,
+        StatusDeleteInitial
+    }
 
     public class StringWithUnicode
     {
@@ -42,7 +55,7 @@ namespace PDF_Office.EventAggregators
     {
     }
 
-    public class CloseEditToolEvent : PubSubEvent
+    public class CloseEditToolEvent : PubSubEvent<EnumCloseMode>
     {
     }
 
@@ -86,6 +99,13 @@ namespace PDF_Office.EventAggregators
     {
     }
 
+    public class DeleteWatermarkEvent : PubSubEvent<EnumDelete>
+    {
+    }
+
+    public class CurrentWatermarkPDFViewerEvent : PubSubEvent<CPDFViewer>
+    {
+    }
     public class EditBackgroundTemplateItemEvent : PubSubEvent<BackgroundInfo>
     {
     }

+ 16 - 1
PDF Office/Model/EditTools/Watermark/WatermarkCreateModel.cs

@@ -12,6 +12,7 @@ namespace PDF_Office.Model.EditTools.Watermark
     {
        
     }
+
     public class WatermarkInfo {
 
         /// <summary>
@@ -42,7 +43,12 @@ namespace PDF_Office.Model.EditTools.Watermark
         /// <summary>
         /// 图片水印内容;
         /// </summary>
-        public byte[] ImageArray  = null;
+        public byte[] ImageArray = null;
+
+        /// <summary>
+        /// 图片水印路径;
+        /// </summary>
+        public string ImagePath  = "";
 
         /// <summary>
         /// 图片水印大小;
@@ -64,6 +70,15 @@ namespace PDF_Office.Model.EditTools.Watermark
         /// </summary>
         public string PageRange  = "0";
 
+        /// <summary>
+        /// 水印页面范围索引;
+        /// 0:全部页面
+        /// 1:奇数页
+        /// 2;偶数页
+        /// 3:自定义页
+        /// </summary>
+        public int PageRangeIndex = 0;
+
         /// <summary>
         /// 水印垂直位置;
         /// </summary>

+ 3 - 1
PDF Office/ViewModels/EditTools/Background/BackgroundContentViewModel.cs

@@ -117,12 +117,14 @@ namespace PDF_Office.ViewModels.EditTools.Background
 
         public void CloseEditTool()
         {
-            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish();
+            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish(EnumCloseMode.StatusCancel);
         }
 
         public void ConfirmEditTool()
         {
             this.eventAggregator.GetEvent<ConfirmEditToolsBackgroundEvent>().Publish();
+
+            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish(EnumCloseMode.StatusConfirm);
         }
 
         public void EnterTemplateListOrCreate(EnumTemplateListOrCreate enumTemplateListOrCreate)

+ 0 - 2
PDF Office/ViewModels/EditTools/Background/BackgroundDocumentContentViewModel.cs

@@ -57,8 +57,6 @@ namespace PDF_Office.ViewModels.EditTools.Background
             if (backgroundInfo != null)
             {
                 CreateBackground(viewContentViewModel.PDFViewer.Document);
-                viewContentViewModel.PDFViewer.ReloadDocument();
-                this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish();
             }
         }
 

+ 28 - 5
PDF Office/ViewModels/EditTools/Watermark/WatermarkContentViewModel.cs

@@ -20,6 +20,8 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
 
         private CPDFViewer PDFViewer;
 
+        private CPDFViewer CurrentPDFViewer;
+
         private ViewContentViewModel viewContentViewModel;
 
         public string TemplateListName = "WatermarkTemplateListBaseContent";
@@ -102,17 +104,24 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             eventAggregator.GetEvent<EnterTemplateListOrCreateEvent>().Subscribe(EnterTemplateListOrCreate);
             eventAggregator.GetEvent<SetCurrentCreateModEvent>().Subscribe(SetCurrentCreateMod);
             eventAggregator.GetEvent<SetCurrentTemplateListModEvent>().Subscribe(SetCurrentTemplateListMod);
+            eventAggregator.GetEvent<CurrentWatermarkPDFViewerEvent>().Subscribe(CurrentWatermarkPDFViewer);
+
+        }
+        public void CurrentWatermarkPDFViewer(CPDFViewer cPDFViewer)
+        {
+            CurrentPDFViewer = cPDFViewer;
 
         }
         public void CloseEditTool()
         {
-            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish();
+            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish(EnumCloseMode.StatusCancel);
 
         }
 
         public void ConfirmEditTool()
         {
             this.eventAggregator.GetEvent<ConfirmEditToolsWatermarkEvent>().Publish();
+            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish(EnumCloseMode.StatusConfirm);
         }
 
         public void EnterTemplateListOrCreate(EnumTemplateListOrCreate enumTemplateListOrCreate)
@@ -178,10 +187,24 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
 
         private void DeleteWatermark() {
             AlertsMessage alertsMessage = new AlertsMessage();
-            alertsMessage.ShowDialog("", "请输入有效范围", "OK");
-            PDFViewer.Document.DeleteWatermarks();
-            PDFViewer.UndoManager.CanSave = true;
-            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish();
+            if (CurrentPDFViewer.Document.GetWatermarkCount()> 0)
+            {
+                alertsMessage.ShowDialog("确定要删除文件水印吗?", "", "取消", "删除");
+                if (alertsMessage.result == ContentResult.Ok)
+                {
+                    this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(EnumDelete.StatusDeleteAll);
+                }
+                else
+                {
+                    this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(EnumDelete.StatusCreate);
+                }
+            }
+            else {
+
+                alertsMessage.ShowDialog("无法在本文件中找到可删除的水印。如果您看到水印,其不是使用PDF Office添加的,因此无法被检测到。", "", "取消", "确定");
+            }
+            
+            
         }
 
         public void OnNavigatedTo(NavigationContext navigationContext)

+ 5 - 2
PDF Office/ViewModels/EditTools/Watermark/WatermarkCreateFileContentViewModel.cs

@@ -220,6 +220,7 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             set
             {
                 SetProperty(ref _pageRangeSelectIndex, value);
+                WatermarkInfo.PageRangeIndex = PageRangeSelectIndex;
                 EditToolsHelper.GetPageRange(PageRangeSelectIndex, PDFViewer.Document, ref WatermarkInfo.PageRange, PageRangeText);
                 eventAggregator.GetEvent<SetWatermarkEvent>().Publish(WatermarkInfo);
 
@@ -276,7 +277,6 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             InitList();
             InitWatermarkInfo();
             InitLocationButtonMatrix();
-            //eventAggregator.GetEvent<ConfirmEditToolsWatermarkEvent>().Subscribe(ConfirmEditToolsWatermark);
             eventAggregator.GetEvent<SaveWatermarkTemplateEvent>().Subscribe(SaveWatermarkTemplate);
         }
 
@@ -293,7 +293,8 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             if (watermarkInfo != null)
             {
                 watermarkItem.type = watermarkInfo.WatermarkType;
-                watermarkItem.imageArray = watermarkInfo.ImageArray;
+                //watermarkItem.imageArray = watermarkInfo.ImageArray;
+                watermarkItem.imagepath=watermarkInfo.ImagePath;
                 watermarkItem.imageSize = watermarkInfo.ImageSize;
                 watermarkItem.imageWidth  = watermarkInfo.ImageWidth;
                 watermarkItem.imageHeight = watermarkInfo.ImageHeight;
@@ -307,6 +308,7 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
                 watermarkItem.horizOffset = watermarkInfo.HorizOffset;
                 watermarkItem.verticalSpacing = watermarkInfo.VerticalSpacing;
                 watermarkItem.horizontalSpacing = watermarkInfo.HorizontalSpacing;
+                watermarkItem.pageRangeIndex = watermarkInfo.PageRangeIndex;
                 watermarkItem.pageRange = watermarkInfo.PageRange;
             }
         }
@@ -408,6 +410,7 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
                 {
                     EditToolsHelper.ChooseFile(dlg.FileName, ref WatermarkInfo);
                 }
+                WatermarkInfo.ImagePath = dlg.FileName;
                 CreateFileVisible = Visibility.Visible;
                 eventAggregator.GetEvent<SetWatermarkEvent>().Publish(WatermarkInfo);
             }

+ 2 - 2
PDF Office/ViewModels/EditTools/Watermark/WatermarkCreateTextContentViewModel.cs

@@ -340,6 +340,7 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             set
             {
                 SetProperty(ref _pageRangeSelectIndex, value);
+                WatermarkInfo.PageRangeIndex = PageRangeSelectIndex;
                 EditToolsHelper.GetPageRange(PageRangeSelectIndex, PDFViewer.Document, ref WatermarkInfo.PageRange, PageRangeText);
                 eventAggregator.GetEvent<SetWatermarkEvent>().Publish(WatermarkInfo);
             }
@@ -369,8 +370,6 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             InitList();
             InitWatermarkInfo();
             InitLocationButtonMatrix();
-            //eventAggregator.GetEvent<ConfirmEditToolsWatermarkEvent>().Subscribe(ConfirmEditToolsWatermark);
-
             eventAggregator.GetEvent<SaveWatermarkTemplateEvent>().Subscribe(SaveWatermarkTemplate);
         }
 
@@ -401,6 +400,7 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
                 watermarkItem.horizOffset = watermarkInfo.HorizOffset;
                 watermarkItem.verticalSpacing = watermarkInfo.VerticalSpacing;
                 watermarkItem.horizontalSpacing = watermarkInfo.HorizontalSpacing;
+                watermarkItem.pageRangeIndex = watermarkInfo.PageRangeIndex;
                 watermarkItem.pageRange = watermarkInfo.PageRange;
             }
         }

+ 44 - 11
PDF Office/ViewModels/EditTools/Watermark/WatermarkDocumentContentViewModel.cs

@@ -39,7 +39,8 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
         private ViewContentViewModel viewContentViewModel;
         private CPDFViewer pdfViewer;
         private WatermarkInfo watermarkInfo;
-
+        private string unicode = null;
+        public EnumDelete EnumDelete = EnumDelete.StatusCreate;
 
         public bool firstin = true;
 
@@ -49,25 +50,58 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
         {
             this.regionManager = regionManager;
             this.eventAggregator = eventAggregator;
+            unicode = App.mainWindowViewModel.SelectedItem.Unicode;
             eventAggregator.GetEvent<SetWatermarkEvent>().Subscribe(SetWatermark);
             ViewerRegionName = RegionNames.WatermarkViwerRegionName;
+            eventAggregator.GetEvent<PageEditRefreshEvent>().Subscribe(OnPageEditRefreshEvent, e => e.Unicode == unicode);
             eventAggregator.GetEvent<ConfirmEditToolsWatermarkEvent>().Subscribe(ConfirmEditToolsWatermark);
+            eventAggregator.GetEvent<DeleteWatermarkEvent>().Subscribe(DeleteWatermark);
 
         }
+        /// <summary>
+        /// 响应UI发送刷新图片的事件
+        /// </summary>
+        /// <param name="e"></param>
+        private void OnPageEditRefreshEvent(PageEditRefreshEventArgs e)
+        {
+            //UI发送事件过来通知刷新图片时
+            //调整逻辑,前后预加载5页
+           
+        }
+
 
         public void ConfirmEditToolsWatermark()
         {
+
+            if (EnumDelete == EnumDelete.StatusDeleteAll)
+            {
+                viewContentViewModel.PDFViewer.Document.DeleteWatermarks();
+            }
+
             if (watermarkInfo != null)
             {
-                CreateWatermark(viewContentViewModel.PDFViewer.Document);
-                viewContentViewModel.PDFViewer.ReloadDocument();
+                
+                if (EnumDelete == EnumDelete.StatusDeleteInitial)
+                {
+                    viewContentViewModel.PDFViewer.Document.DeleteWatermarks();
+                    CreateWatermark(viewContentViewModel.PDFViewer.Document);
+                }
+                else
+                {
+                    CreateWatermark(viewContentViewModel.PDFViewer.Document);
+                }
                 viewContentViewModel.PDFViewer.UndoManager.CanSave = true;
-
-                //viewContentViewModel.PDFViewer.Document.WriteToFilePath("C:\\Users\\kdanmobile\\Desktop\\888\\_.pdf");
-                this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish();
             }
         }
 
+        public void DeleteWatermark(EnumDelete enumDelete)
+        {
+            EnumDelete = enumDelete;
+            PDFViewer.Document.DeleteWatermarks();
+            PDFViewer.Document.ReleasePages();
+            PDFViewer.ReloadDocument();
+        }
+
         public void SetWatermark(WatermarkInfo watermarkInfo)
         {
             this.watermarkInfo = watermarkInfo;
@@ -90,7 +124,6 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
                     watermark.SetFontName(watermarkInfo.FontName);
                     watermark.SetFontSize(watermarkInfo.TextSize);
                     watermark.SetTextRGBColor(watermarkInfo.TextColor);
-                    watermark.SetScale(1f);
                 }
                 else
                 {
@@ -114,8 +147,7 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
                 watermark.SetVerticalSpacing(watermarkInfo.VerticalSpacing);
                 if (IsNewDoc) { watermark.SetPages("0"); }
                 else { watermark.SetPages(watermarkInfo.PageRange); }
-
-                Trace.WriteLine("IsCreateWatermark: "+ watermark.CreateWatermark());
+                Trace.WriteLine("IsCreateWatermark: " + watermark.CreateWatermark());
                 Trace.WriteLine("IsUpdateWatermark: " + watermark.UpdateWatermark());
             }
         }
@@ -186,11 +218,11 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
 
         public void OnNavigatedTo(NavigationContext navigationContext)
         {
-            
+
             navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out pdfViewer);
 
             navigationContext.Parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
-            if (pdfViewer != null&& viewContentViewModel!=null)
+            if (pdfViewer != null && viewContentViewModel != null)
             {
                 if (!regionManager.Regions[ViewerRegionName].Views.Contains(PDFViewer))
                 {
@@ -204,6 +236,7 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
                     PDFViewer.Load();
                     PDFViewer.ChangeViewMode(ViewMode.Single);
                     PDFViewer.SetMouseMode(MouseModes.Default);
+                    eventAggregator.GetEvent<CurrentWatermarkPDFViewerEvent>().Publish(PDFViewer);
                 }
             }
         }

+ 27 - 2
PDF Office/ViewModels/EditTools/Watermark/WatermarkTemplateListBaseContentViewModel.cs

@@ -1,4 +1,7 @@
-using PDF_Office.EventAggregators;
+using ComPDFKitViewer.PdfViewer;
+using PDF_Office.CustomControl;
+using PDF_Office.EventAggregators;
+using PDF_Office.Model;
 using Prism.Commands;
 using Prism.Events;
 using Prism.Mvvm;
@@ -15,6 +18,8 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
         public IRegionManager watermarkTemplateListRegion;
         private readonly IEventAggregator eventAggregator;
 
+        private CPDFViewer CurrentPDFViewer;
+
         private string WatermarkTemplateListTextContentName = "WatermarkTemplateListTextContent";
         private string WatermarkTemplateListFileContentName = "WatermarkTemplateListFileContent";
 
@@ -56,16 +61,36 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             ChangeTemplateListModCommand = new DelegateCommand<object>(ChangeTemplateListMod);
             EnterCreateCommand = new DelegateCommand(EnterCreate);
             EnterSelectedTemplateListMod("WatermarkTemplateListColorContent");
+            eventAggregator.GetEvent<CurrentWatermarkPDFViewerEvent>().Subscribe(CurrentWatermarkPDFViewer);
+
         }
+        public void CurrentWatermarkPDFViewer(CPDFViewer cPDFViewer) {
+            CurrentPDFViewer = cPDFViewer;
 
+        }
         public void EnterCreate()
         {
+            AlertsMessage alertsMessage = new AlertsMessage();
+            if (CurrentPDFViewer.Document.GetWatermarkCount() > 0)
+            {
+                alertsMessage.ShowDialog("文件中已添加水印,您要替换现有的水印吗?", "", "取消", "确定");
+                if (alertsMessage.result == ContentResult.Ok)
+                {
+                    this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(EnumDelete.StatusDeleteInitial);
+                }
+                else {
+                    this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(EnumDelete.StatusCreate);
+                }
+            }
             this.eventAggregator.GetEvent<EnterTemplateListOrCreateEvent>().Publish(EnumTemplateListOrCreate.StatusCreate);
+
         }
 
         public void EnterSelectedTemplateListMod(string currentTemplateListName)
         {
-            watermarkTemplateListRegion.RequestNavigate(WatermarkTemplateListRegionName, currentTemplateListName);
+            NavigationParameters param = new NavigationParameters();
+            param.Add(ParameterNames.PDFViewer, CurrentPDFViewer);
+            watermarkTemplateListRegion.RequestNavigate(WatermarkTemplateListRegionName, currentTemplateListName, param);
             watermarkTemplateListVisible = System.Windows.Visibility.Visible;
         }
 

+ 64 - 5
PDF Office/ViewModels/EditTools/Watermark/WatermarkTemplateListFileContentViewModel.cs

@@ -1,4 +1,10 @@
-using PDF_Office.EventAggregators;
+using ComPDFKit.PDFDocument;
+using ComPDFKit.PDFPage;
+using ComPDFKitViewer.PdfViewer;
+using PDF_Office.CustomControl;
+using PDF_Office.EventAggregators;
+using PDF_Office.Helper;
+using PDF_Office.Model;
 using PDF_Office.Model.EditTools.Background;
 using PDF_Office.Model.EditTools.Watermark;
 using PDF_Office.Properties;
@@ -10,7 +16,9 @@ using Prism.Regions;
 using System;
 using System.Collections.Generic;
 using System.Collections.ObjectModel;
+using System.IO;
 using System.Linq;
+using System.Threading.Tasks;
 using System.Windows;
 using System.Windows.Controls;
 
@@ -20,6 +28,8 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
     {
         private readonly IEventAggregator eventAggregator;
 
+        private CPDFViewer CurrentPDFViewer;
+
         public WatermarkInfo WatermarkInfo = new WatermarkInfo();
         public ObservableCollection<WatermarkItem> watermarkModFileCollection = new ObservableCollection<WatermarkItem>();
         public ObservableCollection<WatermarkItem> WatermarkModFileCollection
@@ -51,6 +61,13 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             DeleteTemplateItemCommand = new DelegateCommand<object>(DeleteTemplateItem);
             DeleteAllTemplateItemCommand = new DelegateCommand(DeleteAllTemplateItem);
             SelectTemplateItemCommand = new DelegateCommand<object>(SelectTemplateItem);
+            eventAggregator.GetEvent<CurrentWatermarkPDFViewerEvent>().Subscribe(CurrentWatermarkPDFViewer);
+
+        }
+        public void CurrentWatermarkPDFViewer(CPDFViewer cPDFViewer)
+        {
+            CurrentPDFViewer = cPDFViewer;
+
         }
 
         private void CheckTemplateListIsEmpty(List<WatermarkItem> watermarkTemplateList)
@@ -133,6 +150,19 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
 
         public void SelectTemplateItem(object e)
         {
+            AlertsMessage alertsMessage = new AlertsMessage();
+            if (CurrentPDFViewer.Document.GetWatermarkCount() > 0)
+            {
+                alertsMessage.ShowDialog("文件中已添加水印,您要替换现有的水印吗?", "", "取消", "确定");
+                if (alertsMessage.result == ContentResult.Ok)
+                {
+                    this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(EnumDelete.StatusDeleteInitial);
+                }
+                else
+                {
+                    this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(EnumDelete.StatusCreate);
+                }
+            }
             var listBox = e as ListBox;
             WatermarkItem WatermarkItem   = listBox.SelectedItem as WatermarkItem;
             SendTemplateItemToDocument(WatermarkItem);
@@ -143,9 +173,22 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             if (watermarkItem != null)
             {
                 watermarkInfo.WatermarkType = watermarkItem.type;
-                watermarkInfo.ImageWidth = watermarkItem.imageWidth;
-                watermarkInfo.ImageHeight = watermarkItem.imageHeight;
-                watermarkInfo.ImageArray = watermarkItem.imageArray;
+                FileInfo file = new FileInfo(watermarkItem.imagepath);
+                if (file.Exists)
+                {
+                    if (file.Extension == ".pdf")
+                    {
+                        GetBitmapFromDocment(watermarkItem.imagepath);
+                    }
+                    else
+                    {
+                        EditToolsHelper.ChooseFile(watermarkItem.imagepath, ref WatermarkInfo);
+                    }
+                }
+                else {
+                    watermarkInfo.WatermarkType = ComPDFKit.PDFWatermark.C_Watermark_Type.WATERMARK_TYPE_UNKWON;
+                    MessageBoxEx.Show("原路径为:"+ watermarkItem.imagepath+",该文件不存在");
+                }
                 watermarkInfo.WatermarkHorizalign = watermarkItem.horizalign;
                 watermarkInfo.WatermarkVertalign = watermarkItem.vertalign;
                 watermarkInfo.Isfull = watermarkItem.isFullScreen;
@@ -157,10 +200,26 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
                 watermarkInfo.HorizOffset = watermarkItem.horizOffset;
                 watermarkInfo.VerticalSpacing = watermarkItem.verticalSpacing;
                 watermarkInfo.HorizontalSpacing = watermarkItem.horizontalSpacing;
-                watermarkInfo.PageRange = watermarkItem.pageRange;
+                EditToolsHelper.GetPageRange(watermarkItem.pageRangeIndex, CurrentPDFViewer.Document, ref WatermarkInfo.PageRange, watermarkItem.pageRange);
             }
         }
 
+        public async void GetBitmapFromDocment(string filePath)
+        {
+            CPDFDocument document = CPDFDocument.InitWithFilePath(filePath);
+            CPDFPage page = document.PageAtIndex(0);
+            byte[] bmp_data = new byte[(int)page.PageSize.Width * (int)page.PageSize.Height * 4];
+            await Task.Run(delegate
+            {
+                page.RenderPageBitmap(0, 0, (int)page.PageSize.Width, (int)page.PageSize.Height, 0xffffffff, bmp_data, 1);
+            });
+            WatermarkInfo.ImageArray = bmp_data;
+            WatermarkInfo.ImageWidth = (int)page.PageSize.Width;
+            WatermarkInfo.ImageHeight = (int)page.PageSize.Height;
+            document.ReleasePages();
+            document.Release();
+        }
+
         public void SendTemplateItemToDocument(WatermarkItem WatermarkItem)
         {
             ConvertItemToInfo(WatermarkItem, ref WatermarkInfo);

+ 28 - 1
PDF Office/ViewModels/EditTools/Watermark/WatermarkTemplateListTextContentViewModel.cs

@@ -12,12 +12,19 @@ using Prism.Events;
 using PDF_Office.EventAggregators;
 using PDF_Office.Model.EditTools.Watermark;
 using System.Windows.Controls;
+using ComPDFKitViewer.PdfViewer;
+using PDF_Office.CustomControl;
+using PDF_Office.Model;
+using PDF_Office.Helper;
 
 namespace PDF_Office.ViewModels.EditTools.Watermark
 {
     public class WatermarkTemplateListTextContentViewModel : BindableBase, INavigationAware
     {
         private readonly IEventAggregator eventAggregator;
+
+        private CPDFViewer CurrentPDFViewer;
+
         public WatermarkInfo WatermarkInfo = new WatermarkInfo();
         public ObservableCollection<WatermarkItem> watermarkModTextCollection = new ObservableCollection<WatermarkItem>();
         public ObservableCollection<WatermarkItem> WatermarkModTextCollection
@@ -49,6 +56,13 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
             DeleteTemplateItemCommand = new DelegateCommand<object>(DeleteTemplateItem);
             DeleteAllTemplateItemCommand = new DelegateCommand(DeleteAllTemplateItem);
             SelectTemplateItemCommand = new DelegateCommand<object>(SelectTemplateItem);
+            eventAggregator.GetEvent<CurrentWatermarkPDFViewerEvent>().Subscribe(CurrentWatermarkPDFViewer);
+
+        }
+        public void CurrentWatermarkPDFViewer(CPDFViewer cPDFViewer)
+        {
+            CurrentPDFViewer = cPDFViewer;
+
         }
 
         private void CheckTemplateListIsEmpty(List<WatermarkItem> watermarkTemplateList)
@@ -132,6 +146,19 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
 
         public void SelectTemplateItem(object e)
         {
+            AlertsMessage alertsMessage = new AlertsMessage();
+            if (CurrentPDFViewer.Document.GetWatermarkCount() > 0)
+            {
+                alertsMessage.ShowDialog("文件中已添加水印,您要替换现有的水印吗?", "", "取消", "确定");
+                if (alertsMessage.result == ContentResult.Ok)
+                {
+                    this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(EnumDelete.StatusDeleteInitial);
+                }
+                else
+                {
+                    this.eventAggregator.GetEvent<DeleteWatermarkEvent>().Publish(EnumDelete.StatusCreate);
+                }
+            }
             var listBox = e as ListBox;
             WatermarkItem WatermarkItem = listBox.SelectedItem as WatermarkItem;
             SendTemplateItemToDocument(WatermarkItem);
@@ -156,7 +183,7 @@ namespace PDF_Office.ViewModels.EditTools.Watermark
                 watermarkInfo.HorizOffset = watermarkItem.horizOffset;
                 watermarkInfo.VerticalSpacing = watermarkItem.verticalSpacing;
                 watermarkInfo.HorizontalSpacing = watermarkItem.horizontalSpacing;
-                watermarkInfo.PageRange = watermarkItem.pageRange;
+                EditToolsHelper.GetPageRange(watermarkItem.pageRangeIndex, CurrentPDFViewer.Document, ref WatermarkInfo.PageRange, watermarkItem.pageRange);
             }
 
         }

File diff ditekan karena terlalu besar
+ 984 - 975
PDF Office/ViewModels/ViewContentViewModel.cs


+ 17 - 0
PDFSettings/WatermarkTemplateList.cs

@@ -13,6 +13,14 @@ namespace PDFSettings
 
     }
 
+    public enum EnumPageRangeIndex
+    {
+        StatusOne = 0,
+        StatusTwo,
+        StatusThree,
+        StatusFour,
+    }
+
     public class WatermarkItem : EventArgs
     {
         /// <summary>
@@ -44,6 +52,15 @@ namespace PDFSettings
         /// </summary>
         public string pageRange;
 
+        /// <summary>
+        /// 水印页面范围索引;
+        /// 0:全部页面
+        /// 1:奇数页
+        /// 2;偶数页
+        /// 3:自定义页
+        /// </summary>
+        public int pageRangeIndex = 0;
+
         /// <summary>
         /// 水平位置
         /// </summary>