WatermarkDocumentContentViewModel.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using ComPDFKitViewer.PdfViewer;
  2. using PDF_Office.EventAggregators;
  3. using PDF_Office.Model.EditTools.Background;
  4. using PDF_Office.Model;
  5. using Prism.Commands;
  6. using Prism.Events;
  7. using Prism.Mvvm;
  8. using Prism.Regions;
  9. using System;
  10. using System.Collections.Generic;
  11. using System.Linq;
  12. using PDF_Office.Model.EditTools.Watermark;
  13. using ComPDFKit.PDFDocument;
  14. using ComPDFKit.PDFPage;
  15. using System.Windows.Media.Imaging;
  16. using System.Windows.Media;
  17. using System.Threading.Tasks;
  18. using ComPDFKit.PDFWatermark;
  19. using PDF_Office.Helper;
  20. using PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePagePrinter;
  21. using System.Drawing;
  22. using System.Windows;
  23. namespace PDF_Office.ViewModels.EditTools.Watermark
  24. {
  25. public class WatermarkDocumentContentViewModel : BindableBase,INavigationAware
  26. {
  27. public IEventAggregator eventAggregator;
  28. public CPDFViewer PDFViewer;
  29. public CPDFDocument document;
  30. private CPDFWatermark watermark;
  31. private ImageSource _imageSource = null;
  32. public ImageSource ImageSource
  33. {
  34. get { return _imageSource; }
  35. set
  36. {
  37. SetProperty(ref _imageSource, value);
  38. }
  39. }
  40. public WatermarkDocumentContentViewModel(IEventAggregator eventAggregator)
  41. {
  42. this.eventAggregator = eventAggregator;
  43. eventAggregator.GetEvent<SetWatermarkEvent>().Subscribe(SetWatermark);
  44. }
  45. public void SetWatermark(WatermarkInfo watermarkInfo)
  46. {
  47. CreateWatermark(watermarkInfo);
  48. document.PdfToImage("0-1", "C:\\Users\\kdanmobile\\Desktop");
  49. document.WriteToFilePath("C:\\Users\\kdanmobile\\Desktop\\sb22222.pdf");
  50. AwaitRenderBitmap(document);
  51. }
  52. public void CreateWatermark(WatermarkInfo watermarkInfo)
  53. {
  54. if (watermarkInfo.WatermarkType == C_Watermark_Type.WATERMARK_TYPE_TEXT)
  55. {
  56. watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
  57. watermark.SetText(watermarkInfo.Text);
  58. if (watermarkInfo.TextSize == null)
  59. {
  60. watermarkInfo.TextSize = "6";
  61. }
  62. watermark.SetScale(float.Parse(watermarkInfo.TextSize));
  63. watermark.SetTextRGBColor(watermarkInfo.TextColor);
  64. }
  65. else
  66. {
  67. watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_IMG);
  68. watermark.SetImage(watermarkInfo.ImageArray, watermarkInfo.ImageWidth, watermarkInfo.ImageHeight);
  69. watermark.SetScale(watermarkInfo.ImageSize % 100);
  70. }
  71. watermark.SetRotation(watermarkInfo.Rotation);
  72. watermark.SetOpacity(watermarkInfo.Opacity);
  73. watermark.SetFront(watermarkInfo.IsFront);
  74. watermark.SetVertalign(watermarkInfo.WatermarkVertalign);
  75. watermark.SetHorizalign(watermarkInfo.WatermarkHorizalign);
  76. watermark.SetFullScreen(true);
  77. watermark.SetVertOffset(watermarkInfo.VertOffset);
  78. watermark.SetHorizOffset(watermarkInfo.HorizOffset);
  79. watermark.SetHorizontalSpacing(watermarkInfo.HorizontalSpacing);
  80. watermark.SetVerticalSpacing(watermarkInfo.VerticalSpacing);
  81. watermark.SetPages("0");
  82. watermark.CreateWatermark();
  83. watermark.UpdateWatermark();
  84. }
  85. public static BitmapSource ToBitmapSource(System.Drawing.Bitmap image)
  86. {
  87. IntPtr ptr = image.GetHbitmap();//obtain the Hbitmap
  88. BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap
  89. (
  90. ptr,
  91. IntPtr.Zero,
  92. Int32Rect.Empty,
  93. System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()
  94. );
  95. return bs;
  96. }
  97. public async Task RenderBitmap(CPDFDocument doc)
  98. {
  99. CPDFPage page = doc.PageAtIndex(0,true);
  100. byte[] bmp_data = new byte[(int)page.PageSize.Width * (int)page.PageSize.Height * 4];
  101. Bitmap bitmap = await ToolMethod.RenderPageBitmap(document, (int)(page.PageSize.Width * 1 * 1.4), (int)(page.PageSize.Height * 1 * 1.4), 0, true, true);
  102. //await Task.Run(delegate
  103. //{
  104. // page.RenderPageBitmap(0, 0, (int)page.PageSize.Width, (int)page.PageSize.Height, 0xffffffff, bmp_data, 1);
  105. //});
  106. //PixelFormat fmt = PixelFormats.Bgra32;
  107. //BitmapSource bps = BitmapSource.Create((int)page.PageSize.Width, (int)page.PageSize.Height, 96.0, 96.0, fmt, null, bmp_data, ((int)page.PageSize.Width * fmt.BitsPerPixel + 7) / 8);
  108. ImageSource = ToBitmapSource(bitmap);
  109. }
  110. public async void AwaitRenderBitmap(CPDFDocument doc)
  111. {
  112. await RenderBitmap(doc);
  113. }
  114. public bool IsNavigationTarget(NavigationContext navigationContext)
  115. {
  116. return true;
  117. }
  118. public void OnNavigatedFrom(NavigationContext navigationContext)
  119. {
  120. }
  121. public void OnNavigatedTo(NavigationContext navigationContext)
  122. {
  123. navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
  124. document = PDFViewer.Document;
  125. AwaitRenderBitmap(PDFViewer.Document);
  126. }
  127. }
  128. }