WatermarkDocumentContentViewModel.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. <<<<<<< Updated upstream
  49. document.PdfToImage("1", "C:\\Users\\kdanmobile\\Desktop");
  50. document.WriteToFilePath("C:\\Users\\kdanmobile\\Desktop\\sb22222.pdf");
  51. =======
  52. document.PdfToImage("0-1", "D:\\");
  53. document.WriteToFilePath("D:\\sb22222.pdf");
  54. >>>>>>> Stashed changes
  55. AwaitRenderBitmap(document);
  56. }
  57. public void CreateWatermark(WatermarkInfo watermarkInfo)
  58. {
  59. if (watermarkInfo.WatermarkType == C_Watermark_Type.WATERMARK_TYPE_TEXT)
  60. {
  61. watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_TEXT);
  62. watermark.SetText(watermarkInfo.Text);
  63. if (watermarkInfo.TextSize == null)
  64. {
  65. watermarkInfo.TextSize = "6";
  66. }
  67. watermark.SetFontName(watermarkInfo.FontName);
  68. watermark.SetScale(float.Parse(watermarkInfo.TextSize));
  69. watermark.SetTextRGBColor(watermarkInfo.TextColor);
  70. }
  71. else
  72. {
  73. watermark = document.InitWatermark(C_Watermark_Type.WATERMARK_TYPE_IMG);
  74. watermark.SetImage(watermarkInfo.ImageArray, watermarkInfo.ImageWidth, watermarkInfo.ImageHeight);
  75. watermark.SetScale(0.1f);
  76. }
  77. watermark.SetRotation(watermarkInfo.Rotation);
  78. watermark.SetOpacity(watermarkInfo.Opacity);
  79. watermark.SetFront(watermarkInfo.IsFront);
  80. watermark.SetVertalign(watermarkInfo.WatermarkVertalign);
  81. watermark.SetHorizalign(watermarkInfo.WatermarkHorizalign);
  82. watermark.SetFullScreen(true);
  83. watermark.SetVertOffset(watermarkInfo.VertOffset);
  84. watermark.SetHorizOffset(watermarkInfo.HorizOffset);
  85. watermark.SetHorizontalSpacing(watermarkInfo.HorizontalSpacing);
  86. watermark.SetVerticalSpacing(watermarkInfo.VerticalSpacing);
  87. watermark.SetPages("0");
  88. watermark.CreateWatermark();
  89. watermark.UpdateWatermark();
  90. }
  91. public BitmapSource ToBitmapSource(System.Drawing.Bitmap image)
  92. {
  93. IntPtr ptr = image.GetHbitmap();//obtain the Hbitmap
  94. BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap
  95. (
  96. ptr,
  97. IntPtr.Zero,
  98. Int32Rect.Empty,
  99. System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions()
  100. );
  101. ;
  102. return bs;
  103. }
  104. public async Task RenderBitmap(CPDFDocument doc)
  105. {
  106. CPDFPage page = doc.PageAtIndex(0,true);
  107. byte[] bmp_data = new byte[(int)page.PageSize.Width * (int)page.PageSize.Height * 4];
  108. Bitmap bitmap = await ToolMethod.RenderPageBitmap(document, (int)(page.PageSize.Width * 1 * 1.4), (int)(page.PageSize.Height * 1 * 1.4), 0, true, true);
  109. ImageSource = ToBitmapSource(bitmap);
  110. <<<<<<< Updated upstream
  111. doc.ReleasePages();
  112. =======
  113. MessageBox.Show(ImageSource.ToString());
  114. >>>>>>> Stashed changes
  115. }
  116. public async void AwaitRenderBitmap(CPDFDocument doc)
  117. {
  118. await RenderBitmap(doc);
  119. }
  120. public bool IsNavigationTarget(NavigationContext navigationContext)
  121. {
  122. return true;
  123. }
  124. public void OnNavigatedFrom(NavigationContext navigationContext)
  125. {
  126. }
  127. public void OnNavigatedTo(NavigationContext navigationContext)
  128. {
  129. navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
  130. document = PDFViewer.Document;
  131. AwaitRenderBitmap(PDFViewer.Document);
  132. }
  133. }
  134. }