123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Drawing;
- using System.Drawing.Drawing2D;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Windows;
- using System.Windows.Controls;
- using Ghostscript.NET;
- using Ghostscript.NET.Processor;
- using InABox.Clients;
- using InABox.Core;
- using InABox.WPF;
- using Microsoft.Win32;
- using Syncfusion.Pdf;
- using Syncfusion.Pdf.Graphics;
- using Syncfusion.Pdf.Interactive;
- using Syncfusion.Pdf.Parsing;
- using Syncfusion.Windows.PdfViewer;
- using ColorConverter = System.Windows.Media.ColorConverter;
- using Image = System.Windows.Controls.Image;
- namespace InABox.DynamicGrid
- {
- public delegate void PDFSettingsChangedEvent(object sender, string linecolor, int fontsize);
- public delegate void PDFDocumentLoadedEvent(object sender, IEntityDocument document);
- /// <summary>
- /// Interaction logic for PDFEditorControl.xaml
- /// </summary>
- public partial class PDFEditorControl : UserControl, IDocumentEditor
- {
- private IEntityDocument _document;
- //private PdfDocumentView PdfViewer = null;
- private readonly List<Guid> currentAnnotations = new();
- private byte[] pdfdocument;
- public PDFEditorControl()
- {
- InitializeComponent();
- PdfViewer.ReferencePath =
- AppDomain.CurrentDomain.BaseDirectory; // System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "pdfium");
- PdfViewer.PrinterSettings.PageSize = PdfViewerPrintSize.Fit;
- }
- public string LineColor { get; set; }
- public int TextSize { get; set; }
- //public bool PrintAllowed { get; set; }
- public bool SaveAllowed { get; set; }
- public string Watermark { get; set; }
- public PDFSettingsChangedEvent PDFSettingsChanged { get; set; }
- public PDFDocumentLoadedEvent PDFDocumentLoaded { get; set; }
- public IEntityDocument Document
- {
- get => _document;
- set
- {
- UnloadPDF();
- _document = value;
- LoadPDF();
- PDFDocumentLoaded?.Invoke(this, value);
- }
- }
- #region Unload / Save PDF Document
- private void UnloadCurrentPDF()
- {
- UnloadPDFAnnotations();
- pdfdocument = null;
- }
- private string CurrentAnnotations = "";
- private string AnnotationsToString()
- {
- var ms1 = new MemoryStream();
- PdfViewer.LoadedDocument.Save(ms1);
- ms1.Position = 0;
- var doc = new PdfLoadedDocument(ms1);
- var sb = new StringBuilder();
- for (var i = 0; i < doc.Pages.Count; i++)
- {
- var page = doc.Pages[i] as PdfLoadedPage;
- try
- {
- foreach (PdfLoadedAnnotation a in page.Annotations)
- sb.Append(SaveAnnotation(doc, a));
- }
- catch (Exception e)
- {
- Logger.Send(LogType.Error, ClientFactory.UserID, string.Format("*** Unable to retreive Annotations ***\n{0}", e.StackTrace));
- }
- }
- return sb.ToString();
- }
- private void UnloadPDFAnnotations()
- {
- try
- {
- if (_document != null && PdfViewer.IsDocumentEdited)
- //if ((PdfViewer != null) && (documentid != Guid.Empty) && (pdfdocument != null) && (PdfViewer.Visibility == Visibility.Visible) && (PdfViewer.IsDocumentEdited))
- {
- var ms1 = new MemoryStream();
- PdfViewer.LoadedDocument.Save(ms1);
- ms1.Position = 0;
- var doc = new PdfLoadedDocument(ms1);
- //SetoutDocument document = documents.FirstOrDefault(x => x.DocumentLink.ID.Equals(documentid));
- if (_document != null)
- {
- var annotations = new Client<EntityDocumentAnnotation>()
- .Load(new Filter<EntityDocumentAnnotation>(x => x.EntityDocument).IsEqualTo(_document.ID)).ToList();
- for (var i = 0; i < doc.Pages.Count; i++)
- {
- var page = doc.Pages[i] as PdfLoadedPage;
- foreach (PdfLoadedAnnotation a in page.Annotations)
- {
- var a_id = Guid.Empty;
- if (!string.IsNullOrWhiteSpace(a.Author))
- Guid.TryParse(a.Author, out a_id);
- if (currentAnnotations.Contains(a_id))
- currentAnnotations.Remove(a_id);
- var annotation = a_id.Equals(Guid.Empty) ? null : annotations.FirstOrDefault(x => x.ID.Equals(a_id));
- if (annotation == null)
- {
- annotation = new EntityDocumentAnnotation { EntityDocument = _document.ID };
- annotations.Add(annotation);
- }
- annotation.Page = i;
- annotation.Type = GetAnnotationType(a);
- annotation.Data = SaveAnnotation(doc, a);
- }
- }
- new Client<EntityDocumentAnnotation>().Save(annotations.Where(x => x.IsChanged()), "");
- foreach (var annotation in annotations.Where(x => currentAnnotations.Contains(x.ID)))
- new Client<EntityDocumentAnnotation>().Delete(annotation, "");
- }
- }
- }
- catch (Exception e)
- {
- MessageBox.Show("Unable to Save Annotations: " + e.Message + "\n" + e.StackTrace);
- }
- }
- public EntityDocumentAnnotationType GetAnnotationType(PdfAnnotation annotation)
- {
- if (annotation is PdfLoadedLineAnnotation)
- return EntityDocumentAnnotationType.Line;
- if (annotation is PdfLoadedEllipseAnnotation)
- return EntityDocumentAnnotationType.Ellipse;
- if (annotation is PdfLoadedRectangleAnnotation)
- return EntityDocumentAnnotationType.Rectangle;
- if (annotation is PdfLoadedSquareAnnotation)
- return EntityDocumentAnnotationType.Rectangle;
- if (annotation is PdfLoadedFreeTextAnnotation)
- return EntityDocumentAnnotationType.Text;
- if (annotation is PdfLoadedInkAnnotation)
- return EntityDocumentAnnotationType.Ink;
- if (annotation is PdfLoadedRubberStampAnnotation)
- {
- if (!string.IsNullOrWhiteSpace(annotation.Subject))
- {
- if (annotation.Subject.Equals("Warning"))
- return EntityDocumentAnnotationType.WarningStamp;
- if (annotation.Subject.Equals("Error"))
- return EntityDocumentAnnotationType.ErrorStamp;
- }
- return EntityDocumentAnnotationType.OKStamp;
- }
- throw new Exception("Unknown Annotation: " + annotation.GetType().Name);
- }
- public string SaveAnnotation(PdfLoadedDocument doc, PdfLoadedAnnotation annotation)
- {
- annotation.Author = CoreUtils.FullGuid.ToString();
- var ms = new MemoryStream();
- var collection = new PdfExportAnnotationCollection();
- collection.Add(annotation);
- doc.ExportAnnotations(ms, AnnotationDataFormat.XFdf, collection);
- var result = Encoding.UTF8.GetString(ms.GetBuffer());
- return result;
- }
- public void LoadAnnotation(PdfLoadedDocument doc, string encoded, Guid id)
- {
- //PdfLoadedAnnotation annot = new PdfLoadedAnnotation();
- var data = encoded.Replace(CoreUtils.FullGuid.ToString(), id.ToString());
- var buffer = Encoding.UTF8.GetBytes(data);
- var ms = new MemoryStream(buffer);
- doc.ImportAnnotations(ms, AnnotationDataFormat.XFdf);
- }
- private void UnloadPDF()
- {
- if (_document != null)
- try
- {
- UnloadPDFAnnotations();
- PdfViewer.Unload(true);
- }
- catch (Exception e)
- {
- Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
- }
- }
- #endregion
- #region Reload / Preprocess PDF Document
- private bool DownloadNeeded(Guid id)
- {
- var cachefile = Path.Combine(CoreUtils.GetPath(), string.Format("{0}.ffd", id.ToString()));
- if (!File.Exists(cachefile))
- return true;
- var indexfile = Path.Combine(CoreUtils.GetPath(), "pdfindex.json");
- if (!File.Exists(indexfile))
- return true;
- var json = File.ReadAllText(indexfile);
- var index = Serialization.Deserialize<Dictionary<Guid, string>>(json);
- if (!index.ContainsKey(id))
- return true;
- var entry = new Client<Document>().Query(
- new Filter<Document>(x => x.ID).IsEqualTo(id),
- new Columns<Document>(x => x.CRC)
- ).Rows.FirstOrDefault();
- if (entry == null)
- return true;
- if (!String.Equals(entry.Get<Document, string>(x => x.CRC),index[id]))
- {
- MessageBox.Show("This PDF has been revised, and will now refresh.\n\nPlease check the drawing for any applicable changes.");
- return true;
- }
- return false;
- }
- private bool AnnotationError;
- private void LoadPDF()
- {
- if (_document == null)
- return;
- var cachefile = Path.Combine(CoreUtils.GetPath(), string.Format("{0}.ffd", _document.DocumentLink.ID.ToString()));
- using (new WaitCursor())
- {
- if (DownloadNeeded(_document.DocumentLink.ID))
- {
- var dbdoc = new Client<Document>().Load(new Filter<Document>(x => x.ID).IsEqualTo(_document.DocumentLink.ID)).FirstOrDefault();
- if (dbdoc == null)
- {
- MessageBox.Show("Unable to Load File!");
- return;
- }
- var indexfile = Path.Combine(CoreUtils.GetPath(), "pdfindex.json");
- var index = new Dictionary<Guid, string>();
- if (File.Exists(indexfile))
- {
- var json = File.ReadAllText(indexfile);
- index = Serialization.Deserialize<Dictionary<Guid, string>>(json);
- }
- index[_document.DocumentLink.ID] = dbdoc.CRC;
- File.WriteAllText(indexfile, Serialization.Serialize(index));
- AnnotationError = false;
- pdfdocument = dbdoc.Data;
- try
- {
- pdfdocument = GhostScriptIt(pdfdocument);
- }
- catch (Exception eGhostscript)
- {
- Logger.Send(LogType.Error, "", "Ghostscript Error: "+eGhostscript.Message + "\n" + eGhostscript.StackTrace);
- }
- try
- {
- pdfdocument = FlattenPdf(pdfdocument);
- }
- catch (Exception eFlatten)
- {
- Logger.Send(LogType.Error, "", "Flatten Error: "+eFlatten.Message + "\n" + eFlatten.StackTrace);
- }
- try
- {
- if (AnnotationError)
- pdfdocument = RasterizePDF(pdfdocument);
- }
- catch (Exception eRasterize)
- {
- Logger.Send(LogType.Error, "", "Rasterize Error: "+eRasterize.Message + "\n" + eRasterize.StackTrace);
- }
- File.WriteAllBytes(cachefile, pdfdocument);
- }
- else
- {
- pdfdocument = File.ReadAllBytes(cachefile);
- }
- var doc = new PdfLoadedDocument(pdfdocument);
- currentAnnotations.Clear();
- var watermark = !_document.Superceded.IsEmpty() ? "SUPERCEDED" : Watermark;
- if (!string.IsNullOrWhiteSpace(watermark))
- foreach (PdfPageBase page in doc.Pages)
- {
- var rect = new RectangleF(0, 0, page.Size.Width, page.Size.Height);
- var graphics = page.Graphics;
- PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, page.Size.Width / 10, PdfFontStyle.Bold);
- var state = graphics.Save();
- graphics.SetTransparency(0.2f);
- var format = new PdfStringFormat();
- format.Alignment = PdfTextAlignment.Center;
- format.LineAlignment = PdfVerticalAlignment.Middle;
- var lineheight = (int)Math.Round(font.Height * 2.5);
- var lines = new List<string>();
- while (lines.Count * lineheight < page.Size.Height)
- lines.Add(watermark);
- graphics.DrawString(string.Join("\n\n", lines), font, PdfBrushes.Red, rect, format);
- }
- //foreach (PdfPageBase page in doc.Pages)
- //{
- // RectangleF rect = new RectangleF(0, 0, page.Size.Width, page.Size.Height);
- // PdfGraphics graphics = page.Graphics;
- // PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, page.Size.Width / 10, PdfFontStyle.Bold);
- // PdfGraphicsState state = graphics.Save();
- // graphics.SetTransparency(0.2f);
- // PdfStringFormat format = new PdfStringFormat();
- // format.Alignment = PdfTextAlignment.Center;
- // format.LineAlignment = PdfVerticalAlignment.Middle;
- // int lineheight = (int)Math.Round(font.Height * 2.5);
- // List<String> lines = new List<string>();
- // while (lines.Count * lineheight < page.Size.Height)
- // lines.Add("SUPERCEDED");
- // graphics.DrawString(String.Join("\n\n", lines), font, PdfBrushes.Red, rect, format);
- //}
- var annotations = new Client<EntityDocumentAnnotation>()
- .Load(new Filter<EntityDocumentAnnotation>(x => x.EntityDocument).IsEqualTo(_document.ID)).ToList();
- foreach (var annotation in annotations)
- try
- {
- currentAnnotations.Add(annotation.ID);
- if (!string.IsNullOrWhiteSpace(annotation.Data))
- {
- if (annotation.Data.Contains("<freetext") && !annotation.Data.Contains("date=\""))
- {
- Logger.Send(LogType.Information, ClientFactory.UserID,
- string.Format("Annotation #{0} has no date - inserting now..", annotation.ID));
- annotation.Data = annotation.Data.Replace("<freetext",
- string.Format("<freetext date=\"D:{0:yyyyMMddHHmmss}+08\'00\'\"", DateTime.Now));
- //annotation.Data = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<xfdf xmlns=\"http://ns.adobe.com/xfdf/\" xml:space=\"preserve\">\r\n <annots>\r\n <freetext page=\"0\" rect=\"635.782,231.8206,812.7407,282.311\" rotation=\"0\" color=\"#FFFFFF\" title=\"ffffffff-ffff-ffff-ffff-ffffffffffff\" subject=\"Free Text\" date=\"D:20220715001146+08'00'\" name=\"800eae13-14f4-4db9-a60e-6d5d2d2adb55\" fringe=\"0,0,0,0\" border=\"0,0,1\" q=\"0\" IT=\"FreeTextCallout\" head=\"None\">\r\n <defaultappearance>0.2901961 0.5647059 0.8862745 rg </defaultappearance>\r\n <defaultstyle>font:Arial 8pt;style:Regular;color:#FF0000</defaultstyle>\r\n <contents-richtext><body xmlns=\"http://www.w3.org/1999/xhtml\"><p dir=\"ltr\">MC'd by BW\r\nTrolley H18\r\n8 July 2022\r\nNOTE: 3032 Doorleaf is also on Trolley H18</p></body></contents-richtext>\r\n <contents>MC'd by BW\r\nTrolley H18\r\n8 July 2022\r\nNOTE: 3032 Doorleaf is also on Trolley H18</contents>\r\n </freetext>\r\n </annots>\r\n <f href=\"\" />\r\n</xfdf>";
- //annotation.Data = "<?xml version =\"1.0\" encoding=\"utf-8\"?>\r\n<xfdf xmlns=\"http://ns.adobe.com/xfdf/\" xml:space=\"preserve\">\r\n <annots>\r\n <freetext page=\"0\" rect=\"768.7103,558.5799,898.9603,642.3299\" rotation=\"0\" color=\"#FFFFFF\" title=\"ffffffff-ffff-ffff-ffff-ffffffffffff\" subject=\"Free Text\" date=\"D:20220715001146+08'00'\" flags=\"print\" name=\"690a16b1-647b-45a9-80a5-17f83f63bc93\" fringe=\"18,2,20,16.5\" border=\"0,0,1.5\" justification=\"0\" IT=\"FreeTextCallout\" head=\"OpenArrow\" callout=\"786.7103,625.8299,768.7103,593.2049,786.7103,593.2049\">\r\n <defaultappearance>0.2901961 0.5647059 0.8862745 rg </defaultappearance>\r\n <defaultstyle>font:Arial 12pt;style:Regular;color:#FF0000</defaultstyle>\r\n <contents-richtext><body xmlns=\"http://www.w3.org/1999/xhtml\"><p dir=\"ltr\">Hi Thjere\r\n\r\nawd.flae\r\nsdfgljsdlkfg</p></body></contents-richtext>\r\n <contents>Hi Thjere\r\n\r\nawd.flae\r\nsdfgljsdlkfg</contents>\r\n </freetext>\r\n </annots>\r\n <f href=\"\" />\r\n</xfdf>";
- }
- LoadAnnotation(doc, annotation.Data.Replace("&", "+"), annotation.ID);
- }
- }
- catch (Exception e)
- {
- Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
- }
- var ms = new MemoryStream();
- doc.Save(ms);
- PdfViewer.ZoomMode = ZoomMode.FitWidth;
- PdfViewer.Load(ms);
- UpdateButtons(PdfNoneImage);
- CurrentAnnotations = AnnotationsToString();
- }
- }
- private byte[] GhostScriptIt(byte[] data)
- {
- var input = Path.GetTempFileName();
- File.WriteAllBytes(input, data);
- byte[] result = { };
- var gv = new GhostscriptVersionInfo(
- new Version(0, 0, 0),
- "gsdll64.dll",
- string.Empty,
- GhostscriptLicense.GPL
- );
- var gsPipedOutput = new GhostscriptPipedOutput();
- // pipe handle format: %handle%hexvalue
- var outputPipeHandle = "%handle%" + int.Parse(gsPipedOutput.ClientHandle).ToString("X2");
- using (var processor = new GhostscriptProcessor(gv, true))
- {
- var switches = new List<string>();
- switches.Add("-empty");
- switches.Add("-dQUIET");
- switches.Add("-dSAFER");
- switches.Add("-dBATCH");
- switches.Add("-dNOPAUSE");
- switches.Add("-dNOPROMPT");
- switches.Add("-dCompatibilityLevel=1.4");
- switches.Add("-dPreserveAnnots=false");
- switches.Add("-sDEVICE=pdfwrite");
- switches.Add("-o" + outputPipeHandle);
- switches.Add("-q");
- switches.Add("-f");
- switches.Add(input);
- try
- {
- processor.StartProcessing(switches.ToArray(), null);
- result = gsPipedOutput.Data;
- }
- catch (Exception ex)
- {
- Console.WriteLine(ex.Message);
- }
- finally
- {
- gsPipedOutput.Dispose();
- gsPipedOutput = null;
- }
- }
- File.Delete(input);
- return result;
- }
- private byte[] RasterizePDF(byte[] data)
- {
- var source = PresentationSource.FromVisual(this);
- var dpiX = source != null ? 96.0 * source.CompositionTarget.TransformToDevice.M11 : 0.0F;
- var dpiY = source != null ? 96.0 * source.CompositionTarget.TransformToDevice.M22 : 0.0F;
- var gsdata = GhostScriptIt(data);
- var doc = new PdfLoadedDocument(gsdata);
- Bitmap[] bitmaps = doc.ExportAsImage(0, doc.Pages.Count - 1, (float)dpiX, (float)dpiY);
- PdfSection section = null;
- var pdf = new PdfDocument();
- pdf.PageSettings.Margins.All = 0;
- for (var i = 0; i < doc.Pages.Count; i++)
- {
- var oldpage = doc.Pages[i] as PdfLoadedPage;
- if (section == null || section.PageSettings.Size.Height != oldpage.Size.Height ||
- section.PageSettings.Size.Width != oldpage.Size.Width)
- {
- section = pdf.Sections.Add();
- section.PageSettings.Size = oldpage.Size;
- section.PageSettings.Orientation =
- oldpage.Size.Height > oldpage.Size.Width ? PdfPageOrientation.Portrait : PdfPageOrientation.Landscape;
- }
- var newpage = section.Pages.Add();
- var graphics = newpage.Graphics;
- var bitmap = new PdfBitmap(bitmaps[i]);
- graphics.DrawImage(bitmap, new RectangleF(0, 0, section.PageSettings.Size.Width, section.PageSettings.Size.Height));
- }
- var ms = new MemoryStream();
- pdf.Save(ms);
- return ms.GetBuffer();
- }
- private byte[] FlattenPdf(byte[] data)
- {
- var doc = new PdfLoadedDocument(data);
- foreach (PdfLoadedPage page in doc.Pages)
- try
- {
- foreach (PdfLoadedAnnotation annotation in page.Annotations) annotation.Flatten = true;
- }
- catch (Exception e)
- {
- AnnotationError = true;
- Logger.Send(LogType.Error, ClientFactory.UserID, string.Format("*** Unable to Flatten PDF ***\n{0}", e.Message));
- }
- var ms = new MemoryStream();
- doc.Save(ms);
- //doc.Save(filename);
- //return File.ReadAllBytes(filename);
- return ms.GetBuffer();
- }
- private void RefreshPDF_Click(object sender, RoutedEventArgs e)
- {
- UnloadPDF();
- var cachefile = Path.Combine(CoreUtils.GetPath(), string.Format("{0}.ffd", _document.DocumentLink.ID.ToString()));
- if (File.Exists(cachefile))
- File.Delete(cachefile);
- LoadPDF();
- }
- #endregion
- #region PDF Editing
- private Bitmap SizeBitmap()
- {
- var b = new Bitmap(32, 32);
- using (var g = Graphics.FromImage(b))
- {
- g.SmoothingMode = SmoothingMode.AntiAlias;
- g.FillRectangle(new SolidBrush(Color.White), 0, 0, 32, 32);
- var text = TextSize.ToString();
- var font = new Font("Arial", 12, System.Drawing.FontStyle.Bold);
- var size = g.MeasureString(text, font);
- var sf = new StringFormat { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center };
- g.DrawString(text, font, new SolidBrush(Color.DimGray), new RectangleF(4, 6, 24, 20), sf);
- var pen = new Pen(Color.DimGray, 2);
- g.DrawRectangle(pen, 4, 4, 24, 24);
- }
- return b;
- }
- private Bitmap ColorBitmap()
- {
- var b = new Bitmap(32, 32);
- using (var g = Graphics.FromImage(b))
- {
- g.SmoothingMode = SmoothingMode.AntiAlias;
- g.FillRectangle(new SolidBrush(Color.White), 0, 0, 32, 32);
- var color = ColorTranslator.FromHtml(LineColor);
- var brush = new SolidBrush(color);
- g.FillRectangle(brush, 4, 4, 24, 24);
- var pen = new Pen(Color.Black, 1);
- g.DrawRectangle(pen, 4, 4, 24, 24);
- }
- return b;
- }
- private void UpdateButtons(Image selected)
- {
- PDFButtonStack.Width = Document != null && Document.Superceded.IsEmpty()
- ? new GridLength(44, GridUnitType.Pixel)
- : new GridLength(0, GridUnitType.Pixel);
- PdfColorImage.Source = ColorBitmap().AsBitmapImage(32, 32, false);
- PdfSizeImage.Source = SizeBitmap().AsBitmapImage(32, 32, false);
- PdfPrint.Visibility = Visibility.Collapsed; //PrintAllowed ? Visibility.Visible : Visibility.Collapsed;
- PdfSave.Visibility = SaveAllowed ? Visibility.Visible : Visibility.Collapsed;
- ColorButton(PdfNoneImage, selected, Properties.Resources.hand);
- ColorButton(PdfInkImage, selected, Properties.Resources.draw);
- ColorButton(PdfLineImage, selected, Properties.Resources.line);
- ColorButton(PdfRectangleImage, selected, Properties.Resources.square);
- ColorButton(PdfCircleImage, selected, Properties.Resources.circle);
- ColorButton(PdfFreeTextImage, selected, Properties.Resources.text);
- ColorButton(PdfOKImage, selected, Properties.Resources.tick);
- ColorButton(PdfWarningImage, selected, Properties.Resources.warning);
- ColorButton(PdfErrorImage, selected, Properties.Resources.delete);
- }
- private void ColorButton(Image button, Image selected, Bitmap bitmap)
- {
- button.Source = selected == button
- ? bitmap.ChangeColor(Color.White, Color.Yellow).AsBitmapImage(32, 32, false)
- : bitmap.AsBitmapImage(32, 32, false);
- }
- private void PdfPrint_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- PdfViewer.CursorMode = PdfViewerCursorMode.HandTool;
- UpdateButtons(PdfNoneImage);
- PdfViewer.PrinterSettings.ShowPrintStatusDialog = true;
- PdfViewer.PrinterSettings.PageSize = PdfViewerPrintSize.Fit;
- //String printer = "";
- //if (PrinterSelection.Execute(ref printer))
- // PdfViewer.Print(printer);
- //PdfViewer.PrintCommand.Execute(PdfViewer);
- PrintDialog dialog = new PrintDialog();
- if (dialog.ShowDialog() == true)
- dialog.PrintDocument(PdfViewer.PrintDocument.DocumentPaginator, "PRS Factory Floor Printout");
- //var ms = new MemoryStream();
- //PdfViewer.LoadedDocument.Save(ms);
- //PdfViewer.Print();
- //byte[] data = ms.GetBuffer();
- //data = FlattenPdf(data);
- //String filename = System.IO.Path.ChangeExtension(System.IO.Path.GetTempFileName(), "pdf");
- //File.WriteAllBytes(filename, data);
- ////PdfViewer.Save(filename);
- //PDFPreview preview = new PDFPreview(filename);
- //preview.ShowDialog();
- }
- private void PdfSave_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- PdfViewer.CursorMode = PdfViewerCursorMode.HandTool;
- UpdateButtons(PdfNoneImage);
- var dlg = new SaveFileDialog();
- dlg.Filter = "PDF Files (*.pdf)|*.pdf";
- dlg.FileName = Path.ChangeExtension(Document.DocumentLink.FileName, ".pdf");
- if (dlg.ShowDialog() == true)
- {
- var ms = new MemoryStream();
- PdfViewer.LoadedDocument.Save(ms);
- var data = ms.GetBuffer();
- data = FlattenPdf(data);
- var filename = dlg.FileName;
- File.WriteAllBytes(filename, data);
-
- var gsProcessInfo = new ProcessStartInfo();
- gsProcessInfo.Verb = "open";
- gsProcessInfo.WindowStyle = ProcessWindowStyle.Normal;
- gsProcessInfo.FileName = filename;
- gsProcessInfo.UseShellExecute = true;
- Process.Start(gsProcessInfo);
-
- }
- }
- private void PdfZoomIn_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- ;
- PdfViewer.CursorMode = PdfViewerCursorMode.HandTool;
- UpdateButtons(PdfNoneImage);
- PdfViewer.IncreaseZoomCommand.Execute(null);
- }
- private void PdfZoomWidth_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- ;
- PdfViewer.CursorMode = PdfViewerCursorMode.HandTool;
- UpdateButtons(PdfNoneImage);
- PdfViewer.ZoomMode = ZoomMode.FitWidth;
- }
- private void PdfZoomPage_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- ;
- PdfViewer.CursorMode = PdfViewerCursorMode.HandTool;
- UpdateButtons(PdfNoneImage);
- PdfViewer.ZoomMode = ZoomMode.FitPage;
- }
- private void PdfZoomOut_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- PdfViewer.CursorMode = PdfViewerCursorMode.HandTool;
- UpdateButtons(PdfNoneImage);
- PdfViewer.DecreaseZoomCommand.Execute(null);
- }
- private void PdfColor_Click(object sender, RoutedEventArgs e)
- {
- var color = ColorTranslator.FromHtml(LineColor);
- if (ColorEdit.Execute("Edit Color", ref color))
- {
- LineColor = ColorTranslator.ToHtml(color);
- PdfColorImage.Source = ColorBitmap().AsBitmapImage(false);
- PDFSettingsChanged?.Invoke(this, LineColor, TextSize);
- }
- }
- private void PdfSize_Click(object sender, RoutedEventArgs e)
- {
- var size = TextSize;
- if (NumberEdit.Execute("Edit Font Size", 4, 96, ref size))
- {
- TextSize = size;
- PdfSizeImage.Source = SizeBitmap().AsBitmapImage(false);
- }
- }
- private void PdfNone_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- PdfViewer.CursorMode = PdfViewerCursorMode.HandTool;
- UpdateButtons(PdfNoneImage);
- }
- private void PdfInk_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.InkAnnotationSettings.InkColor = (System.Windows.Media.Color)ColorConverter.ConvertFromString(LineColor);
- PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.Ink;
- UpdateButtons(PdfInkImage);
- }
- private void PdfLine_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.LineAnnotationSettings.LineColor = (System.Windows.Media.Color)ColorConverter.ConvertFromString(LineColor);
- PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.Line;
- UpdateButtons(PdfLineImage);
- }
- private void PdfRectangle_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.RectangleAnnotationSettings.RectangleColor = (System.Windows.Media.Color)ColorConverter.ConvertFromString(LineColor);
- PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.Rectangle;
- UpdateButtons(PdfRectangleImage);
- }
- private void PdfCircle_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.CircleAnnotationSettings.CircleColor = (System.Windows.Media.Color)ColorConverter.ConvertFromString(LineColor);
- PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.Circle;
- UpdateButtons(PdfCircleImage);
- }
- private void PdfFreeText_Click(object sender, RoutedEventArgs e)
- {
- PdfViewer.FreeTextAnnotationSettings.FontSize = TextSize;
- PdfViewer.FreeTextAnnotationSettings.FontColor = (System.Windows.Media.Color)ColorConverter.ConvertFromString(LineColor);
- PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.FreeText;
- UpdateButtons(PdfFreeTextImage);
- }
- private void PdfOKStamp_Click(object sender, RoutedEventArgs e)
- {
- //PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- //PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- //AnnotationType = EntityDocumentAnnotationType.OKStamp;
- //UpdateButtons(PdfOKImage);
- }
- private void PdfWarningStamp_Click(object sender, RoutedEventArgs e)
- {
- //PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- //PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- //AnnotationType = EntityDocumentAnnotationType.WarningStamp;
- //UpdateButtons(PdfWarningImage);
- }
- private void PdfErrorStamp_Click(object sender, RoutedEventArgs e)
- {
- //PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- //PdfViewer.AnnotationMode = PdfDocumentView.PdfViewerAnnotationMode.None;
- //PdfViewer.CursorMode = PdfViewerCursorMode.SelectTool;
- //AnnotationType = EntityDocumentAnnotationType.ErrorStamp;
- //UpdateButtons(PdfErrorImage);
- }
- private EntityDocumentAnnotationType AnnotationType = EntityDocumentAnnotationType.OKStamp;
- #endregion
- }
- }
|