using ComPDFKitViewer.PdfViewer; using PDF_Office.EventAggregators; using PDF_Office.Model.EditTools.Background; using PDF_Office.Model; using Prism.Commands; using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Linq; using PDF_Office.Model.EditTools.Watermark; using ComPDFKit.PDFDocument; using ComPDFKit.PDFPage; using System.Windows.Media.Imaging; using System.Windows.Media; using System.Threading.Tasks; using ComPDFKit.PDFWatermark; using PDF_Office.Helper; using PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePagePrinter; using System.Drawing; using System.Windows; using ComPDFKitViewer; using Size = System.Windows.Size; using System.Diagnostics; using System.Windows.Controls; using ComPDFKit.Import; namespace PDF_Office.ViewModels.EditTools.Watermark { public class WatermarkDocumentContentViewModel : BindableBase, INavigationAware { public IEventAggregator eventAggregator; public IRegionManager regionManager; public CPDFViewer PDFViewer; public CPDFDocument Document; private CPDFWatermark watermark; private CPDFBackground background; private WatermarkInfo watermarkInfo; public bool firstin = true; public string ViewerRegionName { get; set; } private ImageSource _imageSource = null; public ImageSource ImageSource { get { return _imageSource; } set { SetProperty(ref _imageSource, value); } } public WatermarkDocumentContentViewModel(IEventAggregator eventAggregator, IRegionManager regionManager) { this.regionManager = regionManager; this.eventAggregator = eventAggregator; eventAggregator.GetEvent().Subscribe(SetWatermark); ViewerRegionName = RegionNames.WatermarkViwerRegionName; } public void SetWatermark(WatermarkInfo watermarkInfo) { this.watermarkInfo = watermarkInfo; //CreateWatermark(PDFViewer.Document); //PDFViewer.Document.PdfToImage("0-1", "C:\\Users\\kdanmobile\\Desktop\\888\\"); //PDFViewer.Document.WriteToFilePath("C:\\Users\\kdanmobile\\Desktop\\888\\sb22222.pdf"); PDFViewer.InvalidChildVisual(false); } public void CreateWatermark(CPDFDocument document, bool IsNewDoc = false) { if (watermarkInfo != null) { background = document.GetBackground(); background.SetBackgroundType(C_Background_Type.BG_TYPE_COLOR); background.SetScale(1); background.SetColor(watermarkInfo.TextColor); background.SetRotation(0); background.SetOpacity(255); background.SetVertalign(C_Background_Vertalign.BG_VERTALIGN_CENTER); background.SetHorizalign(C_Background_Horizalign.BG_HORIZALIGN_CENTER); background.SetYOffset(0); background.SetXOffset(0); background.SetAllowsPrint(true); background.SetAllowsView(true); background.SetPages("0"); background.Update(); } //if (watermarkInfo != null) //{ // document.DeleteWatermarks(); // if (watermarkInfo.WatermarkType == C_Watermark_Type.WATERMARK_TYPE_TEXT) // { // watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT); // watermark.SetText(watermarkInfo.Text); // if (watermarkInfo.TextSize == null) // { // watermarkInfo.TextSize = "6"; // } // watermark.SetFontName(watermarkInfo.FontName); // watermark.SetFontSize(float.Parse(watermarkInfo.TextSize)); // watermark.SetTextRGBColor(watermarkInfo.TextColor); // } // else // { // watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_IMG); // if (watermarkInfo.ImageArray != null) // { // watermark.SetImage(watermarkInfo.ImageArray, watermarkInfo.ImageWidth, watermarkInfo.ImageHeight); // } // watermark.SetScale(0.1f); // } // watermark.SetRotation(watermarkInfo.Rotation); // watermark.SetOpacity(watermarkInfo.Opacity); // watermark.SetFront(watermarkInfo.IsFront); // watermark.SetVertalign(watermarkInfo.WatermarkVertalign); // watermark.SetHorizalign(watermarkInfo.WatermarkHorizalign); // watermark.SetFullScreen(watermarkInfo.Isfull); // watermark.SetVertOffset(watermarkInfo.VertOffset); // watermark.SetHorizOffset(watermarkInfo.HorizOffset); // watermark.SetHorizontalSpacing(watermarkInfo.HorizontalSpacing); // watermark.SetVerticalSpacing(watermarkInfo.VerticalSpacing); // if (IsNewDoc) { watermark.SetPages("0"); } // else { watermark.SetPages(watermarkInfo.PageRange); } // watermark.CreateWatermark(); // watermark.UpdateWatermark(); //} } private void UndoManager_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { } private void CurrentViewer_CustomDrawHandler(object sender, CustomDrawData e) { if (e.DrawPages.Count > 0 && e.DrawContext != null) { List PageIndexLists = new List(); foreach (DrawPageData drawPageData in e.DrawPages) { if(watermarkInfo != null) { char[] enumerationSeparator = new char[] { ',' }; char[] rangeSeparator = new char[] { '-' }; if (CommonHelper.GetPagesInRange(ref PageIndexLists, watermarkInfo.PageRange, Document.PageCount, enumerationSeparator, rangeSeparator, true)) { //TODO Trace.WriteLine(CommonHelper.GetPagesInRange(ref PageIndexLists, watermarkInfo.PageRange, Document.PageCount, enumerationSeparator, rangeSeparator, true)); Trace.WriteLine(drawPageData.PageIndex); foreach (var abbb in PageIndexLists ) { Trace.WriteLine("smgui _______"+abbb); } if (PageIndexLists.Contains(drawPageData.PageIndex-1)) { WriteableBitmap waterMarkBitmap = GetWaterMark(PDFViewer.Document, e.Zoom, drawPageData.PageIndex); e.DrawContext.DrawImage(waterMarkBitmap, drawPageData.PageBound); } } } } } } private WriteableBitmap GetWaterMark(CPDFDocument oldDoc, double zoom, int pageIndex) { Size pageSize = oldDoc.GetPageSize(pageIndex); CPDFDocument newDoc = CPDFDocument.CreateDocument(); newDoc.InsertPage(0, pageSize.Width, pageSize.Height, null); CreateWatermark(newDoc,true); CPDFPage newPage = newDoc.PageAtIndex(0); double scale = 96.0 / 72.0; zoom = zoom * scale; Rect renderRect = new Rect(0, 0, (int)(pageSize.Width * scale), (int)(pageSize.Height * scale)); byte[] imageArray = new byte[(int)(renderRect.Width * renderRect.Height * 4)]; newPage.RenderPageBitmapWithMatrix((float)zoom, renderRect, 0x00FFFFFF, imageArray, 1, true); WriteableBitmap WirteBitmap = new WriteableBitmap((int)renderRect.Width, (int)renderRect.Height, 96, 96, PixelFormats.Bgra32, null); WirteBitmap.WritePixels(new Int32Rect(0, 0, (int)renderRect.Width, (int)renderRect.Height), imageArray, WirteBitmap.BackBufferStride, 0); return WirteBitmap; } public bool IsNavigationTarget(NavigationContext navigationContext) { return true; } public void OnNavigatedFrom(NavigationContext navigationContext) { } public void OnNavigatedTo(NavigationContext navigationContext) { CPDFViewer pdfViewer; navigationContext.Parameters.TryGetValue(ParameterNames.PDFViewer, out pdfViewer); if (pdfViewer != null) { if (!regionManager.Regions[ViewerRegionName].Views.Contains(PDFViewer)) { PDFViewer = new CPDFViewer(); PDFViewer.InitDocument(pdfViewer.Document.FilePath); Document = PDFViewer.Document; PDFViewer.CustomDrawHandler += CurrentViewer_CustomDrawHandler; PDFViewer.UndoManager.PropertyChanged += UndoManager_PropertyChanged; regionManager.AddToRegion(ViewerRegionName, PDFViewer); PDFViewer.SetAnnotInteraction(!PDFViewer.GetAnnotInteraction()); PDFViewer.Load(); PDFViewer.ChangeViewMode(ViewMode.Single); PDFViewer.SetMouseMode(MouseModes.Default); } } } } }