소스 검색

注释-切换页签引起的bug、导出图章

OYXH\oyxh 1 년 전
부모
커밋
cdaa1fea8f

+ 3 - 3
PDF Office/ViewModels/PropertyPanel/AnnotPanel/SnapshotEditMenuViewModel.cs

@@ -301,7 +301,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
             try
             {
                 DirectoryInfo tempfolder = new DirectoryInfo(Path.Combine(App.CurrentPath, "Temp"));
-                string strpath = tempfolder + DateTime.Now.ToString("yyyyMMddfff") + ".jpg";
+                string strpath = Path.Combine(tempfolder.FullName, DateTime.Now.ToString("yyyyMMddfff") + ".jpg");
                 if (!File.Exists(tempfolder.FullName))
                 {
                     Directory.CreateDirectory(tempfolder.FullName);
@@ -327,7 +327,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
         /// 复制
         /// </summary>
         private void CopyEvent()
-        { 
+        {
             if (SnapToolArgs != null)
             {
                 WriteableBitmap saveBitmap = SnapToolArgs.GetSnapshotImage();
@@ -343,7 +343,7 @@ namespace PDF_Master.ViewModels.PropertyPanel.AnnotPanel
                         SnapToolEvent.Invoke(this, param);
                     }
                 }
-            } 
+            }
         }
 
         private System.Drawing.Bitmap BitmapFromWriteableBitmap(WriteableBitmap writeBmp)

+ 3 - 4
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.Command.cs

