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; 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 WatermarkInfo watermarkInfo; public bool firstin = true; public string ViwerRegionName { 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); ViwerRegionName = 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.InvalidateVisual(); } public void CreateWatermark(CPDFDocument document) { 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); watermark.SetPages(watermarkInfo.PageRange); watermark.CreateWatermark(); watermark.UpdateWatermark(); } } public BitmapSource ToBitmapSource(System.Drawing.Bitmap image) { IntPtr ptr = image.GetHbitmap();//obtain the Hbitmap BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap ( ptr, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions() ); return bs; } public async Task RenderBitmap(CPDFDocument doc) { CPDFPage page = doc.PageAtIndex(0, true); byte[] bmp_data = new byte[(int)page.PageSize.Width * (int)page.PageSize.Height * 4]; Bitmap bitmap = await ToolMethod.RenderPageBitmap(Document, (int)(page.PageSize.Width * 1 * 1.4), (int)(page.PageSize.Height * 1 * 1.4), 0, true, true); ImageSource = ToBitmapSource(bitmap); doc.ReleasePages(); } 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) { foreach (DrawPageData drawPageData in e.DrawPages) { 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); 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[ViwerRegionName].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(ViwerRegionName, PDFViewer); PDFViewer.SetAnnotInteraction(!PDFViewer.GetAnnotInteraction()); PDFViewer.Load(); PDFViewer.ChangeViewMode(ViewMode.Single); PDFViewer.SetMouseMode(MouseModes.Default); } } } } }