@@ -331,7 +331,7 @@ namespace PDF_Master.ViewModels.Tools
                     if (e.IsAnnotCreateReset)
                     {
                         PropertyPanel.annot = e.AnnotItemsList[0];
-                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                         PropertyPanel.AnnotEvents = null;
                         PropertyPanel.AnnotEvent = AnnotEvent;
                         PropertyPanel.annotlists = e.AnnotItemsList;
@@ -692,7 +692,6 @@ namespace PDF_Master.ViewModels.Tools
                         PropertyPanel.annotlists = e.AnnotItemsList;
                         viewContentViewModel.IsMultiSelected = true;
                         //viewContentViewModel.SelectedPrpoertyPanel("PropertyPanelContent", null);
-                       
 
                         #region MVP 在对多选注释做处理
                         bool isDifferentAnnotTyle = AnnotTransfer.IsDifferentTypeAnnots(e.AnnotItemsList);
@@ -885,7 +884,7 @@ namespace PDF_Master.ViewModels.Tools
 
         private void PreviewExcute(object sender, ExecutedRoutedEventArgs e)
         {
-            if (e.Command == ApplicationCommands.Copy||e.Command == ApplicationCommands.Cut)
+            if (e.Command == ApplicationCommands.Copy || e.Command == ApplicationCommands.Cut)
             {
                 VerifyPasswordResult result = SecurityHelper.VerifyPasswordForSelectedPermissions(PDFViewer.Document, Model.Dialog.ToolsDialogs.SaftyDialogs.EnumPermissionsSet.StatusAllowsCopying, dialogs);
                 if (result.IsDiscryptied)
@@ -1729,7 +1728,7 @@ namespace PDF_Master.ViewModels.Tools
                                     if (PropertyPanel != null)
                                     {
                                         //属性面板,切换橡皮擦后,再回到画笔时,需要恢复最近画笔的属性值
-                                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                                         PropertyPanel.AnnotEvent = AnnotEvent;
                                         var AnnotEvents = new List<AnnotAttribEvent>();
                                         AnnotEvents.Add(AnnotEvent);

+ 5 - 6
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.Layout.cs

@@ -66,13 +66,13 @@ namespace PDF_Master.ViewModels.Tools
 
                     foreach (var itemAnnot in annots)
                     {
-                        var eventitem = AnnotAttribEvent.GetAnnotAttribEvent(itemAnnot, itemAnnot.GetAnnotAttrib());
+                        var eventitem = AnnotAttribEvent.GetAnnotAttribEvent(itemAnnot, itemAnnot.GetAnnotAttrib(), PDFViewer);
                         //eventitem.ClearChangeAttribute();
                         PropertyPanel.AnnotEvents.Add(eventitem);
                     }
                 }
 
-                PropertyPanel.AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annots[0], annots[0].GetAnnotAttrib());
+                PropertyPanel.AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annots[0], annots[0].GetAnnotAttrib(), PDFViewer);
                 //propertyPanel.AnnotEvent.ClearChangeAttribute();
                 if (annots[0] is LinkAnnotArgs && annotAttribEvent != null)
                 {
@@ -479,8 +479,7 @@ namespace PDF_Master.ViewModels.Tools
 
             if (tag == "OutLine" || tag == "Link")
             {
-                InBookModeSetIsHidden(menuItem);
-                
+                InBookModeSetIsHidden(menuItem);
             }
 
             menuItem.Click -= AnnotToolMenu_Click;
@@ -665,13 +664,13 @@ namespace PDF_Master.ViewModels.Tools
                 {
                     if (cusMenuItem.Parameter is TextHighlightAnnotArgs textHighlightAnnotArgs)
                     {
-                        var anvent = AnnotAttribEvent.GetAnnotAttribEvent(textHighlightAnnotArgs, textHighlightAnnotArgs.GetAnnotAttrib());
+                        var anvent = AnnotAttribEvent.GetAnnotAttribEvent(textHighlightAnnotArgs, textHighlightAnnotArgs.GetAnnotAttrib(), PDFViewer);
                         anvent.UpdateAttrib(AnnotAttrib.Color, e);
                         anvent.UpdateAnnot();
                     }
                     if (cusMenuItem.Parameter is TextUnderlineAnnotArgs textUnderlineAnnotArgs)
                     {
-                        var anvent = AnnotAttribEvent.GetAnnotAttribEvent(textUnderlineAnnotArgs, textUnderlineAnnotArgs.GetAnnotAttrib());
+                        var anvent = AnnotAttribEvent.GetAnnotAttribEvent(textUnderlineAnnotArgs, textUnderlineAnnotArgs.GetAnnotAttrib(), PDFViewer);
                         anvent.UpdateAttrib(AnnotAttrib.Color, e);
                         anvent.UpdateAnnot();
                     }

+ 121 - 22
PDF Office/ViewModels/Tools/AnnotToolContentViewModel.cs

@@ -3,6 +3,7 @@ using ComPDFKit.PDFDocument;
 using ComPDFKitViewer;
 using ComPDFKitViewer.AnnotEvent;
 using ComPDFKitViewer.PdfViewer;
+using DotNetSpeech;
 using ImTools;
 using Microsoft.Win32;
 using PDF_Master.CustomControl;
@@ -28,6 +29,7 @@ using Prism.Services.Dialogs;
 using System;
 using System.Collections.Generic;
 using System.Diagnostics;
+using System.Drawing.Imaging;
 using System.IO;
 using System.Linq;
 using System.Reflection;
@@ -1382,13 +1384,13 @@ namespace PDF_Master.ViewModels.Tools
                 {
                     if (annot is FreehandAnnotArgs || annot is StickyAnnotArgs || annot is LineAnnotArgs)
                     {
-                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                         AnnotEvent?.UpdateAttrib(AnnotAttrib.Color, e);
                         AnnotEvent?.UpdateAnnot();
                     }
                     else if (annot is FreeTextAnnotArgs)
                     {
-                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                         if (menu.tag.ToString() == "FontColor")
                             AnnotEvent?.UpdateAttrib(AnnotAttrib.FontColor, e);
                         else
@@ -1398,7 +1400,7 @@ namespace PDF_Master.ViewModels.Tools
                     }
                     else if (annot is SquareAnnotArgs || annot is CircleAnnotArgs)
                     {
-                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                         if (menu.tag.ToString() == "FillColor")
                             AnnotEvent?.UpdateAttrib(AnnotAttrib.FillColor, e);
                         else
@@ -1408,7 +1410,7 @@ namespace PDF_Master.ViewModels.Tools
                     }
                     else if (annot is TextHighlightAnnotArgs || annot is TextUnderlineAnnotArgs || annot is TextStrikeoutAnnotArgs)
                     {
-                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                        var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                         AnnotEvent?.UpdateAttrib(AnnotAttrib.Color, e);
                         AnnotEvent?.UpdateAnnot();
                     }
@@ -1475,7 +1477,7 @@ namespace PDF_Master.ViewModels.Tools
                 var annot = menu.Parameter as FreehandAnnotArgs;
                 if (annot != null)
                 {
-                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                     if (menu.tag.ToString() == "Solid")
                     {
                         AnnotEvent?.UpdateAttrib(AnnotAttrib.LineStyle, AnnotTransfer.GetLineDashStyle(true));
@@ -1500,7 +1502,7 @@ namespace PDF_Master.ViewModels.Tools
                 var annot = menu.Parameter as AnnotHandlerEventArgs;
                 if (annot != null)
                 {
-                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                     AnnotEvent?.UpdateAttrib(AnnotAttrib.FontFamily, new FontFamily(menu.tag.ToString()));
                     AnnotEvent?.UpdateAnnot();
                 }
@@ -1518,7 +1520,7 @@ namespace PDF_Master.ViewModels.Tools
                 {
                     var strTag = tag.ToString();
 
-                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                     if (strTag == "Left")
                     {
                         AnnotEvent?.UpdateAttrib(AnnotAttrib.TextAlign, TextAlignment.Left);
@@ -1575,7 +1577,7 @@ namespace PDF_Master.ViewModels.Tools
                 if (annot != null && tag != null)
                 {
                     var strTag = tag.ToString();
-                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                     if (strTag == "Solid")
                     {
                         var dashStyle = AnnotTransfer.GetLineDashStyle(true);
@@ -1601,7 +1603,7 @@ namespace PDF_Master.ViewModels.Tools
                 if (annot != null && tag != null)
                 {
                     var strTag = tag.ToString();
-                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib());
+                    var AnnotEvent = AnnotAttribEvent.GetAnnotAttribEvent(annot, annot.GetAnnotAttrib(), PDFViewer);
                     if (strTag == "Ver")
                     {
                         annot.SetLineVertical();
@@ -1670,19 +1672,25 @@ namespace PDF_Master.ViewModels.Tools
                                 alertsMessage.ShowDialog("", App.MainPageLoader.GetString("Create PDF failed"), App.ServiceLoader.GetString("Text_ok"));
                                 return;
                             }
-                            byte[] buffer;
-                            var encoder = new PngBitmapEncoder();
-                            encoder.Frames.Add(BitmapFrame.Create(writeStamp));
-                            using (var memoryStream = new MemoryStream())
-                            {
-                                encoder.Save(memoryStream);
-                                buffer = memoryStream.ToArray();
-                            }
-
-                            tempDoc.Document.InsertPage(0, writeStamp.PixelWidth, writeStamp.PixelHeight, buffer, CPDFDocumentImageMode.CPDFDocumentImageModeScaleAspectFit);
-                            var result = tempDoc.Document.WriteToFilePath(dlg.FileName);
-                            if (result)
-                            {
+                            byte[] buffer;
+
+                            //var encoder = new PngBitmapEncoder();
+                            //encoder.Frames.Add(BitmapFrame.Create(writeStamp));
+                            //using (var memoryStream = new MemoryStream())
+                            //{
+                            //    encoder.Save(memoryStream);
+                            //    buffer = memoryStream.ToArray();
+                            //}
+
+                            //tempDoc.Document.InsertPage(0, writeStamp.PixelWidth, writeStamp.PixelHeight, buffer, CPDFDocumentImageMode.CPDFDocumentImageModeScaleAspectFit);
+                            //var result = tempDoc.Document.WriteToFilePath(dlg.FileName);
+                            //if (result)
+                            //{
+                            //}
+                            string imagePath = SaveImage(writeStamp);
+                            if (CreateFile(imagePath, tempDoc))
+                            {
+                                bool result = tempDoc.Document.WriteToFilePath(dlg.FileName);
                             }
                         }
                         else
@@ -1695,11 +1703,102 @@ namespace PDF_Master.ViewModels.Tools
                                 encoder5.Save(stream5);
                             }
                         }
+                        System.Diagnostics.Process.Start("explorer", "/select,\"" + stampPicture + "\"");
                     }
                 }
             }
+        }
+
+        private string SaveImage(WriteableBitmap wtbBmp)
+        {
+            string isSave = null;
+            if (wtbBmp == null)
+            {
+                return isSave;
+            }
+            try
+            {
+                DirectoryInfo tempfolder = new DirectoryInfo(Path.Combine(App.CurrentPath, "Temp"));
+                string strpath = Path.Combine(tempfolder.FullName, DateTime.Now.ToString("yyyyMMddfff") + ".jpg");
+                if (!File.Exists(tempfolder.FullName))
+                {
+                    Directory.CreateDirectory(tempfolder.FullName);
+                }
+
+                using (FileStream stream = new FileStream(strpath, FileMode.Create))
+                {
+                    JpegBitmapEncoder bitmapEncoder = new JpegBitmapEncoder();
+                    bitmapEncoder.Frames.Add(BitmapFrame.Create(wtbBmp));
+                    bitmapEncoder.Save(stream);
+                    isSave = strpath;
+                }
+            }
+            catch (Exception ex)
+            {
+                System.Diagnostics.Debug.WriteLine(ex.ToString());
+                isSave = null;
+            }
+            return isSave;
         }
 
+        public bool CreateFile(string imagePath = null, CPDFViewer saveToPDFViewer = null)
+        {
+            string fileName = null;
+
+            //saveToPDFViewer.CreateDocument();
+            //if (saveToPDFViewer.Document == null)
+            //{
+            //    AlertsMessage alertsMessage = new AlertsMessage();
+            //    alertsMessage.ShowDialog("", App.MainPageLoader.GetString("Create PDF failed"), App.ServiceLoader.GetString("Text_ok"));
+            //    return false;
+            //}
+
+            if (string.IsNullOrEmpty(imagePath))
+            {
+                fileName = "Blank Page.pdf";
+                //默认插入595*842 大小的页面
+                saveToPDFViewer.Document.InsertPage(0, 595, 842, null);
+            }
+            else
+            {
+                fileName = imagePath.Substring(imagePath.LastIndexOf("\\") + 1, imagePath.LastIndexOf(".") - imagePath.LastIndexOf("\\") - 1) + ".pdf";
+                System.Drawing.Bitmap pic = new System.Drawing.Bitmap(imagePath);
+                int width = pic.Size.Width;
+                int height = pic.Size.Height;
+
+                string ex = System.IO.Path.GetExtension(imagePath);
+                //其他格式或者名称中含空格的图片 在本地先转存一下
+                if ((ex != ".jpg" && ex != ".jpeg") || !Uri.IsWellFormedUriString(imagePath, UriKind.Absolute))
+                {
+                    //将其他格式图片转换成jpg
+                    string folderPath = Path.GetTempPath();
+                    if (File.Exists(folderPath))
+                    {
+                        File.Delete(folderPath);
+                    }
+                    DirectoryInfo tempfolder = new DirectoryInfo(folderPath);
+                    if (!tempfolder.Exists)
+                    {
+                        tempfolder.Create();
+                    }
+                    string targetPath = System.IO.Path.Combine(folderPath, Guid.NewGuid().ToString());
+                    imagePath = targetPath;
+                    pic.Save(targetPath, ImageFormat.Jpeg);
+                }
+                pic.Dispose();
+
+                var result = saveToPDFViewer.Document.InsertPage(0, width, height, imagePath);
+                if (!result)
+                {
+                    AlertsMessage alertsMessage = new AlertsMessage();
+                    alertsMessage.ShowDialog("", App.MainPageLoader.GetString("Create PDF failed"), App.ServiceLoader.GetString("Text_ok"));
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
         #endregion 注释右键菜单事件
 
         #region 快捷键